comparison core/src/luan/modules/parsers/Theme.java @ 688:f99f51bc5bea

fix up-values
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 18 Apr 2016 15:46:05 -0600
parents fc08c3b42010
children 6a489a6b3cbc
comparison
equal deleted inserted replaced
687:fc08c3b42010 688:f99f51bc5bea
58 if( name==null ) 58 if( name==null )
59 throw exception("invalid block name"); 59 throw exception("invalid block name");
60 if( !parser.match('}') ) 60 if( !parser.match('}') )
61 throw exception("unclosed define tag"); 61 throw exception("unclosed define tag");
62 String block = parseBody("define:"+name); 62 String block = parseBody("define:"+name);
63 String rtn = "function M." + name + "(env) " + block + "end; "; 63 String rtn = "function M." + name + "(env) " + block + " end; ";
64 return parser.success(rtn); 64 return parser.success(rtn);
65 } 65 }
66 66
67 private String parseBody(String tagName) throws ParseException { 67 private String parseBody(String tagName) throws ParseException {
68 StringBuilder stmts = new StringBuilder(); 68 StringBuilder stmts = new StringBuilder();
69 int start = parser.currentIndex(); 69 int start = parser.currentIndex();
70 stmts.append( "%>" );
71 int end = start; 70 int end = start;
72 while( !matchEndTag(tagName) ) { 71 while( !matchEndTag(tagName) ) {
73 if( parser.endOfInput() ) { 72 if( parser.endOfInput() ) {
74 parser.failure(); 73 parser.failure();
75 throw exception("unclosed block"); 74 throw exception("unclosed block");
90 } 89 }
91 parser.anyChar(); 90 parser.anyChar();
92 end = parser.currentIndex(); 91 end = parser.currentIndex();
93 } 92 }
94 addText(start,end,stmts); 93 addText(start,end,stmts);
95 stmts.append( "<% ");
96 return stmts.toString(); 94 return stmts.toString();
97 } 95 }
98 96
99 private boolean matchEndTag(String tagName) { 97 private boolean matchEndTag(String tagName) {
100 parser.begin(); 98 parser.begin();
105 return parser.match("{/") && parser.match(tagName) && parser.match('}') ? parser.success() : parser.failure(); 103 return parser.match("{/") && parser.match(tagName) && parser.match('}') ? parser.success() : parser.failure();
106 } 104 }
107 105
108 private void addText(int start,int end,StringBuilder stmts) { 106 private void addText(int start,int end,StringBuilder stmts) {
109 if( start < end ) { 107 if( start < end ) {
110 stmts.append( parser.text.substring(start,end) ); 108 stmts.append( "%>" ).append( parser.text.substring(start,end) ).append( "<%" );
111 } 109 }
112 } 110 }
113 111
114 private String parseBlock() throws ParseException { 112 private String parseBlock() throws ParseException {
115 int start = parser.begin(); 113 int start = parser.begin();
121 throw exception("invalid block name"); 119 throw exception("invalid block name");
122 } 120 }
123 if( !parser.match('}') ) 121 if( !parser.match('}') )
124 return parser.failure(null); 122 return parser.failure(null);
125 String block = parseBody("block:"+name); 123 String block = parseBody("block:"+name);
126 String rtn = "<% env."+ name + "( env, function(env) " + block + "end) %>"; 124 String rtn = " env."+ name + "( env, function(env) " + block + "end); ";
127 // String rtn = "<% env." + tag.name + "(" + (tag.attrs.isEmpty() ? "nil" : table(tag.attrs)) + ",env,function(env) %>" + block + "<% end) %>"; 125 // String rtn = "<% env." + tag.name + "(" + (tag.attrs.isEmpty() ? "nil" : table(tag.attrs)) + ",env,function(env) %>" + block + "<% end) %>";
128 return parser.success(rtn); 126 return parser.success(rtn);
129 } 127 }
130 128
131 private String parseSimpleTag() throws ParseException { 129 private String parseSimpleTag() throws ParseException {
136 if( name==null ) 134 if( name==null )
137 return parser.failure(null); 135 return parser.failure(null);
138 if( !parser.match('}') ) 136 if( !parser.match('}') )
139 return parser.failure(null); 137 return parser.failure(null);
140 // rtn = "<% env." + name + (attrs.isEmpty() ? "()" : table(attrs)) + " %>"; 138 // rtn = "<% env." + name + (attrs.isEmpty() ? "()" : table(attrs)) + " %>";
141 String rtn = "<% env." + name + "(env) %>"; 139 String rtn = " env." + name + "(env); ";
142 return parser.success(rtn); 140 return parser.success(rtn);
143 } 141 }
144 142
145 private void InlineSpaces() { 143 private void InlineSpaces() {
146 while( parser.anyOf(" \t") ); 144 while( parser.anyOf(" \t") );