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