def _detectHyperlinks(self, toMarkdown=False): cursor = QTextCursor(self.entry.document()) plainText = self.entry.toPlainText() makeURL = lambda uri : u"http://" + convert_string(uri) if uri.startsWith(u"www.") else uri makeMail = lambda mail : u"mailto:" + convert_string(mail) if toMarkdown: # find markdown links mdLinks = IndexSet() for start, end, _matcher in self._iterMatchedRanges(self._MD_LINK_MATCHER, plainText): mdLinks.addRange(start, end) # replace plain links with markdown links plainLinks = self._findPlainLinks(plainText, self._URI_MATCHER, makeURL, mdLinks) plainLinks += self._findPlainLinks(plainText, self._MAIL_MATCHER, makeMail, mdLinks) plainLinks = sorted(plainLinks, key=lambda aTup : aTup[0]) plainText = convert_string(plainText) for start, end, linkTarget in reversed(plainLinks): mdLink = "[%s](%s)" % (plainText[start:end], linkTarget) plainText = plainText[:start] + mdLink + plainText[end:] return plainText else: self._insertAnchors(cursor, plainText, self._URI_MATCHER, makeURL) self._insertAnchors(cursor, plainText, self._MAIL_MATCHER, makeMail)
from private_messages.index_set import IndexSet from random import randint if __name__ == '__main__': s = IndexSet() s.addRange(3, 4) assert 2 not in s assert 3 in s assert 4 not in s s.addRange(4, 6) assert 4 in s assert 5 in s assert 6 not in s s = IndexSet() s.addRange(3, 6) s.addRange(4, 7) assert 2 not in s assert 3 in s assert 4 in s assert 5 in s assert 6 in s assert 7 not in s s = IndexSet() s.addRange(2, 4) s.addRange(1, 3) assert 0 not in s assert 1 in s assert 2 in s