|
|
@@ -33,15 +33,15 @@ Tokenizer_new(PyTypeObject* type, PyObject* args, PyObject* kwds) |
|
|
|
static struct Textbuffer* |
|
|
|
Textbuffer_new(void) |
|
|
|
{ |
|
|
|
struct Textbuffer* buffer = malloc(sizeof(struct Textbuffer)); |
|
|
|
struct Textbuffer* buffer = PyObject_Malloc(sizeof(struct Textbuffer)); |
|
|
|
if (!buffer) { |
|
|
|
PyErr_NoMemory(); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
buffer->size = 0; |
|
|
|
buffer->data = malloc(sizeof(Py_UNICODE) * TEXTBUFFER_BLOCKSIZE); |
|
|
|
buffer->data = PyObject_Malloc(sizeof(Py_UNICODE) * TEXTBUFFER_BLOCKSIZE); |
|
|
|
if (!buffer->data) { |
|
|
|
free(buffer); |
|
|
|
PyObject_Free(buffer); |
|
|
|
PyErr_NoMemory(); |
|
|
|
return NULL; |
|
|
|
} |
|
|
@@ -58,7 +58,7 @@ Tokenizer_dealloc(Tokenizer* self) |
|
|
|
Py_DECREF(this->stack); |
|
|
|
Textbuffer_dealloc(this->textbuffer); |
|
|
|
next = this->next; |
|
|
|
free(this); |
|
|
|
PyObject_Free(this); |
|
|
|
this = next; |
|
|
|
} |
|
|
|
self->ob_type->tp_free((PyObject*) self); |
|
|
@@ -69,9 +69,9 @@ Textbuffer_dealloc(struct Textbuffer* this) |
|
|
|
{ |
|
|
|
struct Textbuffer* next; |
|
|
|
while (this) { |
|
|
|
free(this->data); |
|
|
|
PyObject_Free(this->data); |
|
|
|
next = this->next; |
|
|
|
free(this); |
|
|
|
PyObject_Free(this); |
|
|
|
this = next; |
|
|
|
} |
|
|
|
} |
|
|
@@ -98,7 +98,7 @@ Tokenizer_init(Tokenizer* self, PyObject* args, PyObject* kwds) |
|
|
|
static int |
|
|
|
Tokenizer_push(Tokenizer* self, int context) |
|
|
|
{ |
|
|
|
struct Stack* top = malloc(sizeof(struct Stack)); |
|
|
|
struct Stack* top = PyObject_Malloc(sizeof(struct Stack)); |
|
|
|
if (!top) { |
|
|
|
PyErr_NoMemory(); |
|
|
|
return -1; |
|
|
@@ -180,7 +180,7 @@ Tokenizer_delete_top_of_stack(Tokenizer* self) |
|
|
|
Py_DECREF(top->stack); |
|
|
|
Textbuffer_dealloc(top->textbuffer); |
|
|
|
self->topstack = top->next; |
|
|
|
free(top); |
|
|
|
PyObject_Free(top); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
@@ -607,6 +607,7 @@ Tokenizer_verify_safe(Tokenizer* self, const char* unsafes[]) |
|
|
|
Py_DECREF(textlist); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
Py_DECREF(textdata); |
|
|
|
if (PyList_Append(textlist, textdata)) { |
|
|
|
Py_DECREF(textlist); |
|
|
|
Py_DECREF(textdata); |
|
|
@@ -943,7 +944,7 @@ Tokenizer_parse_heading(Tokenizer* self) |
|
|
|
PyObject* level = PyInt_FromSsize_t(heading->level); |
|
|
|
if (!level) { |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
@@ -951,7 +952,7 @@ Tokenizer_parse_heading(Tokenizer* self) |
|
|
|
if (!kwargs) { |
|
|
|
Py_DECREF(level); |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
PyDict_SetItemString(kwargs, "level", level); |
|
|
@@ -961,14 +962,14 @@ Tokenizer_parse_heading(Tokenizer* self) |
|
|
|
Py_DECREF(kwargs); |
|
|
|
if (!token) { |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
if (Tokenizer_write(self, token)) { |
|
|
|
Py_DECREF(token); |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
Py_DECREF(token); |
|
|
@@ -980,18 +981,18 @@ Tokenizer_parse_heading(Tokenizer* self) |
|
|
|
difftext[diff] = *""; |
|
|
|
if (Tokenizer_write_text_then_stack(self, difftext)) { |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (Tokenizer_write_all(self, heading->title)) { |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
Py_DECREF(heading->title); |
|
|
|
free(heading); |
|
|
|
PyObject_Free(heading); |
|
|
|
|
|
|
|
token = PyObject_CallObject(HeadingEnd, NULL); |
|
|
|
if (!token) return -1; |
|
|
@@ -1045,23 +1046,23 @@ Tokenizer_handle_heading_end(Tokenizer* self) |
|
|
|
text[best] = *""; |
|
|
|
if (Tokenizer_write_text_then_stack(self, text)) { |
|
|
|
Py_DECREF(after->title); |
|
|
|
free(after); |
|
|
|
PyObject_Free(after); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
if (Tokenizer_write_all(self, after->title)) { |
|
|
|
Py_DECREF(after->title); |
|
|
|
free(after); |
|
|
|
PyObject_Free(after); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
Py_DECREF(after->title); |
|
|
|
level = after->level; |
|
|
|
free(after); |
|
|
|
PyObject_Free(after); |
|
|
|
} |
|
|
|
|
|
|
|
PyObject* stack = Tokenizer_pop(self); |
|
|
|
if (!stack) return NULL; |
|
|
|
|
|
|
|
HeadingData* heading = malloc(sizeof(HeadingData)); |
|
|
|
HeadingData* heading = PyObject_Malloc(sizeof(HeadingData)); |
|
|
|
if (!heading) { |
|
|
|
PyErr_NoMemory(); |
|
|
|
return NULL; |
|
|
|