summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Bocklage-Ryannel <juergen@ryannel.org>2018-03-08 20:42:10 +0100
committerJuergen Bocklage-Ryannel <juergen@ryannel.org>2018-03-08 20:42:10 +0100
commit8d6244e8ee133f9c8cec9ee01bab0f81dfb619d6 (patch)
treee1084b3ed32cacd757d4adc0e07cba3d38c97f6e
parent03bf1d48d8525abf619bc3a0cf85252748f994c7 (diff)
downloadqtivi-qface-8d6244e8ee133f9c8cec9ee01bab0f81dfb619d6.tar.gz
clean up of value parsing
-rw-r--r--qface/idl/listener.py21
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):