summaryrefslogtreecommitdiff
path: root/qface/idl/listener.py
diff options
context:
space:
mode:
Diffstat (limited to 'qface/idl/listener.py')
-rw-r--r--qface/idl/listener.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/qface/idl/listener.py b/qface/idl/listener.py
index 5fafa4f..2d8bfb6 100644
--- a/qface/idl/listener.py
+++ b/qface/idl/listener.py
@@ -8,6 +8,8 @@ from antlr4 import ParserRuleContext
import yaml
import click
from .profile import get_features, EProfile, EFeature
+import codecs
+import json
try:
from yaml import CSafeLoader as Loader, CDumper as Dumper
@@ -21,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__()
@@ -108,6 +114,11 @@ class DomainListener(QFaceListener):
except yaml.YAMLError as exc:
click.secho(str(exc), fg='red')
+ def parse_value(self, ctx, symbol):
+ self.check_support(EFeature.DEFAULT_VALUES)
+ if ctx.value:
+ symbol.value = escape_decode(ctx.value.text[1:-1])
+
def enterEveryRule(self, ctx):
log.debug('enter ' + ctx.__class__.__name__)
@@ -213,15 +224,9 @@ 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
def exitPropertySymbol(self, ctx: TParser.PropertySymbolContext):
@@ -232,6 +237,7 @@ class DomainListener(QFaceListener):
name = ctx.name.text
self.field = Field(name, self.struct)
self.parse_annotations(ctx, self.field)
+ self.parse_value(ctx, self.field)
contextMap[ctx] = self.field
def exitStructFieldSymbol(self, ctx: TParser.StructFieldSymbolContext):