diff options
| author | John MacFarlane <[email protected]> | 2021-10-03 09:56:40 -0700 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2021-10-03 09:56:40 -0700 |
| commit | 63a0363ccd8a5bb3f828c3ae441d481fa6e88274 (patch) | |
| tree | 4e5622f4b694161d292f729ce1685e4ce0ab9ec0 | |
| parent | 8b2ed691ec6b4cc984fbf24ca1d9d643c9982863 (diff) | |
Start moving bare uri stuff to str.
| -rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 87efa3cdd..a77199d32 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1521,7 +1521,6 @@ inline = do '&' -> return . B.singleton <$> charRef ':' -> emoji _ -> mzero) - <|> bareURL <|> str <|> symbol) <?> "inline" @@ -1735,27 +1734,37 @@ str = do abbrevs <- getOption readerAbbreviations isSmart <- extensionEnabled Ext_smart <$> getOption readerExtensions let tryAbbrev t = - if t `Set.member` abbrevs + if isSmart && t `Set.member` abbrevs then try (do char ' ' <* notFollowedBy (char ' ') return $ t <> "\160") <|> return t else return t + let tryBareURI t = mzero + + let isNormalChar c = isAlphaNum c || c == ',' || c == '?' || + c == '(' || c == ')' || c == '/' let nonSpaceChunk = do - t <- T.pack <$> many1 (satisfy (\c -> isAlphaNum c || - c == ',' || c == '?' || - c == '(' || c == ')' || - c == '/' ) - <|> try (char '.' <* notFollowedBy (char '.'))) + t <- T.pack <$> many1 + (satisfy isNormalChar + <|> + try (char '.' <* notFollowedBy (char '.'))) updateLastStrPos - if isSmart - then B.str <$> tryAbbrev t - else return $ B.str t + tryBareURI t <|> (B.str <$> tryAbbrev t) let spaceChunk = try $ do _ <- many1 spaceChar notFollowedBy newline return B.space return . mconcat <$> many1 (nonSpaceChunk <|> spaceChunk) +bareURL :: PandocMonad m => MarkdownParser m (F Inlines) +bareURL = do + guardEnabled Ext_autolink_bare_uris + getState >>= guard . stateAllowLinks + try $ do + (cls, (orig, src)) <- (("uri",) <$> uri) <|> (("email",) <$> emailAddress) + notFollowedBy $ try $ spaces >> htmlTag (~== TagClose ("a" :: Text)) + return $ return $ B.linkWith ("",[cls],[]) src "" (B.str orig) + -- an endline character that can be treated as a space, not a structural break endline :: PandocMonad m => MarkdownParser m (F Inlines) endline = try $ do @@ -1914,15 +1923,6 @@ dropBrackets = dropRB . dropLB dropLB (T.uncons -> Just ('[',xs)) = xs dropLB xs = xs -bareURL :: PandocMonad m => MarkdownParser m (F Inlines) -bareURL = do - guardEnabled Ext_autolink_bare_uris - getState >>= guard . stateAllowLinks - try $ do - (cls, (orig, src)) <- (("uri",) <$> uri) <|> (("email",) <$> emailAddress) - notFollowedBy $ try $ spaces >> htmlTag (~== TagClose ("a" :: Text)) - return $ return $ B.linkWith ("",[cls],[]) src "" (B.str orig) - autoLink :: PandocMonad m => MarkdownParser m (F Inlines) autoLink = try $ do getState >>= guard . stateAllowLinks |
