mapres 3.dev26__py3-none-any.whl → 3.dev28__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mapres/tokenizer.py +90 -13
- {mapres-3.dev26.dist-info → mapres-3.dev28.dist-info}/METADATA +1 -1
- {mapres-3.dev26.dist-info → mapres-3.dev28.dist-info}/RECORD +6 -6
- {mapres-3.dev26.dist-info → mapres-3.dev28.dist-info}/WHEEL +0 -0
- {mapres-3.dev26.dist-info → mapres-3.dev28.dist-info}/licenses/LICENSE +0 -0
- {mapres-3.dev26.dist-info → mapres-3.dev28.dist-info}/top_level.txt +0 -0
mapres/tokenizer.py
CHANGED
|
@@ -93,6 +93,18 @@ class Tokenizer:
|
|
|
93
93
|
start = self.i
|
|
94
94
|
self.advance(2)
|
|
95
95
|
ident = self._read_ident()
|
|
96
|
+
# ident == None means _read_ident already emitted IDENT and nested tokens
|
|
97
|
+
if ident is None:
|
|
98
|
+
# nested call already emitted; expect closing '}}'
|
|
99
|
+
if self.match('}}'):
|
|
100
|
+
self.advance(2)
|
|
101
|
+
self.emit(TokenType.BRACE_CLOSE)
|
|
102
|
+
continue
|
|
103
|
+
# fallback to literal
|
|
104
|
+
self.i = start
|
|
105
|
+
buf.append(self.peek())
|
|
106
|
+
self.advance()
|
|
107
|
+
continue
|
|
96
108
|
if ident is not None and self.match('}}'):
|
|
97
109
|
self.emit(TokenType.BRACE_OPEN)
|
|
98
110
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -110,6 +122,16 @@ class Tokenizer:
|
|
|
110
122
|
start = self.i
|
|
111
123
|
self.advance(2)
|
|
112
124
|
ident = self._read_ident()
|
|
125
|
+
if ident is None:
|
|
126
|
+
# nested call already emitted; expect closing '}'
|
|
127
|
+
if self.peek() == '}':
|
|
128
|
+
self.advance()
|
|
129
|
+
self.emit(TokenType.DOLLAR_CLOSE)
|
|
130
|
+
continue
|
|
131
|
+
self.i = start
|
|
132
|
+
buf.append(self.peek())
|
|
133
|
+
self.advance()
|
|
134
|
+
continue
|
|
113
135
|
if ident is not None and self.peek() == '}':
|
|
114
136
|
self.emit(TokenType.DOLLAR_OPEN)
|
|
115
137
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -144,6 +166,16 @@ class Tokenizer:
|
|
|
144
166
|
start = self.i
|
|
145
167
|
self.advance()
|
|
146
168
|
ident = self._read_ident()
|
|
169
|
+
if ident is None:
|
|
170
|
+
# nested call already emitted; expect closing '>'
|
|
171
|
+
if self.peek() == '>':
|
|
172
|
+
self.advance()
|
|
173
|
+
self.emit(TokenType.ANGLE_CLOSE)
|
|
174
|
+
continue
|
|
175
|
+
self.i = start
|
|
176
|
+
buf.append(self.peek())
|
|
177
|
+
self.advance()
|
|
178
|
+
continue
|
|
147
179
|
if ident is not None and self.peek() == '>':
|
|
148
180
|
self.emit(TokenType.ANGLE_OPEN)
|
|
149
181
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -161,6 +193,16 @@ class Tokenizer:
|
|
|
161
193
|
start = self.i
|
|
162
194
|
self.advance()
|
|
163
195
|
ident = self._read_ident()
|
|
196
|
+
if ident is None:
|
|
197
|
+
# nested call already emitted; expect closing '|'
|
|
198
|
+
if self.peek() == '|':
|
|
199
|
+
self.advance()
|
|
200
|
+
self.emit(TokenType.PIPE_CLOSE)
|
|
201
|
+
continue
|
|
202
|
+
self.i = start
|
|
203
|
+
buf.append(self.peek())
|
|
204
|
+
self.advance()
|
|
205
|
+
continue
|
|
164
206
|
if ident is not None and self.peek() == '|':
|
|
165
207
|
self.emit(TokenType.PIPE_OPEN)
|
|
166
208
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -178,6 +220,16 @@ class Tokenizer:
|
|
|
178
220
|
start = self.i
|
|
179
221
|
self.advance()
|
|
180
222
|
ident = self._read_ident()
|
|
223
|
+
if ident is None:
|
|
224
|
+
# nested call already emitted; expect closing '%'
|
|
225
|
+
if self.peek() == '%':
|
|
226
|
+
self.advance()
|
|
227
|
+
self.emit(TokenType.PERCENT_CLOSE)
|
|
228
|
+
continue
|
|
229
|
+
self.i = start
|
|
230
|
+
buf.append(self.peek())
|
|
231
|
+
self.advance()
|
|
232
|
+
continue
|
|
181
233
|
if ident is not None and self.peek() == '%':
|
|
182
234
|
self.emit(TokenType.PERCENT_OPEN)
|
|
183
235
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -195,6 +247,16 @@ class Tokenizer:
|
|
|
195
247
|
start = self.i
|
|
196
248
|
self.advance()
|
|
197
249
|
ident = self._read_ident()
|
|
250
|
+
if ident is None:
|
|
251
|
+
# nested call already emitted; expect closing ':'
|
|
252
|
+
if self.peek() == ':':
|
|
253
|
+
self.advance()
|
|
254
|
+
self.emit(TokenType.COLON_CLOSE)
|
|
255
|
+
continue
|
|
256
|
+
self.i = start
|
|
257
|
+
buf.append(self.peek())
|
|
258
|
+
self.advance()
|
|
259
|
+
continue
|
|
198
260
|
if ident is not None and self.peek() == ':':
|
|
199
261
|
self.emit(TokenType.COLON_OPEN)
|
|
200
262
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -206,19 +268,6 @@ class Tokenizer:
|
|
|
206
268
|
self.advance()
|
|
207
269
|
continue
|
|
208
270
|
|
|
209
|
-
# --- parens ---
|
|
210
|
-
if ch == '(':
|
|
211
|
-
flush_text()
|
|
212
|
-
self.emit(TokenType.LPAREN)
|
|
213
|
-
self.advance()
|
|
214
|
-
continue
|
|
215
|
-
|
|
216
|
-
if ch == ')':
|
|
217
|
-
flush_text()
|
|
218
|
-
self.emit(TokenType.RPAREN)
|
|
219
|
-
self.advance()
|
|
220
|
-
continue
|
|
221
|
-
|
|
222
271
|
# fallback TEXT
|
|
223
272
|
buf.append(ch)
|
|
224
273
|
self.advance()
|
|
@@ -245,4 +294,32 @@ class Tokenizer:
|
|
|
245
294
|
ident = self.text[start:self.i]
|
|
246
295
|
if ident.startswith('_') or ident.endswith('_') or '-' in ident:
|
|
247
296
|
return None
|
|
297
|
+
|
|
298
|
+
# unified nested-call support: if '(' immediately follows the ident,
|
|
299
|
+
# emit IDENT + LPAREN + nested TEXT + RPAREN and return None.
|
|
300
|
+
if self.peek() == '(':
|
|
301
|
+
# emit IDENT token
|
|
302
|
+
self.emit(TokenType.IDENT, ident)
|
|
303
|
+
|
|
304
|
+
# consume '(' and emit LPAREN
|
|
305
|
+
self.advance()
|
|
306
|
+
self.emit(TokenType.LPAREN)
|
|
307
|
+
|
|
308
|
+
# capture nested content as TEXT until the next ')'
|
|
309
|
+
nested_start = self.i
|
|
310
|
+
while self.peek() not in (')', ''):
|
|
311
|
+
self.advance()
|
|
312
|
+
nested_text = self.text[nested_start:self.i]
|
|
313
|
+
if nested_text:
|
|
314
|
+
self.emit(TokenType.TEXT, nested_text)
|
|
315
|
+
|
|
316
|
+
# consume ')' and emit RPAREN if present
|
|
317
|
+
if self.peek() == ')':
|
|
318
|
+
self.advance()
|
|
319
|
+
self.emit(TokenType.RPAREN)
|
|
320
|
+
|
|
321
|
+
# signal to caller that tokens were emitted already
|
|
322
|
+
return None
|
|
323
|
+
|
|
324
|
+
# no nested call; return the identifier string
|
|
248
325
|
return ident
|
|
@@ -7,13 +7,13 @@ mapres/exceptions.py,sha256=D2XKnrMkZDyUXQt2PmaKbj08FObWU00yXKGHwNpjvww,222
|
|
|
7
7
|
mapres/layers.py,sha256=sFc1eUOBg2BoB2cBXIleq8RMYcg5GZpUoCnGh-uKN6U,1380
|
|
8
8
|
mapres/parser.py,sha256=q3PgyvXJn9c-EJJYyibw7sHJ0Y9soirgB10OyTKaT9s,3657
|
|
9
9
|
mapres/resolver.py,sha256=ldSNSUg-yvk2LJnpyGpexYvPiVACFa4IMGHOFejGY_0,3889
|
|
10
|
-
mapres/tokenizer.py,sha256=
|
|
10
|
+
mapres/tokenizer.py,sha256=FLrO4pNKEmsFTUXXOUQ-GLIozzs18hbMRmWV_ccwt7M,11095
|
|
11
11
|
mapres/utils.py,sha256=Bv8iEeK03QtGtqY9GnBAgE4Bul56mGvAkLt96z6kU2k,137
|
|
12
12
|
mapres/maps/__init__.py,sha256=lIRRfem1Fw4iynuwUQ7BY5qrC4fbJKxqLivao2_Dtm4,239
|
|
13
13
|
mapres/maps/color.py,sha256=noRTGFNo9xLl5YEhX0tttV6i_oDAiptXmRVnkr5EzwM,1348
|
|
14
14
|
mapres/maps/time.py,sha256=TyncycYoIGVZWps32qWlFy2a2hTayvZWVHu9uh2nid8,2050
|
|
15
|
-
mapres-3.
|
|
16
|
-
mapres-3.
|
|
17
|
-
mapres-3.
|
|
18
|
-
mapres-3.
|
|
19
|
-
mapres-3.
|
|
15
|
+
mapres-3.dev28.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
16
|
+
mapres-3.dev28.dist-info/METADATA,sha256=7qyVrSLnMSxSGJiTU5HCcvdNpa7DOy3iCLTcPohv8Kk,1476
|
|
17
|
+
mapres-3.dev28.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
18
|
+
mapres-3.dev28.dist-info/top_level.txt,sha256=5LMVQqJdtyjxfzv7wJBOZ-360m0Yc79w_-Y7s3n6cTw,7
|
|
19
|
+
mapres-3.dev28.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|