Skip to content

Commit 5955d3a

Browse files
committed
add missing _string functions for custom formatters
1 parent a8efa7b commit 5955d3a

File tree

1 file changed

+43
-4
lines changed
  • graalpython/lib-graalpython

1 file changed

+43
-4
lines changed

graalpython/lib-graalpython/str.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,32 @@ def _resolve_lookups(self, obj, name, start, end):
247247
raise ValueError("Only '[' and '.' may follow ']'")
248248
return obj
249249

250+
def formatter_field_name_split(self):
251+
name = self.template
252+
i = 0
253+
end = len(name)
254+
while i < end:
255+
c = name[i]
256+
if c == "[" or c == ".":
257+
break
258+
i += 1
259+
if i == 0:
260+
index = -1
261+
else:
262+
try:
263+
index = int(name[0:i])
264+
except ValueError:
265+
index = -1
266+
if index >= 0:
267+
first = int(index)
268+
else:
269+
first = name[:i]
270+
#
271+
self.parser_list = []
272+
self._resolve_lookups(None, name, i, end)
273+
#
274+
return (first, iter(self.parser_list))
275+
250276
def _convert(self, obj, conversion):
251277
conv = conversion[0]
252278
if conv == "r":
@@ -267,7 +293,7 @@ def _render_field(self, start, end, recursive, level):
267293
if level == 1: # ignore recursive calls
268294
startm1 = start - 1
269295
assert startm1 >= self.last_end
270-
self.parser_list_w.append((
296+
self.parser_list.append((
271297
self.template[self.last_end:startm1],
272298
name,
273299
spec,
@@ -292,9 +318,9 @@ def formatter_parser(self):
292318
if self.last_end < len(self.template):
293319
lastentry = (
294320
self.template[self.last_end:],
295-
space.w_None,
296-
space.w_None,
297-
space.w_None
321+
None,
322+
None,
323+
None
298324
)
299325
self.parser_list.append(lastentry)
300326
return iter(self.parser_list)
@@ -351,3 +377,16 @@ def encode(self, encoding="utf-8", errors="strict"):
351377

352378

353379
str.encode = encode
380+
381+
382+
def formatter_parser(string):
383+
return TemplateFormatter(string).formatter_parser()
384+
385+
386+
def formatter_field_name_split(string):
387+
return TemplateFormatter(string).formatter_field_name_split()
388+
389+
390+
import _string
391+
_string.formatter_parser = formatter_parser
392+
_string.formatter_field_name_split = formatter_field_name_split

0 commit comments

Comments
 (0)