mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
commit
0c3245ee38
@ -46,6 +46,7 @@ class Node:
|
|||||||
NODE_CONTINUE = 23
|
NODE_CONTINUE = 23
|
||||||
NODE_RETURN = 24
|
NODE_RETURN = 24
|
||||||
NODE_CHARACTER = 25
|
NODE_CHARACTER = 25
|
||||||
|
NODE_STRCAT = 26
|
||||||
|
|
||||||
def __init__(self, line_number, name):
|
def __init__(self, line_number, name):
|
||||||
self.my_line_number = line_number
|
self.my_line_number = line_number
|
||||||
@ -255,6 +256,13 @@ class CharacterNode(Node):
|
|||||||
self.expression = expression
|
self.expression = expression
|
||||||
|
|
||||||
|
|
||||||
|
class StrcatNode(Node):
|
||||||
|
def __init__(self, line_number, expression_list):
|
||||||
|
Node.__init__(self, line_number, 'strcat()')
|
||||||
|
self.node_type = self.NODE_STRCAT
|
||||||
|
self.expression_list = expression_list
|
||||||
|
|
||||||
|
|
||||||
class _Parser:
|
class _Parser:
|
||||||
LEX_OP = 1
|
LEX_OP = 1
|
||||||
LEX_ID = 2
|
LEX_ID = 2
|
||||||
@ -535,9 +543,9 @@ class _Parser:
|
|||||||
lambda ln, args: FieldNode(ln, args[0])),
|
lambda ln, args: FieldNode(ln, args[0])),
|
||||||
'raw_field': (lambda args: len(args) == 1,
|
'raw_field': (lambda args: len(args) == 1,
|
||||||
lambda ln, args: RawFieldNode(ln, *args)),
|
lambda ln, args: RawFieldNode(ln, *args)),
|
||||||
'test': (lambda args: len(args) == 1,
|
'test': (lambda args: len(args) == 3,
|
||||||
lambda ln, args: IfNode(ln, args[0], (args[1],), (args[2],))),
|
lambda ln, args: IfNode(ln, args[0], (args[1],), (args[2],))),
|
||||||
'first_non_empty': (lambda args: len(args) == 1,
|
'first_non_empty': (lambda args: len(args) >= 1,
|
||||||
lambda ln, args: FirstNonEmptyNode(ln, args)),
|
lambda ln, args: FirstNonEmptyNode(ln, args)),
|
||||||
'assign': (lambda args: len(args) == 2 and len(args[0]) == 1 and args[0][0].node_type == Node.NODE_RVALUE,
|
'assign': (lambda args: len(args) == 2 and len(args[0]) == 1 and args[0][0].node_type == Node.NODE_RVALUE,
|
||||||
lambda ln, args: AssignNode(ln, args[0][0].name, args[1])),
|
lambda ln, args: AssignNode(ln, args[0][0].name, args[1])),
|
||||||
@ -547,6 +555,8 @@ class _Parser:
|
|||||||
lambda ln, args: CharacterNode(ln, args[0])),
|
lambda ln, args: CharacterNode(ln, args[0])),
|
||||||
'print': (lambda _: True,
|
'print': (lambda _: True,
|
||||||
lambda ln, args: PrintNode(ln, args)),
|
lambda ln, args: PrintNode(ln, args)),
|
||||||
|
'strcat': (lambda _: True,
|
||||||
|
lambda ln, args: StrcatNode(ln, args))
|
||||||
}
|
}
|
||||||
|
|
||||||
def expr(self):
|
def expr(self):
|
||||||
@ -935,6 +945,12 @@ class _Interpreter:
|
|||||||
self.break_reporter(prog.node_name, '', prog.line_number)
|
self.break_reporter(prog.node_name, '', prog.line_number)
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
def do_node_strcat(self, prog):
|
||||||
|
res = ''.join([self.expr(expr) for expr in prog.expression_list])
|
||||||
|
if self.break_reporter:
|
||||||
|
self.break_reporter(prog.node_name, res, prog.line_number)
|
||||||
|
return res
|
||||||
|
|
||||||
def do_node_for(self, prog):
|
def do_node_for(self, prog):
|
||||||
line_number = prog.line_number
|
line_number = prog.line_number
|
||||||
try:
|
try:
|
||||||
@ -1125,6 +1141,7 @@ class _Interpreter:
|
|||||||
Node.NODE_CONTINUE: do_node_continue,
|
Node.NODE_CONTINUE: do_node_continue,
|
||||||
Node.NODE_RETURN: do_node_return,
|
Node.NODE_RETURN: do_node_return,
|
||||||
Node.NODE_CHARACTER: do_node_character,
|
Node.NODE_CHARACTER: do_node_character,
|
||||||
|
Node.NODE_STRCAT: do_node_strcat,
|
||||||
}
|
}
|
||||||
|
|
||||||
def expr(self, prog):
|
def expr(self, prog):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user