Mercurial Hosting > luan
comparison src/luan/modules/parsers/LuanParser.java @ 1574:f118ead273a1
LuanParser.longString
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 20 Dec 2020 13:17:27 -0700 |
parents | b89212fd04b5 |
children | c922446f53aa |
comparison
equal
deleted
inserted
replaced
1573:c6b50b7b958c | 1574:f118ead273a1 |
---|---|
60 return tbl; | 60 return tbl; |
61 return null; | 61 return null; |
62 } | 62 } |
63 | 63 |
64 private String string() throws ParseException { | 64 private String string() throws ParseException { |
65 String s; | |
66 s = quotedString(); | |
67 if( s != null ) | |
68 return s; | |
69 s = longString(); | |
70 if( s != null ) | |
71 return s; | |
72 return null; | |
73 } | |
74 | |
75 private String quotedString() throws ParseException { | |
65 parser.begin(); | 76 parser.begin(); |
66 if( !parser.match('"') ) | 77 if( !parser.match('"') ) |
67 return parser.failure(null); | 78 return parser.failure(null); |
68 StringBuilder sb = new StringBuilder(); | 79 StringBuilder sb = new StringBuilder(); |
69 while( parser.anyChar() ) { | 80 while( parser.anyChar() ) { |
119 sb.append(c); | 130 sb.append(c); |
120 } | 131 } |
121 } | 132 } |
122 parser.failure(); | 133 parser.failure(); |
123 throw exception("unclosed string"); | 134 throw exception("unclosed string"); |
135 } | |
136 | |
137 private String longString() throws ParseException { | |
138 parser.begin(); | |
139 if( !parser.match('[') ) | |
140 return parser.failure(null); | |
141 int start = parser.currentIndex(); | |
142 while( parser.match('=') ); | |
143 int nEquals = parser.currentIndex() - start; | |
144 if( !parser.match('[') ) | |
145 return parser.failure(null); | |
146 endOfLine(); | |
147 start = parser.currentIndex(); | |
148 while( !longBracketsEnd(nEquals) ) { | |
149 if( !(endOfLine() || parser.anyChar()) ) | |
150 throw exception("Unclosed long string"); | |
151 } | |
152 String s = parser.text.substring( start, parser.currentIndex() - nEquals - 2 ); | |
153 return parser.success(s); | |
154 } | |
155 | |
156 private boolean longBracketsEnd(int nEquals) { | |
157 parser.begin(); | |
158 if( !parser.match(']') ) | |
159 return parser.failure(); | |
160 while( nEquals-- > 0 ) { | |
161 if( !parser.match('=') ) | |
162 return parser.failure(); | |
163 } | |
164 if( !parser.match(']') ) | |
165 return parser.failure(); | |
166 return parser.success(); | |
124 } | 167 } |
125 | 168 |
126 private Number number() { | 169 private Number number() { |
127 parser.begin(); | 170 parser.begin(); |
128 if( parser.match("double") ) { | 171 if( parser.match("double") ) { |