summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2023-01-11 08:35:29 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2023-01-11 08:35:55 -0800
commit0c453d275ddd12a67a087333d4847d6f48d85c98 (patch)
treef3beaa5bed3e4fa517a48999273cef746fd77fda /src
parent5ddb61f213aa4cde36e43740376769ddad02ff0a (diff)
Textile reader: support linked images.
Closes #8541.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Textile.hs20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs
index 378705070..986408852 100644
--- a/src/Text/Pandoc/Readers/Textile.hs
+++ b/src/Text/Pandoc/Readers/Textile.hs
@@ -607,17 +607,21 @@ link = try $ do
attr <- attributes
name <- trimInlines . mconcat <$>
withQuoteContext InDoubleQuote (many1Till inline (char '"'))
+ url <- linkUrl bracketed
+ let name' = if B.toList name == [Str "$"] then B.str url else name
+ return $ if attr == nullAttr
+ then B.link url "" name'
+ else B.spanWith attr $ B.link url "" name'
+
+linkUrl :: PandocMonad m => Bool -> TextileParser m Text
+linkUrl bracketed = do
char ':'
let stop = if bracketed
then char ']'
else lookAhead $ space <|> eof' <|>
try (oneOf "!.,;:*" *>
(space <|> newline <|> eof'))
- url <- T.pack <$> many1Till nonspaceChar stop
- let name' = if B.toList name == [Str "$"] then B.str url else name
- return $ if attr == nullAttr
- then B.link url "" name'
- else B.spanWith attr $ B.link url "" name'
+ T.pack <$> many1Till nonspaceChar stop
-- | image embedding
image :: PandocMonad m => TextileParser m Inlines
@@ -630,7 +634,11 @@ image = try $ do
src <- T.pack <$> many1 (noneOf " \t\n\r!(")
alt <- fmap T.pack $ option "" $ try $ char '(' *> manyTill anyChar (char ')')
char '!'
- return $ B.imageWith attr src alt (B.str alt)
+ let img = B.imageWith attr src alt (B.str alt)
+ try (do -- image link
+ url <- linkUrl False
+ return (B.link url "" img))
+ <|> return img
escapedInline :: PandocMonad m => TextileParser m Inlines
escapedInline = escapedEqs <|> escapedTag