2 Parser = new(Ext.extend(Object, {
5 parse: function(filename) {
6 var stream = new Stream(filename),
9 Loader.require('Parser.Statement');
10 ret = (new Parser.Statement()).parse(stream);
16 evaluate: function(name, value) {
18 param = (this.params.hasOwnProperty(name)) ? this.params[name] : false,
21 if (value === undefined) {
25 if (Ext.isString(value)) {
26 match = value.match(/^(\!|<=|>=|<|>)/);
30 value = value.slice(modifier.length);
34 if (value === 'true') {
37 else if (value === 'false') {
41 else if (!isNaN(value)) {
42 value = parseFloat(value);
48 return (param !== value);
50 return (param > value);
52 return (param < value);
54 return (param <= value);
56 return (param >= value);
58 return (param === value);
62 setParams: function(params) {
63 this.params = params || {};
66 isCloseOf: function(str, statement) {
67 if (!statement.type) {
71 return str.trim().match(new RegExp("^\\/\\/(?:\\t|\\s)*<\\/" + ((statement.isInverted) ? "!" : "") + statement.type + ">$")) !== null;
74 isStatement: function(str) {
75 return this.parseStatementParts(str) !== null;
78 parseStatementParts: function(str) {
79 return str.trim().match(/^\/\/(?:\t|\s)*<([^\/]+)>$/);
82 parseStatementProperties: function(str) {
84 expect = function(regexp) {
85 var result = str.match(regexp);
87 if (result !== null) {
88 str = str.slice(result[0].length);
94 name, equalSign, valueWrapper, valueCheck, value;
96 while (str.length > 0) {
98 name = expect(/^[\w]+/i);
104 equalSign = expect(/^=/);
106 if (equalSign === null) {
107 properties[name] = true;
111 valueWrapper = expect(/^('|")/i);
112 valueCheck = valueWrapper || "\\s";
114 value = expect(new RegExp('^[^' + valueCheck + ']+'));
116 if (valueWrapper !== null) {
117 expect(new RegExp(valueWrapper));
120 properties[name] = value;
126 parseStatement: function(string) {
127 var str = string.trim(),
128 parts = this.parseStatementParts(str),
129 typeMatch, statement;
131 // Check if it's actually a valid statement
132 if (parts === null) {
138 typeMatch = str.match(/^(\!)?([\w]+)/i);
140 if (typeMatch === null) {
148 statement.type = typeMatch[2];
149 statement.isInverted = (typeMatch[1] !== undefined);
151 str = str.substr(typeMatch[0].length, str.length).trim();
152 statement.properties = this.parseStatementProperties(str);