|
|
@@ -654,10 +654,7 @@ Tokenizer_verify_safe(Tokenizer* self, const char* unsafes[]) |
|
|
|
case 0: |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
Py_DECREF(stripped); |
|
|
|
Py_DECREF(unsafe); |
|
|
|
Tokenizer_fail_route(self); |
|
|
|
break; |
|
|
|
case -1: |
|
|
|
Py_DECREF(stripped); |
|
|
|
Py_DECREF(unsafe); |
|
|
@@ -682,6 +679,7 @@ Tokenizer_handle_template_param(Tokenizer* self) |
|
|
|
const char* unsafes[] = {"\n", "{", "}", "[", "]", NULL}; |
|
|
|
if (Tokenizer_verify_safe(self, unsafes)) |
|
|
|
return -1; |
|
|
|
if (BAD_ROUTE) return -1; |
|
|
|
if (Tokenizer_set_context(self, context ^ LC_TEMPLATE_NAME)) |
|
|
|
return -1; |
|
|
|
} |
|
|
@@ -727,13 +725,12 @@ static int |
|
|
|
Tokenizer_handle_template_param_value(Tokenizer* self) |
|
|
|
{ |
|
|
|
const char* unsafes[] = {"\n", "{{", "}}", NULL}; |
|
|
|
if (Tokenizer_verify_safe(self, unsafes)) |
|
|
|
if (Tokenizer_verify_safe(self, unsafes)) { |
|
|
|
if (BAD_ROUTE) { |
|
|
|
PyObject* stack = Tokenizer_pop(self); |
|
|
|
Py_XDECREF(stack); |
|
|
|
} |
|
|
|
return -1; |
|
|
|
|
|
|
|
if (BAD_ROUTE) { |
|
|
|
PyObject* stack = Tokenizer_pop(self); |
|
|
|
Py_XDECREF(stack); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
PyObject* stack = Tokenizer_pop_keeping_context(self); |
|
|
@@ -1164,7 +1161,7 @@ Tokenizer_handle_heading_end(Tokenizer* self) |
|
|
|
static int |
|
|
|
Tokenizer_really_parse_entity(Tokenizer* self) |
|
|
|
{ |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
@@ -1321,19 +1318,23 @@ Tokenizer_parse(Tokenizer* self, Py_ssize_t context) |
|
|
|
Tokenizer_write_text(self, this); |
|
|
|
} |
|
|
|
else if (this_data == next && next == *"{") { |
|
|
|
Tokenizer_parse_template_or_argument(self); |
|
|
|
if (Tokenizer_parse_template_or_argument(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == *"|" && this_context & LC_TEMPLATE) { |
|
|
|
Tokenizer_handle_template_param(self); |
|
|
|
if (Tokenizer_handle_template_param(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == *"=" && this_context & LC_TEMPLATE_PARAM_KEY) { |
|
|
|
Tokenizer_handle_template_param_value(self); |
|
|
|
if (Tokenizer_handle_template_param_value(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == next && next == *"}" && this_context & LC_TEMPLATE) { |
|
|
|
return Tokenizer_handle_template_end(self); |
|
|
|
} |
|
|
|
else if (this_data == *"|" && this_context & LC_ARGUMENT_NAME) { |
|
|
|
Tokenizer_handle_argument_separator(self); |
|
|
|
if (Tokenizer_handle_argument_separator(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == next && next == *"}" && this_context & LC_ARGUMENT) { |
|
|
|
if (*Tokenizer_READ(self, 2) == *"}") { |
|
|
@@ -1343,14 +1344,16 @@ Tokenizer_parse(Tokenizer* self, Py_ssize_t context) |
|
|
|
} |
|
|
|
else if (this_data == next && next == *"[") { |
|
|
|
if (!(this_context & LC_WIKILINK_TITLE)) { |
|
|
|
Tokenizer_parse_wikilink(self); |
|
|
|
if (Tokenizer_parse_wikilink(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else { |
|
|
|
Tokenizer_write_text(self, this); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (this_data == *"|" && this_context & LC_WIKILINK_TITLE) { |
|
|
|
Tokenizer_handle_wikilink_separator(self); |
|
|
|
if (Tokenizer_handle_wikilink_separator(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == next && next == *"]" && this_context & LC_WIKILINK) { |
|
|
|
return Tokenizer_handle_wikilink_end(self); |
|
|
@@ -1358,7 +1361,8 @@ Tokenizer_parse(Tokenizer* self, Py_ssize_t context) |
|
|
|
else if (this_data == *"=" && !(self->global & GL_HEADING)) { |
|
|
|
last = *PyUnicode_AS_UNICODE(Tokenizer_read_backwards(self, 1)); |
|
|
|
if (last == *"\n" || last == *"") { |
|
|
|
Tokenizer_parse_heading(self); |
|
|
|
if (Tokenizer_parse_heading(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else { |
|
|
|
Tokenizer_write_text(self, this); |
|
|
@@ -1371,12 +1375,14 @@ Tokenizer_parse(Tokenizer* self, Py_ssize_t context) |
|
|
|
return Tokenizer_fail_route(self); |
|
|
|
} |
|
|
|
else if (this_data == *"&") { |
|
|
|
Tokenizer_parse_entity(self); |
|
|
|
if (Tokenizer_parse_entity(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else if (this_data == *"<" && next == *"!") { |
|
|
|
next_next = *Tokenizer_READ(self, 2); |
|
|
|
if (next_next == *Tokenizer_READ(self, 3) && next_next == *"-") { |
|
|
|
Tokenizer_parse_comment(self); |
|
|
|
if (Tokenizer_parse_comment(self)) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
else { |
|
|
|
Tokenizer_write_text(self, this); |
|
|
|