@@ -1,5 +1,6 @@
11{-# LANGUAGE LambdaCase #-}
22{-# LANGUAGE OverloadedStrings #-}
3+{-# LANGUAGE PatternGuards #-}
34{- |
45 Module : Text.Pandoc.Writers.Jira
56 Copyright : © 2010-2020 Albert Krewinkel, John MacFarlane
@@ -25,7 +26,7 @@ import Text.Pandoc.Class.PandocMonad (PandocMonad)
2526import Text.Pandoc.Definition
2627import Text.Pandoc.Options (WriterOptions (writerTemplate, writerWrapText),
2728 WrapOption (..))
28−import Text.Pandoc.Shared (linesToPara)
29+import Text.Pandoc.Shared (linesToPara, stringify)
2930import Text.Pandoc.Templates (renderTemplate)
3031import Text.Pandoc.Writers.Math (texMathToInlines)
3132import Text.Pandoc.Writers.Shared (defField, metaToContext)
@@ -193,8 +194,7 @@ toJiraInlines inlines = do
193194 Emph xs -> styled Jira.Emphasis xs
194195 Image attr _ tgt -> imageToJira attr (fst tgt) (snd tgt)
195196 LineBreak -> pure . singleton $ Jira.Linebreak
196− Link _ xs (tgt, _) -> singleton . flip Jira.Link (Jira.URL tgt)
197− <$> toJiraInlines xs
197+ Link attr xs tgt -> toJiraLink attr tgt xs
198198 Math mtype cs -> mathToJira mtype cs
199199 Note bs -> registerNotes bs
200200 Quoted qt xs -> quotedToJira qt xs
@@ -242,6 +242,28 @@ imageToJira (_, classes, kvs) src title =
242242 else Jira.Parameter "title" title : imgParams
243243 in pure . singleton $ Jira.Image imgParams' (Jira.URL src)
244244
245+-- | Creates a Jira Link element.
246+toJiraLink :: PandocMonad m
247+ => Attr
248+ -> Target
249+ -> [Inline]
250+ -> JiraConverter m [Jira.Inline]
251+toJiraLink (_, classes, _) (url, _) alias = do
252+ let (linkType, url') = toLinkType url
253+ description <- if url `elem` [stringify alias, "mailto:" <> stringify alias]
254+ then pure mempty
255+ else toJiraInlines alias
256+ pure . singleton $ Jira.Link linkType description (Jira.URL url')
257+ where
258+ toLinkType url'
259+ | Just email <- T.stripPrefix "mailto:" url' = (Jira.Email, email)
260+ | "user-account" `elem` classes = (Jira.User, dropTilde url)
261+ | "attachment" `elem` classes = (Jira.Attachment, url)
262+ | otherwise = (Jira.External, url)
263+ dropTilde txt = case T.uncons txt of
264+ Just ('~', username) -> username
265+ _ -> txt
266+
245267mathToJira :: PandocMonad m
246268 => MathType
247269 -> Text