git.iko.soy/typeable/pandoc
on master help sign in
Reduce code duplication in Muse writer
commit673734b5893297a8c22ed8d2dc220cd7632e6cb2 authorAlexander Krotov <ilabdsf@gmail.com> dateMon 22 Oct 2018, 12:35 (8 years ago) parent4625150
1 file changed+18−34
src/Text/Pandoc/Writers/Muse.hs+18−34
src/Text/Pandoc/Writers/Muse.hs+18−34
@@ -516,6 +516,14 @@ inlineListToMuse' lst = do
516516 , envAfterSpace = afterSpace || not topLevel
517517 }) $ inlineListToMuse lst
518518
519+emphasis :: PandocMonad m => String -> String -> [Inline] -> Muse m Doc
520+emphasis b e lst = do
521+ contents <- local (\env -> env { envInsideAsterisks = inAsterisks }) $ inlineListToMuse lst
522+ modify $ \st -> st { stUseTags = useTags }
523+ return $ text b <> contents <> text e
524+ where inAsterisks = last b == '*' || head e == '*'
525+ useTags = last e /= '>'
526+
519527-- | Convert Pandoc inline element to Muse.
520528inlineToMuse :: PandocMonad m
521529 => Inline
@@ -529,54 +537,30 @@ inlineToMuse (Emph [Strong lst]) = do
529537 useTags <- gets stUseTags
530538 let lst' = normalizeInlineList lst
531539 if useTags
532− then do contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
533− modify $ \st -> st { stUseTags = False }
534− return $ "<em>**" <> contents <> "**</em>"
540+ then emphasis "<em>**" "**</em>" lst'
535541 else if null lst' || startsWithSpace lst' || endsWithSpace lst'
536− then do
537− contents <- local (\env -> env { envInsideAsterisks = False }) $ inlineListToMuse lst'
538− modify $ \st -> st { stUseTags = True }
539− return $ "*<strong>" <> contents <> "</strong>*"
540− else do
541− contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
542− modify $ \st -> st { stUseTags = True }
543− return $ "***" <> contents <> "***"
542+ then emphasis "*<strong>" "</strong>*" lst'
543+ else emphasis "***" "***" lst'
544544inlineToMuse (Emph lst) = do
545545 useTags <- gets stUseTags
546546 let lst' = normalizeInlineList lst
547547 if useTags || null lst' || startsWithSpace lst' || endsWithSpace lst'
548− then do contents <- inlineListToMuse lst'
549− modify $ \st -> st { stUseTags = False }
550− return $ "<em>" <> contents <> "</em>"
551− else do contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
552− modify $ \st -> st { stUseTags = True }
553− return $ "*" <> contents <> "*"
548+ then emphasis "<em>" "</em>" lst'
549+ else emphasis "*" "*" lst'
554550inlineToMuse (Strong [Emph lst]) = do
555551 useTags <- gets stUseTags
556552 let lst' = normalizeInlineList lst
557553 if useTags
558− then do contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
559− modify $ \st -> st { stUseTags = False }
560− return $ "<strong>*" <> contents <> "*</strong>"
554+ then emphasis "<strong>*" "*</strong>" lst'
561555 else if null lst' || startsWithSpace lst' || endsWithSpace lst'
562− then do
563− contents <- local (\env -> env { envInsideAsterisks = False }) $ inlineListToMuse lst'
564− modify $ \st -> st { stUseTags = True }
565− return $ "**<em>" <> contents <> "</em>**"
566− else do
567− contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
568− modify $ \st -> st { stUseTags = True }
569− return $ "***" <> contents <> "***"
556+ then emphasis "**<em>" "</em>**" lst'
557+ else emphasis "***" "***" lst'
570558inlineToMuse (Strong lst) = do
571559 useTags <- gets stUseTags
572560 let lst' = normalizeInlineList lst
573561 if useTags || null lst' || startsWithSpace lst' || endsWithSpace lst'
574− then do contents <- inlineListToMuse lst'
575− modify $ \st -> st { stUseTags = False }
576− return $ "<strong>" <> contents <> "</strong>"
577− else do contents <- local (\env -> env { envInsideAsterisks = True }) $ inlineListToMuse lst'
578− modify $ \st -> st { stUseTags = True }
579− return $ "**" <> contents <> "**"
562+ then emphasis "<strong>" "</strong>" lst'
563+ else emphasis "**" "**" lst'
580564inlineToMuse (Strikeout lst) = do
581565 contents <- inlineListToMuse lst
582566 modify $ \st -> st { stUseTags = False }