| @@ -149,11 +149,12 @@ class Tokenizer(object): | |||||
| self._write_all(template) | self._write_all(template) | ||||
| self._write(tokens.TemplateClose()) | self._write(tokens.TemplateClose()) | ||||
| def _verify_template_name(self): | |||||
| """Verify that a template's name is valid wikisyntax. | |||||
| def _verify_no_newlines(self): | |||||
| """Verify that there are no newlines in the current stack. | |||||
| The route will be failed if the name contains a newline inside of it | The route will be failed if the name contains a newline inside of it | ||||
| (not merely at the beginning or end). | |||||
| (not merely at the beginning or end). This is used when parsing a | |||||
| template name or parameter key, which cannot contain newlines. | |||||
| """ | """ | ||||
| self._push_textbuffer() | self._push_textbuffer() | ||||
| if self._stack: | if self._stack: | ||||
| @@ -165,7 +166,7 @@ class Tokenizer(object): | |||||
| def _handle_template_param(self): | def _handle_template_param(self): | ||||
| """Handle a template parameter at the head of the string.""" | """Handle a template parameter at the head of the string.""" | ||||
| if self._context & contexts.TEMPLATE_NAME: | if self._context & contexts.TEMPLATE_NAME: | ||||
| self._verify_template_name() | |||||
| self._verify_no_newlines() | |||||
| self._context ^= contexts.TEMPLATE_NAME | self._context ^= contexts.TEMPLATE_NAME | ||||
| if self._context & contexts.TEMPLATE_PARAM_VALUE: | if self._context & contexts.TEMPLATE_PARAM_VALUE: | ||||
| self._context ^= contexts.TEMPLATE_PARAM_VALUE | self._context ^= contexts.TEMPLATE_PARAM_VALUE | ||||
| @@ -174,6 +175,7 @@ class Tokenizer(object): | |||||
| def _handle_template_param_value(self): | def _handle_template_param_value(self): | ||||
| """Handle a template parameter's value at the head of the string.""" | """Handle a template parameter's value at the head of the string.""" | ||||
| self._verify_no_newlines() | |||||
| self._context ^= contexts.TEMPLATE_PARAM_KEY | self._context ^= contexts.TEMPLATE_PARAM_KEY | ||||
| self._context |= contexts.TEMPLATE_PARAM_VALUE | self._context |= contexts.TEMPLATE_PARAM_VALUE | ||||
| self._write(tokens.TemplateParamEquals()) | self._write(tokens.TemplateParamEquals()) | ||||
| @@ -181,7 +183,7 @@ class Tokenizer(object): | |||||
| def _handle_template_end(self): | def _handle_template_end(self): | ||||
| """Handle the end of the template at the head of the string.""" | """Handle the end of the template at the head of the string.""" | ||||
| if self._context & contexts.TEMPLATE_NAME: | if self._context & contexts.TEMPLATE_NAME: | ||||
| self._verify_template_name() | |||||
| self._verify_no_newlines() | |||||
| self._head += 1 | self._head += 1 | ||||
| return self._pop() | return self._pop() | ||||