summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2013-03-13 19:18:20 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2013-03-13 19:20:25 -0700
commitdb3d4113a2c3ef8f36329f08afa02828df79ec75 (patch)
tree407d8d7b3288f4430758d62e303edab6e0c25498
parentd820eb2c47bccfd81a51503e997596addb584198 (diff)
Markdown reader: don't lose parentheses in URLs.
Added tests. This fixes a regression from 1.10.x. Closes #786.
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs10
-rw-r--r--tests/markdown-reader-more.native6
-rw-r--r--tests/markdown-reader-more.txt10
3 files changed, 22 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 591fcf155..dcab2cea0 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -287,8 +287,7 @@ referenceKey = try $ do
referenceTitle :: MarkdownParser String
referenceTitle = try $ do
skipSpaces >> optional newline >> skipSpaces
- let parenTit = charsInBalanced '(' ')' litChar
- quotedTitle '"' <|> quotedTitle '\'' <|> parenTit
+ quotedTitle '"' <|> quotedTitle '\'' <|> charsInBalanced '(' ')' litChar
-- A link title in quotes
quotedTitle :: Char -> MarkdownParser String
@@ -1494,13 +1493,18 @@ reference :: MarkdownParser (F Inlines, String)
reference = do notFollowedBy' (string "[^") -- footnote reference
withRaw $ trimInlinesF <$> inlinesInBalancedBrackets
+parenthesizedChars :: MarkdownParser [Char]
+parenthesizedChars = do
+ result <- charsInBalanced '(' ')' litChar
+ return $ '(' : result ++ ")"
+
-- source for a link, with optional title
source :: MarkdownParser (String, String)
source = do
char '('
skipSpaces
let urlChunk = try $ notFollowedBy (oneOf "\"')") >>
- (charsInBalanced '(' ')' litChar <|> count 1 litChar)
+ (parenthesizedChars <|> count 1 litChar)
let sourceURL = (unwords . words . concat) <$> many urlChunk
let betweenAngles = try $
char '<' >> manyTill litChar (char '>')
diff --git a/tests/markdown-reader-more.native b/tests/markdown-reader-more.native
index 612358522..021935004 100644
--- a/tests/markdown-reader-more.native
+++ b/tests/markdown-reader-more.native
@@ -130,4 +130,8 @@
,Para [Link [Str "link"] ("/\252rl","\246\246!")]
,Para [Link [Str "http://g\246\246gle.com"] ("http://g\246\246gle.com","")]
,Para [Link [Str "me@ex\228mple.com"] ("mailto:me@ex\228mple.com","")]
-,Para [Link [Str "foobar"] ("/\252rl","\246\246!")]]
+,Para [Link [Str "foobar"] ("/\252rl","\246\246!")]
+,Header 2 ("parentheses-in-urls",[],[]) [Str "Parentheses",Space,Str "in",Space,Str "URLs"]
+,Para [Link [Str "link"] ("/hi(there)","")]
+,Para [Link [Str "link"] ("/hithere)","")]
+,Para [Link [Str "linky"] ("hi_(there_(nested))","")]]
diff --git a/tests/markdown-reader-more.txt b/tests/markdown-reader-more.txt
index cf5e930e1..2e0e66332 100644
--- a/tests/markdown-reader-more.txt
+++ b/tests/markdown-reader-more.txt
@@ -221,3 +221,13 @@ Empty cells
[foobar]
[foobar]: /&uuml;rl "&ouml;&ouml;!"
+
+## Parentheses in URLs
+
+[link](/hi(there))
+
+[link](/hithere\))
+
+[linky]
+
+[linky]: hi_(there_(nested))