From ddaa3ec92a2cab2e280eed0afcacbe3e4d6c0d21 Mon Sep 17 00:00:00 2001 From: David Winegar Date: Wed, 16 Jul 2014 12:28:40 -0700 Subject: [PATCH] Reorder table tokenizer methods for forward declaration Make sure py tokenizer methods only call methods that have been declared earlier. Not necessary but makes it much easier to maintain/write the C tokenizer if methods are in the same order. --- mwparserfromhell/parser/tokenizer.py | 68 ++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/mwparserfromhell/parser/tokenizer.py b/mwparserfromhell/parser/tokenizer.py index 0de2831..db4a8cf 100644 --- a/mwparserfromhell/parser/tokenizer.py +++ b/mwparserfromhell/parser/tokenizer.py @@ -1002,6 +1002,40 @@ class Tokenizer(object): self._fail_route() return self._pop() + def _parse_as_table_style(self, end_token, break_on_table_end=False): + """Parse until ``end_token`` as style attributes for a table.""" + data = _TagOpenData() + data.context = _TagOpenData.CX_ATTR_READY + while True: + this, next = self._read(), self._read(1) + can_exit = (not data.context & (data.CX_NAME) or + data.context & data.CX_NOTE_SPACE) + if this is self.END: + if self._context & contexts.TAG_ATTR: + if data.context & data.CX_QUOTED: + # Unclosed attribute quote: reset, don't die + data.context = data.CX_ATTR_VALUE + self._pop() + self._head = data.reset + continue + self._pop() + self._fail_route() + elif this == end_token and can_exit: + if data.context & (data.CX_ATTR_NAME | data.CX_ATTR_VALUE): + self._push_tag_buffer(data) + if this.isspace(): + data.padding_buffer["first"] += this + return (self._pop(), data.padding_buffer["first"]) + elif break_on_table_end and this == "|" and next == "}": + if data.context & (data.CX_ATTR_NAME | data.CX_ATTR_VALUE): + self._push_tag_buffer(data) + if this.isspace(): + data.padding_buffer["first"] += this + return (self._pop(), data.padding_buffer["first"]) + else: + self._handle_tag_data(data, this) + self._head += 1 + def _handle_table_start(self): """Handle the start of a table.""" self._head += 2 @@ -1095,40 +1129,6 @@ class Tokenizer(object): # offset displacement done by _parse() self._head -= 1 - def _parse_as_table_style(self, end_token, break_on_table_end=False): - """Parse until ``end_token`` as style attributes for a table.""" - data = _TagOpenData() - data.context = _TagOpenData.CX_ATTR_READY - while True: - this, next = self._read(), self._read(1) - can_exit = (not data.context & (data.CX_NAME) or - data.context & data.CX_NOTE_SPACE) - if this is self.END: - if self._context & contexts.TAG_ATTR: - if data.context & data.CX_QUOTED: - # Unclosed attribute quote: reset, don't die - data.context = data.CX_ATTR_VALUE - self._pop() - self._head = data.reset - continue - self._pop() - self._fail_route() - elif this == end_token and can_exit: - if data.context & (data.CX_ATTR_NAME | data.CX_ATTR_VALUE): - self._push_tag_buffer(data) - if this.isspace(): - data.padding_buffer["first"] += this - return (self._pop(), data.padding_buffer["first"]) - elif break_on_table_end and this == "|" and next == "}": - if data.context & (data.CX_ATTR_NAME | data.CX_ATTR_VALUE): - self._push_tag_buffer(data) - if this.isspace(): - data.padding_buffer["first"] += this - return (self._pop(), data.padding_buffer["first"]) - else: - self._handle_tag_data(data, this) - self._head += 1 - def _handle_table_cell_end(self, reset_for_style=False): """Returns the context, stack, and whether to reset the cell for style in a tuple."""