diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-04-05 10:04:28 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-04-05 10:04:28 -0700 |
commit | 4f572ddf6941b8fb0ad7a5835216c708998444f0 (patch) | |
tree | a0c0301e199b27fce20a001895c75f0b3be5854d /src | |
parent | ba7898bb3dae98c14ae824eab3129f22a70e6bd3 (diff) | |
download | pandoc-4f572ddf6941b8fb0ad7a5835216c708998444f0.tar.gz |
Vimwiki reader: improve handling of internal links.
1) Don't append `.html`
2) Add `wikilink` title
This mirrors behavior of other wiki readers. Generally the
`.html` extension is not wanted. It may be important for
output to HTML in certain circumstances, but it can always
be added using a filter that matches on links with title
`wikilink`.
Note that if you have a workflow that uses pandoc to convert
vimwiki to readable HTML pages, you may need to add such a
filter to reproduce current behavior.
Here is a filter that does the job:
```lua
function Link(el)
if el.title == 'wikilink' then
el.target = el.target .. ".html"
end
return el
end
```
Save this as `fixlinks.lua` and use with `--lua-filter fixlinks.lua`.
Closes #5414.
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Readers/Vimwiki.hs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Readers/Vimwiki.hs b/src/Text/Pandoc/Readers/Vimwiki.hs index 8b2863435..57fa6fa1a 100644 --- a/src/Text/Pandoc/Readers/Vimwiki.hs +++ b/src/Text/Pandoc/Readers/Vimwiki.hs @@ -74,7 +74,8 @@ import Text.Pandoc.Parsing (ParserState, ParserT, blanklines, emailAddress, many1Till, orderedListMarker, readWithM, registerHeader, spaceChar, stateMeta, stateOptions, uri) -import Text.Pandoc.Shared (crFilter, splitBy, stringify, stripFirstAndLast) +import Text.Pandoc.Shared (crFilter, splitBy, stringify, stripFirstAndLast, + isURI) import Text.Parsec.Char (alphaNum, anyChar, char, newline, noneOf, oneOf, space, spaces, string) import Text.Parsec.Combinator (between, choice, count, eof, lookAhead, many1, @@ -544,11 +545,17 @@ link = try $ do False -> do manyTill anyChar (string "]]") -- not using try here because [[hell]o]] is not rendered as a link in vimwiki - return $ B.link (procLink contents) "" (B.str contents) + let tit = if isURI contents + then "" + else "wikilink" + return $ B.link (procLink contents) tit (B.str contents) True -> do url <- manyTill anyChar $ char '|' lab <- mconcat <$> manyTill inline (string "]]") - return $ B.link (procLink url) "" lab + let tit = if isURI url + then "" + else "wikilink" + return $ B.link (procLink url) tit lab image :: PandocMonad m => VwParser m Inlines image = try $ do @@ -580,13 +587,13 @@ images k procLink' :: String -> String procLink' s | take 6 s == "local:" = "file" ++ drop 5 s - | take 6 s == "diary:" = "diary/" ++ drop 6 s ++ ".html" + | take 6 s == "diary:" = "diary/" ++ drop 6 s | or ((`isPrefixOf` s) <$> [ "http:", "https:", "ftp:", "file:", "mailto:", "news:", "telnet:" ]) = s | s == "" = "" | last s == '/' = s - | otherwise = s ++ ".html" + | otherwise = s procLink :: String -> String procLink s = procLink' x ++ y |