コード例 #1
0
 def string(self, args):
     a = []
     for text in args:
         if isinstance(text, proto.XExpr):
             a.append(text.args[0])
         else: # if it's a tree
             a.append(text.value)
             
     return engine.XText([''.join(a)])
コード例 #2
0
def text_combine(z:list):
    collecting_text = False
    txt = ""
    
    for e in z:
        if not isinstance(e, proto.XText):
            if collecting_text:
                if txt != "":
                    yield engine.XText([txt.replace(' ',' ')])
                txt = ""
                collecting_text = False
            yield e
        else:
            collecting_text = True
            txt += e.args[0]
            #print(e, txt)

    if collecting_text:
            yield engine.XText([txt])
コード例 #3
0
 def frac(self, args):
     return engine.XFrac(args)
コード例 #4
0
 def expr(self, args):
     args = [x for x in text_combine(args) if x is not None]
     return engine.XConc(args)
コード例 #5
0
 def symbol(self, args):
     return engine.XText([args[0].value])
コード例 #6
0
 def paren(self,args):
     return engine.XParen([self.expr(args)])
コード例 #7
0
 def const(self, args):
     return engine.XText([MATH_CONSTANTS[args[0]]])
コード例 #8
0
 def line(self, args):
     return engine.XConc(args)
コード例 #9
0
 def esc_symbol(self, args):
     return engine.XText([args[0]])
コード例 #10
0
 def line_break(self, args):
     return engine.XText(['<br/>'])
コード例 #11
0
 def wss(self, args):
     if len(args)>0 and args[0].value == '\n':
         return engine.XText(['<br/>\n'])
     else:
         return None