aboutsummaryrefslogtreecommitdiff
path: root/mammoth/styles/parser/token_parser.py
diff options
context:
space:
mode:
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