X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..3789b528d8dd8aad4558e38e22d775bcab1cbd36:/jsbuilder/src/Parser.old.js diff --git a/jsbuilder/src/Parser.old.js b/jsbuilder/src/Parser.old.js new file mode 100644 index 00000000..e036e75c --- /dev/null +++ b/jsbuilder/src/Parser.old.js @@ -0,0 +1,116 @@ +Parser = { + isBuild: function(builds) { + return builds.split('|').indexOf(this.build) != -1; + }, + + parse: function(file, build) { + var line, + trimmed, + o = this.output = []; + + this.build = build; + + file = new Stream(file); + while (!file.eof) { + line = file.readLine(); + trimmed = line.trim(); + if (this.isStatement(trimmed)) { + this.handleStatement(this.parseStatement(trimmed), file); + } + else { + this.output.push(line); + this.checkExtraComma(); + } + } + file.close(); + return this.output.join('\n'); + }, + + checkExtraComma: function() { + var output = this.output, + ln = output.length - 1, + line = output[ln], + trimmed = line.trim(), + prevLine; + + if (trimmed[0] == '}') { + while (output[--ln].trim() == '') { + output.splice(ln, 1); + } + prevLine = output[ln]; + if (prevLine.trim().slice( - 1) == ',') { + output[ln] = prevLine.slice(0, prevLine.lastIndexOf(',')); + } + } + }, + + isStatement: function(line) { + return line.substr(0, 3) == '//[' && line.substr( - 1) == ']'; + }, + + handleStatement: function(statement, file) { + switch (statement.type) { + case 'if': + case 'elseif': + this.handleIf(file, statement.condition); + break; + + case 'else': + this.handleElse(file); + break; + } + }, + + parseStatement: function(statement) { + var parts = statement.substring(3, statement.length - 1).split(' '); + return { + type: parts[0], + condition: parts[1] + }; + }, + + handleIf: function(file, condition) { + if (this.isBuild(condition)) { + var next = this.getNextStatement(file); + this.output.push(next.buffer); + this.toEndIf(file, next); + } + else { + this.handleStatement(this.getNextStatement(file), file); + } + }, + + handleElse: function(file) { + var next = this.toEndIf(file); + this.output.push(next.buffer); + }, + + toEndIf: function(file, next) { + next = next || this.getNextStatement(file); + while (next && next.type != 'endif') { + next = this.getNextStatement(file); + } + return next; + }, + + getNextStatement: function(file) { + var buffer = [], + line, + trimmed, + ret; + + while (!file.eof) { + line = file.readLine(); + trimmed = line.trim(); + if (!this.isStatement(trimmed)) { + buffer.push(line); + } + else { + ret = this.parseStatement(trimmed); + ret.buffer = buffer.join('\n'); + return ret; + } + } + return null; + } +}; \ No newline at end of file