Make the yy_group_element() routine in the skeleton for pilex --element --groups...
authorNick Downing <nick@ndcode.org>
Wed, 6 Dec 2023 04:17:32 +0000 (15:17 +1100)
committerNick Downing <nick@ndcode.org>
Wed, 6 Dec 2023 04:17:32 +0000 (15:17 +1100)
ndcode/pilex/skel/skel_py_element.py

index 4053521..7977edb 100644 (file)
@@ -145,15 +145,15 @@ def yy_group_end():
 def yy_group_end_element():
   yy_element_stack.append([])
 
-def yy_group_element(pos0, pos1, stack, _class, *args, **kwargs):
-  _element = _class(*args, **kwargs)
-  del _element.text[:]
+def yy_group_element(pos0, pos1, stack, factory, *args, **kwargs):
+  text = []
+  children = []
   for pos2, pos3, i in reversed(stack):
-    _element.text.append(yy_group_text[pos0:pos2])
-    _element.children.append(i)
+    text.append(yy_group_text[pos0:pos2])
+    children.append(i)
     pos0 = pos3
-  _element.text.append(yy_group_text[pos0:pos1])
-  return _element
+  text.append(yy_group_text[pos0:pos1])
+  return factory(text = text, children = children, *args, **kwargs)
 
 def BEGIN(start):
   global yystart
@@ -173,7 +173,7 @@ def yy_pop_state():
 
 # GENERATE SECTION2
 
-def yylex(_class = element.Element, *args, **kwargs):
+def yylex(factory = element.Element, *args, **kwargs):
   global \
     yyin, \
     yy_threads0, \
@@ -190,8 +190,8 @@ def yylex(_class = element.Element, *args, **kwargs):
 
   # GENERATE SECTION2INITIAL
 
-  yy_element_space = _class(*args, **kwargs)
-  yy_element_token = _class(*args, **kwargs)
+  yy_element_space = factory(*args, **kwargs)
+  yy_element_token = factory(*args, **kwargs)
   while True:
     while yytext_len:
       block = yy_buffer_stack[-1].next
@@ -336,7 +336,7 @@ def yylex(_class = element.Element, *args, **kwargs):
         0,
         yytext_len,
         yy_element_stack.pop(),
-        _class,
+        factory,
         *args,
         **kwargs
       )