mapres 3.dev27__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 +92 -16
- {mapres-3.dev27.dist-info → mapres-3.dev28.dist-info}/METADATA +1 -1
- {mapres-3.dev27.dist-info → mapres-3.dev28.dist-info}/RECORD +6 -6
- {mapres-3.dev27.dist-info → mapres-3.dev28.dist-info}/WHEEL +0 -0
- {mapres-3.dev27.dist-info → mapres-3.dev28.dist-info}/licenses/LICENSE +0 -0
- {mapres-3.dev27.dist-info → mapres-3.dev28.dist-info}/top_level.txt +0 -0
mapres/tokenizer.py
CHANGED
|
@@ -16,9 +16,8 @@ class TokenType(Enum):
|
|
|
16
16
|
PIPE_CLOSE = auto()
|
|
17
17
|
PERCENT_OPEN = auto()
|
|
18
18
|
PERCENT_CLOSE = auto()
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# RPAREN = auto()
|
|
19
|
+
LPAREN = auto()
|
|
20
|
+
RPAREN = auto()
|
|
22
21
|
|
|
23
22
|
|
|
24
23
|
class Token:
|
|
@@ -94,6 +93,18 @@ class Tokenizer:
|
|
|
94
93
|
start = self.i
|
|
95
94
|
self.advance(2)
|
|
96
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
|
|
97
108
|
if ident is not None and self.match('}}'):
|
|
98
109
|
self.emit(TokenType.BRACE_OPEN)
|
|
99
110
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -111,6 +122,16 @@ class Tokenizer:
|
|
|
111
122
|
start = self.i
|
|
112
123
|
self.advance(2)
|
|
113
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
|
|
114
135
|
if ident is not None and self.peek() == '}':
|
|
115
136
|
self.emit(TokenType.DOLLAR_OPEN)
|
|
116
137
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -145,6 +166,16 @@ class Tokenizer:
|
|
|
145
166
|
start = self.i
|
|
146
167
|
self.advance()
|
|
147
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
|
|
148
179
|
if ident is not None and self.peek() == '>':
|
|
149
180
|
self.emit(TokenType.ANGLE_OPEN)
|
|
150
181
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -162,6 +193,16 @@ class Tokenizer:
|
|
|
162
193
|
start = self.i
|
|
163
194
|
self.advance()
|
|
164
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
|
|
165
206
|
if ident is not None and self.peek() == '|':
|
|
166
207
|
self.emit(TokenType.PIPE_OPEN)
|
|
167
208
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -179,6 +220,16 @@ class Tokenizer:
|
|
|
179
220
|
start = self.i
|
|
180
221
|
self.advance()
|
|
181
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
|
|
182
233
|
if ident is not None and self.peek() == '%':
|
|
183
234
|
self.emit(TokenType.PERCENT_OPEN)
|
|
184
235
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -196,6 +247,16 @@ class Tokenizer:
|
|
|
196
247
|
start = self.i
|
|
197
248
|
self.advance()
|
|
198
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
|
|
199
260
|
if ident is not None and self.peek() == ':':
|
|
200
261
|
self.emit(TokenType.COLON_OPEN)
|
|
201
262
|
self.emit(TokenType.IDENT, ident)
|
|
@@ -207,19 +268,6 @@ class Tokenizer:
|
|
|
207
268
|
self.advance()
|
|
208
269
|
continue
|
|
209
270
|
|
|
210
|
-
# # --- parens --- (This block was deprecated in mapres 3-dev.27)
|
|
211
|
-
# if ch == '(':
|
|
212
|
-
# flush_text()
|
|
213
|
-
# self.emit(TokenType.LPAREN)
|
|
214
|
-
# self.advance()
|
|
215
|
-
# continue
|
|
216
|
-
|
|
217
|
-
# if ch == ')':
|
|
218
|
-
# flush_text()
|
|
219
|
-
# self.emit(TokenType.RPAREN)
|
|
220
|
-
# self.advance()
|
|
221
|
-
# continue
|
|
222
|
-
|
|
223
271
|
# fallback TEXT
|
|
224
272
|
buf.append(ch)
|
|
225
273
|
self.advance()
|
|
@@ -246,4 +294,32 @@ class Tokenizer:
|
|
|
246
294
|
ident = self.text[start:self.i]
|
|
247
295
|
if ident.startswith('_') or ident.endswith('_') or '-' in ident:
|
|
248
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
|
|
249
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
|