From 406325d3cad205eb010f8936d50337fcb61193d1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 29 Nov 2016 21:51:15 +0000 Subject: Add parsing for style name prefixes --- mammoth/styles/parser/document_matcher_parser.py | 14 +++++++++++--- 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 @@ -38,6 +38,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( -- cgit v1.2.3