aboutsummaryrefslogtreecommitdiff
path: root/mammoth/styles/parser/token_parser.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-24 21:38:10 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-24 21:38:10 +0000
commit1de9198f0c69152fe6f474185ac351e9500a4ce8 (patch)
treefa3eb932fa35f796548304a7454fb2eb83717d0e /mammoth/styles/parser/token_parser.py
parent056a2173eeb6d0469fde9a24e1db81d67f8722f5 (diff)
Implement document matcher parser
Diffstat (limited to 'mammoth/styles/parser/token_parser.py')
-rw-r--r--mammoth/styles/parser/token_parser.py37
1 files changed, 37 insertions, 0 deletions
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