diff options
| -rw-r--r-- | mammoth/styles/parser/document_matcher_parser.py | 14 | ||||
| -rw-r--r-- | tests/styles/parser/document_matcher_parser_tests.py | 8 |
2 files changed, 19 insertions, 3 deletions
diff --git a/mammoth/styles/parser/document_matcher_parser.py b/mammoth/styles/parser/document_matcher_parser.py index 95f3359..0024ac8 100644 --- a/mammoth/styles/parser/document_matcher_parser.py +++ b/mammoth/styles/parser/document_matcher_parser.py @@ -46,14 +46,22 @@ def parse_document_matcher(tokens): def _parse_style_name(tokens): if tokens.try_skip(TokenType.SYMBOL, "["): tokens.skip(TokenType.IDENTIFIER, "style-name") - tokens.skip(TokenType.SYMBOL, "=") - name = parse_string(tokens) + string_matcher = _parse_string_matcher(tokens) tokens.skip(TokenType.SYMBOL, "]") - return document_matchers.equal_to(name) + return string_matcher else: return None +def _parse_string_matcher(tokens): + if tokens.try_skip(TokenType.SYMBOL, "="): + return document_matchers.equal_to(parse_string(tokens)) + elif tokens.try_skip(TokenType.SYMBOL, "^="): + return document_matchers.starts_with(parse_string(tokens)) + else: + # TODO raise + pass + def _parse_numbering(tokens): if tokens.try_skip(TokenType.SYMBOL, ":"): is_ordered = _parse_list_type(tokens) diff --git a/tests/styles/parser/document_matcher_parser_tests.py b/tests/styles/parser/document_matcher_parser_tests.py index bec2368..0cf5f0e 100644 --- a/tests/styles/parser/document_matcher_parser_tests.py +++ b/tests/styles/parser/document_matcher_parser_tests.py @@ -39,6 +39,14 @@ def reads_paragraph_with_exact_style_name(): @istest +def reads_paragraph_with_style_name_prefix(): + assert_equal( + document_matchers.paragraph(style_name=document_matchers.starts_with("Heading")), + read_document_matcher("p[style-name^='Heading']") + ) + + +@istest def reads_paragraph_ordered_list(): assert_equal( document_matchers.paragraph(numbering=documents.numbering_level(1, is_ordered=True)), |
