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 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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapres
3
- Version: 3.dev26
3
+ Version: 3.dev28
4
4
  Summary: A powerfull mapping utility
5
5
  Author: iFamished
6
6
  License: MIT
@@ -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=O28ZTClzC8CkHlnjMHlyGsSLXwMRKIho-JZLF-JDxj0,7795
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.dev26.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
16
- mapres-3.dev26.dist-info/METADATA,sha256=ex2xvqboPUgEePv9D6egGHh46N-q9dxgMrIxN-BudDs,1476
17
- mapres-3.dev26.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
18
- mapres-3.dev26.dist-info/top_level.txt,sha256=5LMVQqJdtyjxfzv7wJBOZ-360m0Yc79w_-Y7s3n6cTw,7
19
- mapres-3.dev26.dist-info/RECORD,,
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,,