| @@ -80,7 +80,7 @@ static PyObject* strip_tag_name(PyObject* token) | |||||
| Py_DECREF(text); | Py_DECREF(text); | ||||
| if (!rstripped) | if (!rstripped) | ||||
| return NULL; | return NULL; | ||||
| lowered = PyObject_CallMethod(rstripped, "rstrip", NULL); | |||||
| lowered = PyObject_CallMethod(rstripped, "lower", NULL); | |||||
| Py_DECREF(rstripped); | Py_DECREF(rstripped); | ||||
| return lowered; | return lowered; | ||||
| } | } | ||||
| @@ -998,24 +998,14 @@ Tokenizer_handle_free_link_text(Tokenizer* self, int* parens, | |||||
| return error; \ | return error; \ | ||||
| } | } | ||||
| // punct = tuple(",;\.:!?)") | |||||
| // if "(" in this and ")" in punct: | |||||
| // punct = punct[:-1] # ')' is not longer valid punctuation | |||||
| // if this.endswith(punct): | |||||
| // for i in reversed(range(-len(this), 0)): | |||||
| // if i == -len(this) or this[i - 1] not in punct: | |||||
| // break | |||||
| // stripped = this[:i] | |||||
| // if stripped and tail: | |||||
| // self._emit_text(tail) | |||||
| // tail = "" | |||||
| // tail += this[i:] | |||||
| // this = stripped | |||||
| // elif tail: | |||||
| // self._emit_text(tail) | |||||
| // tail = "" | |||||
| // self._emit_text(this) | |||||
| // return punct, tail | |||||
| if (this == *"(" && !(*parens)) | |||||
| *parens = 1; | |||||
| else if (this == *"," || this == *";" || this == *"\\" || this == *"." || | |||||
| this == *":" || this == *"!" || this == *"?" || | |||||
| (!(*parens) && this == *")")) | |||||
| return Textbuffer_write(tail, this); | |||||
| else | |||||
| PUSH_TAIL_BUFFER(*tail, -1) | |||||
| return Tokenizer_emit_char(self, this); | return Tokenizer_emit_char(self, this); | ||||
| } | } | ||||
| @@ -1102,14 +1092,31 @@ Tokenizer_really_parse_external_link(Tokenizer* self, int brackets, | |||||
| static int | static int | ||||
| Tokenizer_remove_uri_scheme_from_textbuffer(Tokenizer* self, PyObject* link) | Tokenizer_remove_uri_scheme_from_textbuffer(Tokenizer* self, PyObject* link) | ||||
| { | { | ||||
| // scheme = link[0].text.split(":", 1)[0] | |||||
| // length = len(scheme) | |||||
| // while length: | |||||
| // if length < len(self._textbuffer[-1]): | |||||
| // self._textbuffer[-1] = self._textbuffer[-1][:-length] | |||||
| // break | |||||
| // length -= len(self._textbuffer[-1]) | |||||
| // self._textbuffer.pop() | |||||
| PyObject *text = PyObject_GetAttrString(PyList_GET_ITEM(link, 0), "text"), | |||||
| *split, *scheme; | |||||
| Py_ssize_t length; | |||||
| Textbuffer* temp; | |||||
| if (!text) | |||||
| return -1; | |||||
| split = PyObject_CallMethod(text, "split", "si", ":", 1); | |||||
| Py_DECREF(text); | |||||
| if (!split) | |||||
| return -1; | |||||
| scheme = PyList_GET_ITEM(split, 0); | |||||
| length = PyUnicode_GET_SIZE(scheme); | |||||
| while (length) { | |||||
| temp = self->topstack->textbuffer; | |||||
| if (length <= temp->size) { | |||||
| temp->size -= length; | |||||
| break; | |||||
| } | |||||
| length -= temp->size; | |||||
| self->topstack->textbuffer = temp->next; | |||||
| free(temp->data); | |||||
| free(temp); | |||||
| } | |||||
| Py_DECREF(split); | |||||
| return 0; | return 0; | ||||
| } | } | ||||