Mercurial Hosting > luan
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") ); |