瀏覽代碼

clean up noisy parserContext references

tags/0.5.0-vsc
thegrandpoobah 16 年之前
父節點
當前提交
9eb8aa4c84
共有 1 個檔案被更改,包括 31 行新增32 行删除
  1. +31
    -32
      mustache.js

+ 31
- 32
mustache.js 查看文件

@@ -26,6 +26,7 @@ var Mustache = function() {
createParserContext: function(tokens, partials, openTag, closeTag) { createParserContext: function(tokens, partials, openTag, closeTag) {
return { return {
tokens: tokens, tokens: tokens,
token: function() { return this.tokens[this.index]; },
index: 0, index: 0,
length: tokens.length, length: tokens.length,
partials: partials, partials: partials,
@@ -139,17 +140,17 @@ var Mustache = function() {
stateMachine: { stateMachine: {
text: function(parserContext, contextStack) { text: function(parserContext, contextStack) {
switch (parserContext.tokens[parserContext.index]) {
switch (parserContext.token()) {
case parserContext.openTag: case parserContext.openTag:
return 'openMustache'; return 'openMustache';
default: default:
this.send_func(parserContext.tokens[parserContext.index]);
this.send_func(parserContext.token());
return 'text'; return 'text';
} }
}, },
openMustache: function(parserContext, contextStack) { openMustache: function(parserContext, contextStack) {
switch (parserContext.tokens[parserContext.index]) {
switch (parserContext.token()) {
case '{': case '{':
parserContext.stack.push({tagType:'unescapedVariable', subtype: 'tripleMustache'}); parserContext.stack.push({tagType:'unescapedVariable', subtype: 'tripleMustache'});
return 'keyName'; return 'keyName';
@@ -185,24 +186,24 @@ var Mustache = function() {
} }
}, },
closeMustache: function(parserContext, contextStack) { closeMustache: function(parserContext, contextStack) {
if (this.isWhitespace(parserContext.tokens[parserContext.index])) {
if (this.isWhitespace(parserContext.token())) {
return 'closeMustache'; return 'closeMustache';
} else if (parserContext.tokens[parserContext.index]===parserContext.closeTag) {
} else if (parserContext.token()===parserContext.closeTag) {
return this.dispatchCommand(parserContext, contextStack); return this.dispatchCommand(parserContext, contextStack);
} }
}, },
expectClosingMustache: function(parserContext, contextStack) { expectClosingMustache: function(parserContext, contextStack) {
if (parserContext.closeTag==='}}' && if (parserContext.closeTag==='}}' &&
parserContext.tokens[parserContext.index]==='}}') {
parserContext.token()==='}}') {
return 'expectClosingParenthesis'; return 'expectClosingParenthesis';
} else if (parserContext.tokens[parserContext.index]==='}') {
} else if (parserContext.token()==='}') {
return 'closeMustache'; return 'closeMustache';
} else { } else {
throw new ParserException('Unexpected token encountered.'); throw new ParserException('Unexpected token encountered.');
} }
}, },
expectClosingParenthesis: function(parserContext, contextStack) { expectClosingParenthesis: function(parserContext, contextStack) {
if (parserContext.tokens[parserContext.index]==='}') {
if (parserContext.token()==='}') {
return this.dispatchCommand(parserContext, contextStack); return this.dispatchCommand(parserContext, contextStack);
} else { } else {
throw new ParserException('Unexpected token encountered.'); throw new ParserException('Unexpected token encountered.');
@@ -233,59 +234,59 @@ var Mustache = function() {
} }
}, },
simpleKeyName: function(parserContext, contextStack) { simpleKeyName: function(parserContext, contextStack) {
if (this.isWhitespace(parserContext.tokens[parserContext.index])) {
if (this.isWhitespace(parserContext.token())) {
return 'simpleKeyName'; return 'simpleKeyName';
} else { } else {
parserContext.stack.push(parserContext.tokens[parserContext.index]);
parserContext.stack.push(parserContext.token());
return 'closeMustache'; return 'closeMustache';
} }
}, },
setDelimiterStart: function(parserContext, contextStack) { setDelimiterStart: function(parserContext, contextStack) {
if (this.isWhitespace(parserContext.tokens[parserContext.index]) ||
parserContext.tokens[parserContext.index]==='=') {
if (this.isWhitespace(parserContext.token()) ||
parserContext.token()==='=') {
throw new ParserException('Syntax error in Set Delimiter tag'); throw new ParserException('Syntax error in Set Delimiter tag');
} else { } else {
parserContext.stack.push(parserContext.tokens[parserContext.index]);
parserContext.stack.push(parserContext.token());
return 'setDelimiterStartOrWhitespace'; return 'setDelimiterStartOrWhitespace';
} }
}, },
setDelimiterStartOrWhitespace: function(parserContext, contextStack) { setDelimiterStartOrWhitespace: function(parserContext, contextStack) {
if (this.isWhitespace(parserContext.tokens[parserContext.index])) {
if (this.isWhitespace(parserContext.token())) {
return 'setDelimiterEnd'; return 'setDelimiterEnd';
} else if (parserContext.tokens[parserContext.index]==='='){
} else if (parserContext.token()==='='){
throw new ParserException('Syntax error in Set Delimiter tag'); throw new ParserException('Syntax error in Set Delimiter tag');
} else { } else {
parserContext.stack.push(parserContext.stack.pop() + parserContext.tokens[parserContext.index]);
parserContext.stack.push(parserContext.stack.pop() + parserContext.token());
return 'setDelimiterStartOrWhitespace'; return 'setDelimiterStartOrWhitespace';
} }
}, },
setDelimiterEnd: function(parserContext, contextStack) { setDelimiterEnd: function(parserContext, contextStack) {
if (this.isWhitespace(parserContext.tokens[parserContext.index])) {
if (this.isWhitespace(parserContext.token())) {
return 'setDelimiterEnd'; return 'setDelimiterEnd';
} else if (parserContext.tokens[parserContext.index]==='=') {
} else if (parserContext.token()==='=') {
throw new ParserException('Syntax error in Set Delimiter tag'); throw new ParserException('Syntax error in Set Delimiter tag');
} else { } else {
parserContext.stack.push(parserContext.tokens[parserContext.index]);
parserContext.stack.push(parserContext.token());
return 'setDelimiterEndOrEqualSign'; return 'setDelimiterEndOrEqualSign';
} }
}, },
setDelimiterEndOrEqualSign: function(parserContext, contextStack) { setDelimiterEndOrEqualSign: function(parserContext, contextStack) {
if (parserContext.tokens[parserContext.index]==='=') {
if (parserContext.token()==='=') {
return 'setDelimiterExpectClosingTag'; return 'setDelimiterExpectClosingTag';
} else if (this.isWhitespace(parserContext.tokens[parserContext.index])) {
} else if (this.isWhitespace(parserContext.token())) {
throw new ParserException('Syntax error in Set Delimiter tag'); throw new ParserException('Syntax error in Set Delimiter tag');
} else { } else {
parserContext.stack.push(parserContext.stack.pop() + parserContext.tokens[parserContext.index]);
parserContext.stack.push(parserContext.stack.pop() + parserContext.token());
return 'setDelimiterEndOrEqualSign'; return 'setDelimiterEndOrEqualSign';
} }
}, },
setDelimiterExpectClosingTag: function(parserContext, contextStack) { setDelimiterExpectClosingTag: function(parserContext, contextStack) {
if (parserContext.tokens[parserContext.index]===parserContext.closeTag) {
if (parserContext.token()===parserContext.closeTag) {
var newCloseTag = parserContext.stack.pop(); var newCloseTag = parserContext.stack.pop();
var newOpenTag = parserContext.stack.pop(); var newOpenTag = parserContext.stack.pop();
var command = parserContext.stack.pop(); var command = parserContext.stack.pop();
@@ -317,32 +318,32 @@ var Mustache = function() {
}, },
endSectionScan: function(parserContext, contextStack) { endSectionScan: function(parserContext, contextStack) {
switch (parserContext.tokens[parserContext.index]) {
switch (parserContext.token()) {
case parserContext.openTag: case parserContext.openTag:
return 'expectSectionOrEndSection'; return 'expectSectionOrEndSection';
default: default:
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.tokens[parserContext.index]);
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.token());
return 'endSectionScan'; return 'endSectionScan';
} }
}, },
expectSectionOrEndSection: function(parserContext, contextStack) { expectSectionOrEndSection: function(parserContext, contextStack) {
switch (parserContext.tokens[parserContext.index]) {
switch (parserContext.token()) {
case '#': case '#':
case '^': case '^':
parserContext.stack[parserContext.stack.length-1].depth++; parserContext.stack[parserContext.stack.length-1].depth++;
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.openTag + parserContext.tokens[parserContext.index]);
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.openTag + parserContext.token());
return 'endSectionScan'; return 'endSectionScan';
case '/': case '/':
parserContext.stack.push({tagType:'endSection'}); parserContext.stack.push({tagType:'endSection'});
return 'simpleKeyName'; return 'simpleKeyName';
default: default:
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.openTag + parserContext.tokens[parserContext.index]);
parserContext.stack[parserContext.stack.length-1].content.push(parserContext.openTag + parserContext.token());
return 'endSectionScan'; return 'endSectionScan';
} }
}, },
discard: function(parserContext, contextStack) { discard: function(parserContext, contextStack) {
if (parserContext.tokens[parserContext.index]===parserContext.closeTag) {
if (parserContext.token()===parserContext.closeTag) {
return 'text'; return 'text';
} else { } else {
return 'discard'; return 'discard';
@@ -361,10 +362,8 @@ var Mustache = function() {
switch (command.tagType) { switch (command.tagType) {
case 'section': case 'section':
parserContext.stack.push({sectionType:'section', key:key, content:[], depth:1});
return 'endSectionScan';
case 'invertedSection': case 'invertedSection':
parserContext.stack.push({sectionType:'invertedSection', key:key, content:[], depth:1});
parserContext.stack.push({sectionType:command.tagType, key:key, content:[], depth:1});
return 'endSectionScan'; return 'endSectionScan';
case 'variable': case 'variable':
this.render_variable(key, contextStack); this.render_variable(key, contextStack);


Loading…
取消
儲存