json: support negative ranges in patterns

This commit is contained in:
ochafik 2024-03-10 17:35:32 +00:00
parent d1fda6f450
commit 478f62ef5c

View file

@ -149,8 +149,13 @@ class SchemaConverter:
elif c[0] == re._parser.RANGE: elif c[0] == re._parser.RANGE:
return f'{self._format_range_char(chr(c[1][0]))}-{self._format_range_char(chr(c[1][1]))}' return f'{self._format_range_char(chr(c[1][0]))}-{self._format_range_char(chr(c[1][1]))}'
else: else:
raise ValueError(f'Unrecognized pattern: {c}') raise ValueError(f'Unrecognized pattern: {c} (pattern = {pattern})')
return f'[{"".join(format_range_component(c) for c in pattern[1])}]' components = pattern[1]
prefix = ''
if len(components) > 0 and components[0][0] == re._parser.NEGATE:
prefix = '^'
components = components[1:]
return f'[{prefix}{"".join(format_range_component(c) for c in components)}]'
elif pattern[0] == re._parser.BRANCH: elif pattern[0] == re._parser.BRANCH:
return '(' + ' | '.join((visit(p) for p in pattern[1][1])) + ')' return '(' + ' | '.join((visit(p) for p in pattern[1][1])) + ')'