From 653071379b7cd5d3c99931b4c43a7a45e112dca1 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Wed, 10 Jul 2013 18:48:12 -0400 Subject: [PATCH] Finish porting misc changes; add prototypes for remaining functions. --- mwparserfromhell/parser/tokenizer.c | 231 +++++++++++++++++++++++++++++++----- mwparserfromhell/parser/tokenizer.h | 18 ++- 2 files changed, 217 insertions(+), 32 deletions(-) diff --git a/mwparserfromhell/parser/tokenizer.c b/mwparserfromhell/parser/tokenizer.c index cab52b6..acb75e1 100644 --- a/mwparserfromhell/parser/tokenizer.c +++ b/mwparserfromhell/parser/tokenizer.c @@ -487,6 +487,8 @@ Tokenizer_parse_template_or_argument(Tokenizer* self) return -1; } Py_DECREF(tokenlist); + if (self->topstack->context & LC_FAIL_NEXT) + self->topstack->context ^= LC_FAIL_NEXT; return 0; } @@ -499,7 +501,7 @@ Tokenizer_parse_template(Tokenizer* self) PyObject *template, *token; Py_ssize_t reset = self->head; - template = Tokenizer_parse(self, LC_TEMPLATE_NAME); + template = Tokenizer_parse(self, LC_TEMPLATE_NAME, 1); if (BAD_ROUTE) { self->head = reset; return 0; @@ -542,7 +544,7 @@ Tokenizer_parse_argument(Tokenizer* self) PyObject *argument, *token; Py_ssize_t reset = self->head; - argument = Tokenizer_parse(self, LC_ARGUMENT_NAME); + argument = Tokenizer_parse(self, LC_ARGUMENT_NAME, 1); if (BAD_ROUTE) { self->head = reset; return 0; @@ -709,7 +711,7 @@ Tokenizer_parse_wikilink(Tokenizer* self) self->head += 2; reset = self->head - 1; - wikilink = Tokenizer_parse(self, LC_WIKILINK_TITLE); + wikilink = Tokenizer_parse(self, LC_WIKILINK_TITLE, 1); if (BAD_ROUTE) { RESET_ROUTE(); self->head = reset; @@ -745,6 +747,8 @@ Tokenizer_parse_wikilink(Tokenizer* self) return -1; } Py_DECREF(token); + if (self->topstack->context & LC_FAIL_NEXT) + self->topstack->context ^= LC_FAIL_NEXT; return 0; } @@ -797,7 +801,7 @@ Tokenizer_parse_heading(Tokenizer* self) self->head++; } context = LC_HEADING_LEVEL_1 << (best > 5 ? 5 : best - 1); - heading = (HeadingData*) Tokenizer_parse(self, context); + heading = (HeadingData*) Tokenizer_parse(self, context, 1); if (BAD_ROUTE) { RESET_ROUTE(); self->head = reset + best - 1; @@ -886,7 +890,7 @@ Tokenizer_handle_heading_end(Tokenizer* self) current = heading_level_from_context(self->topstack->context); level = current > best ? (best > 6 ? 6 : best) : (current > 6 ? 6 : current); - after = (HeadingData*) Tokenizer_parse(self, self->topstack->context); + after = (HeadingData*) Tokenizer_parse(self, self->topstack->context, 1); if (BAD_ROUTE) { RESET_ROUTE(); if (level < best) { @@ -1144,7 +1148,7 @@ Tokenizer_parse_comment(Tokenizer* self) int i; self->head += 4; - comment = Tokenizer_parse(self, LC_COMMENT); + comment = Tokenizer_parse(self, LC_COMMENT, 1); if (BAD_ROUTE) { const char* text = "