Skip to content

Commit 1f7a33c

Browse files
authored
Merge pull request #75 from alts/url-ref-schemas
Support non-http schemas in url refs
2 parents 4ca4380 + 6b787c9 commit 1f7a33c

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

tests/test_getRefs.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,13 @@ def test_getRefs():
99
result = t.urlrefs
1010
expect = {'Google': 'http://www.google.com'}
1111
assert result == expect
12+
13+
t2 = Textile()
14+
15+
result = t2.getRefs("my ftp [ftp]ftp://example.com")
16+
expect = 'my ftp '
17+
assert result == expect
18+
19+
result = t2.urlrefs
20+
expect = {'ftp': 'ftp://example.com'}
21+
assert result == expect

textile/core.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@ def __init__(self, restricted=False, lite=False, noimage=False,
212212
else:
213213
self.url_schemes = self.unrestricted_url_schemes
214214

215+
all_schemes_re_s = '|'.join([
216+
'(?:{0})'.format(scheme)
217+
for scheme in self.url_schemes
218+
])
219+
self.url_ref_regex = re.compile(
220+
r'(?:(?<=^)|(?<=\s))\[(.+)\]\s?((?:{0}:\/\/|\/)\S+)(?=\s|$)'.format(all_schemes_re_s),
221+
re.U
222+
)
223+
215224
def parse(self, text, rel=None, sanitize=False):
216225
"""Parse the input text as textile and return html output."""
217226
self.notes = OrderedDict()
@@ -612,10 +621,7 @@ def glyphs(self, text):
612621

613622
def getRefs(self, text):
614623
"""Capture and store URL references in self.urlrefs."""
615-
pattern = re.compile(r'(?:(?<=^)|(?<=\s))\[(.+)\]((?:http(?:s?):\/\/|\/)\S+)(?=\s|$)',
616-
re.U)
617-
text = pattern.sub(self.refs, text)
618-
return text
624+
return self.url_ref_regex.sub(self.refs, text)
619625

620626
def refs(self, match):
621627
flag, url = match.groups()

0 commit comments

Comments
 (0)