From 9834966294597181545d2f987f223b6ca1aeb070 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 2 Feb 2012 06:19:41 -0500 Subject: Fixed #78. Added support for two line link refs. Also refactored the reference preprocessor to make this a little easier to implement. Regex does more now. --- markdown/preprocessors.py | 27 ++++++++++++++------------- tests/basic/links-reference.html | 3 ++- tests/basic/links-reference.txt | 5 +++++ 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/markdown/preprocessors.py b/markdown/preprocessors.py index 55dd9ab..e7743fb 100644 --- a/markdown/preprocessors.py +++ b/markdown/preprocessors.py @@ -257,25 +257,26 @@ class HtmlBlockPreprocessor(Preprocessor): class ReferencePreprocessor(Preprocessor): """ Remove reference definitions from text and store for later use. """ - RE = re.compile(r'^(\ ?\ ?\ ?)\[([^\]]*)\]:\s*([^ ]*)(.*)$', re.DOTALL) + TITLE = r'[ ]*(\"(.*)\"|\'(.*)\'|\((.*)\))[ ]*' + RE = re.compile(r'^[ ]{0,3}\[([^\]]*)\]:\s*([^ ]*)[ ]*(%s)?$' % TITLE, re.DOTALL) + TITLE_RE = re.compile(r'^%s$' % TITLE) def run (self, lines): new_text = []; - for line in lines: + while lines: + line = lines.pop(0) m = self.RE.match(line) if m: - id = m.group(2).strip().lower() - link = m.group(3).lstrip('<').rstrip('>') - t = m.group(4).strip() # potential title + id = m.group(1).strip().lower() + link = m.group(2).lstrip('<').rstrip('>') + t = m.group(5) or m.group(6) or m.group(7) if not t: - self.markdown.references[id] = (link, t) - elif (len(t) >= 2 - and (t[0] == t[-1] == "\"" - or t[0] == t[-1] == "\'" - or (t[0] == "(" and t[-1] == ")") ) ): - self.markdown.references[id] = (link, t[1:-1]) - else: - new_text.append(line) + # Check next line for title + tm = self.TITLE_RE.match(lines[0]) + if tm: + lines.pop(0) + t = tm.group(2) or tm.group(3) or tm.group(4) + self.markdown.references[id] = (link, t) else: new_text.append(line) diff --git a/tests/basic/links-reference.html b/tests/basic/links-reference.html index ae40975..63f242d 100644 --- a/tests/basic/links-reference.html +++ b/tests/basic/links-reference.html @@ -18,4 +18,5 @@ breaks with one space.

breaks[] with two spaces.

short ref

short -ref

\ No newline at end of file +ref

+

a ref

\ No newline at end of file diff --git a/tests/basic/links-reference.txt b/tests/basic/links-reference.txt index 48a57fb..3d636e5 100644 --- a/tests/basic/links-reference.txt +++ b/tests/basic/links-reference.txt @@ -54,3 +54,8 @@ breaks[] with two spaces. ref] [short ref]: http://example.com "No more hanging empty bracket!" + +[a ref] + +[a ref]: http://example.com + "Title on next line." -- cgit v1.2.3