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