diff --git a/tests/test_getRefs.py b/tests/test_getRefs.py index f6e0ae4..d3cfcd7 100644 --- a/tests/test_getRefs.py +++ b/tests/test_getRefs.py @@ -9,3 +9,13 @@ def test_getRefs(): result = t.urlrefs expect = {'Google': 'http://www.google.com'} assert result == expect + + t2 = Textile() + + result = t2.getRefs("my ftp [ftp]ftp://example.com") + expect = 'my ftp ' + assert result == expect + + result = t2.urlrefs + expect = {'ftp': 'ftp://example.com'} + assert result == expect diff --git a/textile/core.py b/textile/core.py index 3053969..7b66af0 100644 --- a/textile/core.py +++ b/textile/core.py @@ -212,6 +212,15 @@ def __init__(self, restricted=False, lite=False, noimage=False, else: self.url_schemes = self.unrestricted_url_schemes + all_schemes_re_s = '|'.join([ + '(?:{0})'.format(scheme) + for scheme in self.url_schemes + ]) + self.url_ref_regex = re.compile( + r'(?:(?<=^)|(?<=\s))\[(.+)\]\s?((?:{0}:\/\/|\/)\S+)(?=\s|$)'.format(all_schemes_re_s), + re.U + ) + def parse(self, text, rel=None, sanitize=False): """Parse the input text as textile and return html output.""" self.notes = OrderedDict() @@ -612,10 +621,7 @@ def glyphs(self, text): def getRefs(self, text): """Capture and store URL references in self.urlrefs.""" - pattern = re.compile(r'(?:(?<=^)|(?<=\s))\[(.+)\]((?:http(?:s?):\/\/|\/)\S+)(?=\s|$)', - re.U) - text = pattern.sub(self.refs, text) - return text + return self.url_ref_regex.sub(self.refs, text) def refs(self, match): flag, url = match.groups()