|
@@ -1760,7 +1760,34 @@ Tokenizer_handle_invalid_tag_start(Tokenizer* self) |
|
|
static PyObject* |
|
|
static PyObject* |
|
|
Tokenizer_handle_single_only_tag_end(Tokenizer* self) |
|
|
Tokenizer_handle_single_only_tag_end(Tokenizer* self) |
|
|
{ |
|
|
{ |
|
|
return NULL; |
|
|
|
|
|
|
|
|
PyObject *top, *padding, *kwargs, *token; |
|
|
|
|
|
|
|
|
|
|
|
top = PyObject_CallMethod(self->topstack->stack, "pop", NULL); |
|
|
|
|
|
if (!top) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
padding = PyObject_GetAttrString(top, "padding"); |
|
|
|
|
|
Py_DECREF(top); |
|
|
|
|
|
if (!padding) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
kwargs = PyDict_New(); |
|
|
|
|
|
if (!kwargs) { |
|
|
|
|
|
Py_DECREF(padding); |
|
|
|
|
|
return NULL; |
|
|
|
|
|
} |
|
|
|
|
|
PyDict_SetItemString(kwargs, "padding", padding); |
|
|
|
|
|
PyDict_SetItemString(kwargs, "implicit", Py_True); |
|
|
|
|
|
Py_DECREF(padding); |
|
|
|
|
|
token = PyObject_Call(TagCloseSelfclose, NOARGS, kwargs); |
|
|
|
|
|
Py_DECREF(kwargs); |
|
|
|
|
|
if (!token) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
if (Tokenizer_emit(self, token)) { |
|
|
|
|
|
Py_DECREF(token); |
|
|
|
|
|
return NULL; |
|
|
|
|
|
} |
|
|
|
|
|
Py_DECREF(token); |
|
|
|
|
|
self->head--; // Offset displacement done by handle_tag_close_open |
|
|
|
|
|
return Tokenizer_pop(self); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
@@ -1769,7 +1796,42 @@ Tokenizer_handle_single_only_tag_end(Tokenizer* self) |
|
|
static PyObject* |
|
|
static PyObject* |
|
|
Tokenizer_handle_single_tag_end(Tokenizer* self) |
|
|
Tokenizer_handle_single_tag_end(Tokenizer* self) |
|
|
{ |
|
|
{ |
|
|
return NULL; |
|
|
|
|
|
|
|
|
PyObject *token = 0, *padding, *kwargs; |
|
|
|
|
|
Py_ssize_t len, index; |
|
|
|
|
|
int is_instance; |
|
|
|
|
|
|
|
|
|
|
|
len = PyList_GET_SIZE(self->topstack->stack); |
|
|
|
|
|
for (index = 0; index < len; index++) { |
|
|
|
|
|
token = PyList_GET_ITEM(self->topstack->stack, index); |
|
|
|
|
|
is_instance = PyObject_IsInstance(token, TagCloseOpen); |
|
|
|
|
|
if (is_instance == -1) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
else if (is_instance == 1) |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
if (!token) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
padding = PyObject_GetAttrString(token, "padding"); |
|
|
|
|
|
if (!padding) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
kwargs = PyDict_New(); |
|
|
|
|
|
if (!kwargs) { |
|
|
|
|
|
Py_DECREF(padding); |
|
|
|
|
|
return NULL; |
|
|
|
|
|
} |
|
|
|
|
|
PyDict_SetItemString(kwargs, "padding", padding); |
|
|
|
|
|
PyDict_SetItemString(kwargs, "implicit", Py_True); |
|
|
|
|
|
Py_DECREF(padding); |
|
|
|
|
|
token = PyObject_Call(TagCloseSelfclose, NOARGS, kwargs); |
|
|
|
|
|
Py_DECREF(kwargs); |
|
|
|
|
|
if (!token) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
if (PyList_SetItem(self->topstack->stack, index, token)) { |
|
|
|
|
|
Py_DECREF(token); |
|
|
|
|
|
return NULL; |
|
|
|
|
|
} |
|
|
|
|
|
Py_DECREF(token); |
|
|
|
|
|
return Tokenizer_pop(self); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
|