From 1de9198f0c69152fe6f474185ac351e9500a4ce8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 24 Nov 2016 21:38:10 +0000 Subject: Implement document matcher parser --- mammoth/styles/parser/token_parser.py | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 mammoth/styles/parser/token_parser.py (limited to 'mammoth/styles/parser/token_parser.py') diff --git a/mammoth/styles/parser/token_parser.py b/mammoth/styles/parser/token_parser.py new file mode 100644 index 0000000..495d790 --- /dev/null +++ b/mammoth/styles/parser/token_parser.py @@ -0,0 +1,37 @@ +import re + +from .tokeniser import TokenType + + +def try_parse_class_name(tokens): + if tokens.try_skip(TokenType.SYMBOL, "."): + return parse_identifier(tokens) + else: + return None + + +def parse_identifier(tokens): + return decode_escape_sequences(tokens.next_value(TokenType.IDENTIFIER)) + + +def parse_string(tokens): + return decode_escape_sequences(tokens.next_value(TokenType.STRING)[1:-1]) + + +_ESCAPE_SEQUENCE_REGEX = re.compile(r"\\(.)") + + +def decode_escape_sequences(value): + return _ESCAPE_SEQUENCE_REGEX.sub(_decode_escape_sequence, value) + + +def _decode_escape_sequence(match): + code = match.group(1) + if code == "n": + return "\n" + elif code == "r": + return "\r" + elif code == "t": + return "\t" + else: + return code -- cgit v1.2.3