Ejemplo n.º 1
0
 def testMessage(self):
     self.check('1 :: "abc"', Node("MessageName", Number("1"),
                                   String("abc")))
     self.check(
         '1 :: "abc" :: "123"',
         Node("MessageName", Number("1"), String("abc"), String("123")),
     )
Ejemplo n.º 2
0
 def testRow(self):
     self.check('\\( \\)', String(""))
     self.check('\\( a \\)', String("a"))
     self.check('\\( \\@ a \\_ b \\)', 'SqrtBox[SubscriptBox["a", "b"]]')
     self.check('\\( a + b \\)', 'RowBox[List["a", "+", "b"]]')
     self.check('\\(a \\^ b \\+ c\\)', 'SuperscriptBox["a", UnderscriptBox["b", "c"]]')
     self.check('\\(a \\+ b \\^ c\\)', 'SuperscriptBox[UnderscriptBox["a", "b"], "c"]')
Ejemplo n.º 3
0
 def testString(self):
     self.check(r'"abc"', String("abc"))
     self.incomplete_error(r'"abc')
     self.check(r'"abc(*def*)"', String("abc(*def*)"))
     self.check(r'"a\"b\\c"', String(r"a\"b\\c"))
     self.incomplete_error(r'"\"')
     self.invalid_error(r'\""')
Ejemplo n.º 4
0
 def parse_box(self, p):
     result = None
     while True:
         token = self.next()
         tag = token.tag
         method = getattr(self, "b_" + tag, None)
         if method is not None:
             new_result = method(result, token, p)
         elif tag in ("OtherscriptBox", "RightRowBox"):
             break
         elif tag == "END":
             self.incomplete(token.pos)
         elif result is None and tag != "END":
             self.consume()
             new_result = String(token.text)
             if new_result.value == r"\(":
                 new_result = self.p_LeftRowBox(token)
         else:
             new_result = None
         if new_result is None:
             break
         else:
             result = new_result
     if result is None:
         result = String("")
     return result
Ejemplo n.º 5
0
 def b_FractionBox(self, box1, token, p):
     q = misc_ops['FractionBox']
     if q < p:
         return None
     if box1 is None:
         box1 = String('')
     self.consume()
     box2 = self.parse_box(q + 1)
     return Node('FractionBox', box1, box2)
Ejemplo n.º 6
0
 def p_LeftRowBox(self, token):
     self.consume()
     children = []
     self.box_depth += 1
     self.bracket_depth += 1
     token = self.next()
     while token.tag not in ('RightRowBox', 'OtherscriptBox'):
         children.append(self.parse_box(0))
         token = self.next()
     if len(children) == 0:
         result = String('')
     elif len(children) == 1:
         result = children[0]
     else:
         result = Node('RowBox', Node('List', *children))
     self.expect('RightRowBox')
     self.box_depth -= 1
     self.bracket_depth -= 1
     result.parenthesised = True
     return result
Ejemplo n.º 7
0
 def p_LeftRowBox(self, token):
     self.consume()
     children = []
     self.box_depth += 1
     self.bracket_depth += 1
     token = self.next()
     while token.tag not in ('RightRowBox', 'OtherscriptBox'):
         children.append(self.parse_box(0))
         token = self.next()
     if len(children) == 0:
         result = String('')
     elif len(children) == 1:
         result = children[0]
     else:
         result = Node('RowBox', Node('List', *children))
     self.expect('RightRowBox')
     self.box_depth -= 1
     self.bracket_depth -= 1
     result.parenthesised = True
     return result
Ejemplo n.º 8
0
 def p_Slot(self, token):
     self.consume()
     text = token.text
     if len(text) == 1:
         n = Number('1')
     else:
         n = text[1:]
         if n.isdigit():
             n = Number(n)
         else:
             n = String(n)
     return Node('Slot', n)
Ejemplo n.º 9
0
 def p_LeftRowBox(self, token):
     self.consume()
     children = []
     self.box_depth += 1
     self.bracket_depth += 1
     token = self.next()
     while token.tag not in ("RightRowBox", "OtherscriptBox"):
         newnode = self.parse_box(0)
         children.append(newnode)
         token = self.next()
     if len(children) == 0:
         result = String("")
     elif len(children) == 1:
         result = children[0]
     else:
         result = Node("RowBox", Node("List", *children))
     self.expect("RightRowBox")
     self.box_depth -= 1
     self.bracket_depth -= 1
     result.parenthesised = True
     return result
Ejemplo n.º 10
0
 def b_FormBox(self, box1, token, p):
     q = misc_ops['FormBox']
     if q < p:
         return None
     if box1 is None:
         box1 = Symbol('StandardForm')  # RawForm
     elif is_symbol_name(box1.value):
         box1 = Symbol(box1.value, context=None)
     else:
         box1 = Node('Removed', String('$$Failure'))
     self.consume()
     box2 = self.parse_box(q)
     return Node('FormBox', box2, box1)
Ejemplo n.º 11
0
 def b_FormBox(self, box1, token, p):
     q = misc_ops["FormBox"]
     if q < p:
         return None
     if box1 is None:
         box1 = Symbol("StandardForm")  # RawForm
     elif is_symbol_name(box1.value):
         box1 = Symbol(box1.value, context=None)
     else:
         box1 = Node("Removed", String("$$Failure"))
     self.consume()
     box2 = self.parse_box(q)
     return Node("FormBox", box2, box1)
Ejemplo n.º 12
0
 def b_OverscriptBox(self, box1, token, p):
     q = misc_ops['OverscriptBox']
     if q < p:
         return None
     if box1 is None:
         box1 = String('')
     self.consume()
     box2 = self.parse_box(q)
     if self.next().tag == 'OtherscriptBox':
         self.consume()
         box3 = self.parse_box(misc_ops['UnderoverscriptBox'])
         return Node('UnderoverscriptBox', box1, box3, box2)
     else:
         return Node('OverscriptBox', box1, box2)
Ejemplo n.º 13
0
 def b_OverscriptBox(self, box1, token, p):
     q = misc_ops["OverscriptBox"]
     if q < p:
         return None
     if box1 is None:
         box1 = String("")
     self.consume()
     box2 = self.parse_box(q)
     if self.next().tag == "OtherscriptBox":
         self.consume()
         box3 = self.parse_box(misc_ops["UnderoverscriptBox"])
         return Node("UnderoverscriptBox", box1, box3, box2)
     else:
         return Node("OverscriptBox", box1, box2)
Ejemplo n.º 14
0
 def parse_box(self, p):
     result = None
     while True:
         token = self.next()
         tag = token.tag
         method = getattr(self, 'b_' + tag, None)
         if method is not None:
             new_result = method(result, token, p)
         elif tag in ('OtherscriptBox', 'RightRowBox'):
             break
         elif tag == 'END':
             self.incomplete(token.pos)
         elif result is None and tag != 'END':
             self.consume()
             new_result = String(token.text)
         else:
             new_result = None
         if new_result is None:
             break
         else:
             result = new_result
     if result is None:
         result = String('')
     return result
Ejemplo n.º 15
0
 def e_MessageName(self, expr1, token, p):
     leaves = [expr1]
     while self.next().tag == 'MessageName':
         self.consume()
         token = self.next()
         if token.tag == 'Symbol':
             # silently convert Symbol to String
             self.consume()
             leaf = String(token.text)
         elif token.tag == 'String':
             leaf = self.p_String(token)
         else:
             self.tokeniser.sntx_message(token.pos)
             raise InvalidSyntaxError()
         leaves.append(leaf)
     return Node('MessageName', *leaves)
Ejemplo n.º 16
0
 def p_String(self, token):
     result = String(token.text[1:-1])
     self.consume()
     return result
Ejemplo n.º 17
0
 def testMessage(self):
     self.check('1 :: "abc"', Node('MessageName', Number('1'),
                                   String("abc")))
     self.check(
         '1 :: "abc" :: "123"',
         Node('MessageName', Number('1'), String("abc"), String("123")))