diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2023-01-11 08:35:29 -0800 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2023-01-11 08:35:55 -0800 |
| commit | 0c453d275ddd12a67a087333d4847d6f48d85c98 (patch) | |
| tree | f3beaa5bed3e4fa517a48999273cef746fd77fda /src | |
| parent | 5ddb61f213aa4cde36e43740376769ddad02ff0a (diff) | |
Textile reader: support linked images.
Closes #8541.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Readers/Textile.hs | 20 |
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 |
