diff options
author | John MacFarlane <jgm@berkeley.edu> | 2012-07-13 14:01:56 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2012-07-13 14:01:56 -0700 |
commit | f68b05e74b7cc0dd0e217cc2650169a3fe7a41a0 (patch) | |
tree | 31bd85fce44ffdca4ec937debfdac4ca88f030aa | |
parent | 2192f02e19942c45828b7a506ca3a2b8b8b74f9d (diff) |
Textile reader: properly handle links with surrounding brackets.
Square brackets need to be used when the link isn't surrounded by
spaces or punctuation, or when the URL ending may be ambiguous.
Closes #564.
-rw-r--r-- | src/Text/Pandoc/Readers/Textile.hs | 19 | ||||
-rw-r--r-- | tests/textile-reader.native | 1 | ||||
-rw-r--r-- | tests/textile-reader.textile | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs index 348900d38..9f6289289 100644 --- a/src/Text/Pandoc/Readers/Textile.hs +++ b/src/Text/Pandoc/Readers/Textile.hs @@ -466,12 +466,25 @@ rawLaTeXInline' = try $ do failIfStrict rawLaTeXInline --- | Textile standard link syntax is "label":target +-- | Textile standard link syntax is "label":target. But we +-- can also have ["label":target]. link :: GenParser Char ParserState Inline -link = try $ do +link = linkB <|> linkNoB + +linkNoB :: GenParser Char ParserState Inline +linkNoB = try $ do + name <- surrounded (char '"') inline + char ':' + let stopChars = "!.,;:" + url <- manyTill nonspaceChar (lookAhead $ space <|> try (oneOf stopChars >> (space <|> newline))) + return $ Link name (url, "") + +linkB :: GenParser Char ParserState Inline +linkB = try $ do + char '[' name <- surrounded (char '"') inline char ':' - url <- manyTill (anyChar) (lookAhead $ (space <|> try (oneOf ".;,:" >> (space <|> newline)))) + url <- manyTill nonspaceChar (char ']') return $ Link name (url, "") -- | Detect plain links to http or email. diff --git a/tests/textile-reader.native b/tests/textile-reader.native index 39359d13a..f5ca5ae0f 100644 --- a/tests/textile-reader.native +++ b/tests/textile-reader.native @@ -83,6 +83,7 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []}) ,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")] ,Para [Str "Automatic",Space,Str "linking",Space,Str "to",Space,Link [Str "http://www.example.com"] ("http://www.example.com",""),Space,Str "and",Space,Link [Str "foobar@example.com"] ("mailto:foobar@example.com",""),Str "."] ,Para [Link [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon",Str "."] +,Para [Str "A",Space,Str "link",Link [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces",Str "."] ,Header 1 [Str "Tables"] ,Para [Str "Textile",Space,Str "allows",Space,Str "tables",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "headers",Space,Str ":"] ,Header 2 [Str "Without",Space,Str "headers"] diff --git a/tests/textile-reader.textile b/tests/textile-reader.textile index adfec90d3..f52212af3 100644 --- a/tests/textile-reader.textile +++ b/tests/textile-reader.textile @@ -155,6 +155,8 @@ Automatic linking to http://www.example.com and foobar@example.com. "Example":http://www.example.com/: Example of a link followed by a colon. +A link["with brackets":http://www.example.com]and no spaces. + h1. Tables Textile allows tables with and without headers : |