def entryStatement(node): """ entryStatement = date WS [*|!] WS [(code)] desc LB transaction {transaction} LB """ entryNode = Node(None, ENTRY) node.addNode(entryNode) date(entryNode) eatWhile(WHITESPACE) if found("*") or found("!"): entryNode.add(token) getToken() eatWhile(WHITESPACE) if found("("): code(entryNode) eatWhile(WHITESPACE) description(entryNode) consume(LINEBREAK) transaction(entryNode) while not found(LINEBREAK) and not found(EOF): if found(NOTE): consume(NOTE) consume(LINEBREAK) else: transaction(entryNode)
def account(node): """ account = anything {anything} """ accountNode = Node(None, ACCOUNT) node.addNode(accountNode) while not found(WHITESPACE) and not found(LINEBREAK): accountNode.add(token) getToken()
def description(node): """ description = anything {anything} LB . """ descNode = Node(None, DESCRIPTION) node.addNode(descNode) while not found(LINEBREAK): descNode.add(token) getToken()
def code(node): """ code = ( anything {anything} ) """ codeNode = Node(None, CODE) node.addNode(codeNode) consume("(") while not found(")"): codeNode.add(token) getToken() consume(")")
def value(node): """ value = @ amount | @@ amount """ valueNode = Node(None, VALUE) node.addNode(valueNode) if found("@@"): valueNode.add(token) consume("@@") else: valueNode.add(token) consume("@") eatWhile(WHITESPACE) amount(valueNode)
def date(node): """ date = NUMBER / NUMBER / NUMBER . """ dateNode = Node(None, DATE) node.addNode(dateNode) dateNode.add(token) consume(NUMBER) dateNode.add(token) consume("/") dateNode.add(token) consume(NUMBER) dateNode.add(token) consume("/") dateNode.add(token) consume(NUMBER)
def amount(node): """ amount = NUMBER | commodity [WS] NUMBER | NUMBER commodity """ amountNode = Node(None, AMOUNT) node.addNode(amountNode) if found(NUMBER): amountNode.add(token) consume(NUMBER) eatWhile(WHITESPACE) if not found("@") and not found("@@") and not found(LINEBREAK) and not found(NOTE): commodity(amountNode) else: commodity(amountNode) eatWhile(WHITESPACE) amountNode.add(token) consume(NUMBER)
def commodity(node): """ commodity = anything | "any thing" """ commodityNode = Node(None, COMMODITY) node.addNode(commodityNode) if found('"'): commodityNode.add(token) consume('"') while not found('"'): commodityNode.add(token) getToken() commodityNode.add(token) consume('"') else: commodityNode.add(token) getToken()