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)])
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])
def frac(self, args): return engine.XFrac(args)
def expr(self, args): args = [x for x in text_combine(args) if x is not None] return engine.XConc(args)
def symbol(self, args): return engine.XText([args[0].value])
def paren(self,args): return engine.XParen([self.expr(args)])
def const(self, args): return engine.XText([MATH_CONSTANTS[args[0]]])
def line(self, args): return engine.XConc(args)
def esc_symbol(self, args): return engine.XText([args[0]])
def line_break(self, args): return engine.XText(['<br/>'])
def wss(self, args): if len(args)>0 and args[0].value == '\n': return engine.XText(['<br/>\n']) else: return None