diff options
author | Juergen Bocklage-Ryannel <juergen@ryannel.org> | 2018-03-08 20:42:10 +0100 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen@ryannel.org> | 2018-03-08 20:42:10 +0100 |
commit | 8d6244e8ee133f9c8cec9ee01bab0f81dfb619d6 (patch) | |
tree | e1084b3ed32cacd757d4adc0e07cba3d38c97f6e | |
parent | 03bf1d48d8525abf619bc3a0cf85252748f994c7 (diff) | |
download | qtivi-qface-8d6244e8ee133f9c8cec9ee01bab0f81dfb619d6.tar.gz |
clean up of value parsing
-rw-r--r-- | qface/idl/listener.py | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/qface/idl/listener.py b/qface/idl/listener.py index e343a3c..0692322 100644 --- a/qface/idl/listener.py +++ b/qface/idl/listener.py @@ -23,6 +23,10 @@ log = logging.getLogger(__name__) contextMap = {} +def escape_decode(s): + """removes \-escapes from str""" + return codecs.decode(bytes(s, 'utf-8'), 'unicode_escape') + class QFaceListener(TListener): def __init__(self, system, profile=EProfile.FULL): super().__init__() @@ -110,6 +114,10 @@ class DomainListener(QFaceListener): except yaml.YAMLError as exc: click.secho(str(exc), fg='red') + def parse_value(self, ctx, symbol): + if ctx.value: + symbol.value = escape_decode(ctx.value.text[1:-1]) + def enterEveryRule(self, ctx): log.debug('enter ' + ctx.__class__.__name__) @@ -215,18 +223,10 @@ class DomainListener(QFaceListener): self.property.readonly = bool(modifier.is_readonly) self.property.const = bool(modifier.is_const) - # if ctx.value: - # try: - # value = yaml.load(ctx.value.text, Loader=Loader) - # self.property._value = value - # except yaml.YAMLError as exc: - # click.secho(exc, fg='red') - self.parse_annotations(ctx, self.property) self.parse_type(ctx, self.property.type) + self.parse_value(ctx, self.property) contextMap[ctx] = self.property - if ctx.value: - self.property.value = codecs.decode(bytes(ctx.value.text[1:-1], 'utf-8'), 'unicode_escape') def exitPropertySymbol(self, ctx: TParser.PropertySymbolContext): self.property = None @@ -236,8 +236,7 @@ class DomainListener(QFaceListener): name = ctx.name.text self.field = Field(name, self.struct) self.parse_annotations(ctx, self.field) - if ctx.value: - self.field.value = codecs.decode(bytes(ctx.value.text[1:-1], 'utf-8'), 'unicode_escape') + self.parse_value(ctx, self.field) contextMap[ctx] = self.field def exitStructFieldSymbol(self, ctx: TParser.StructFieldSymbolContext): |