aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@gmail.com>2012-02-02 06:19:41 -0500
committerWaylan Limberg <waylan@gmail.com>2012-02-02 06:19:41 -0500
commit9834966294597181545d2f987f223b6ca1aeb070 (patch)
tree29c4f3a32e0672438cde07b534df49b003a9cc61
parent3b6c63fbd35509e1499e9502a78c82bfa2b17957 (diff)
downloadmarkdown-9834966294597181545d2f987f223b6ca1aeb070.tar.gz
markdown-9834966294597181545d2f987f223b6ca1aeb070.tar.bz2
markdown-9834966294597181545d2f987f223b6ca1aeb070.zip
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.
-rw-r--r--markdown/preprocessors.py27
-rw-r--r--tests/basic/links-reference.html3
-rw-r--r--tests/basic/links-reference.txt5
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</a> with one space.</p>
breaks[] with two spaces.</p>
<p><a href="http://example.com" title="No more hanging empty bracket!">short ref</a></p>
<p><a href="http://example.com" title="No more hanging empty bracket!">short
-ref</a></p> \ No newline at end of file
+ref</a></p>
+<p><a href="http://example.com" title="Title on next line.">a ref</a></p> \ 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."