git.iko.soy/typeable/pandoc
on master help sign in
Docx Reader: Fix font style parsing.
d474803Jesse Rosenthal
src/Text/Pandoc/Readers/Docx/Parse.hs+27−12
@@ -652,30 +652,45 @@ elemToParagraphStyle ns element
652 }
652 }
653elemToParagraphStyle _ _ = defaultParagraphStyle
653elemToParagraphStyle _ _ = defaultParagraphStyle
654
654
655+checkOnOff :: NameSpaces -> Element -> QName -> Bool
656+checkOnOff ns rPr tag
657+ | Just t <- findChild tag rPr
658+ , Just val <- findAttr (elemName ns "w" "val") t =
659+ case val of
660+ "true" -> True
661+ "false" -> False
662+ "on" -> True
663+ "off" -> False
664+ "1" -> True
665+ "0" -> False
666+ _ -> False
667+ | Just _ <- findChild tag rPr = True
668+checkOnOff _ _ _ = False
669+
655
670
656elemToRunStyle :: NameSpaces -> Element -> RunStyle
671elemToRunStyle :: NameSpaces -> Element -> RunStyle
657elemToRunStyle ns element
672elemToRunStyle ns element
658 | Just rPr <- findChild (elemName ns "w" "rPr") element =
673 | Just rPr <- findChild (elemName ns "w" "rPr") element =
659 RunStyle
674 RunStyle
660 {
675 {
661− isBold = isJust $ findChild (QName "b" (lookup "w" ns) (Just "w")) rPr
676+ isBold = checkOnOff ns rPr (elemName ns "w" "b")
662− , isItalic = isJust $ findChild (QName "i" (lookup "w" ns) (Just "w")) rPr
677+ , isItalic = checkOnOff ns rPr (elemName ns "w" "i")
663− , isSmallCaps = isJust $ findChild (QName "smallCaps" (lookup "w" ns) (Just "w")) rPr
678+ , isSmallCaps = checkOnOff ns rPr (elemName ns "w" "smallCaps")
664− , isStrike = isJust $ findChild (QName "strike" (lookup "w" ns) (Just "w")) rPr
679+ , isStrike = checkOnOff ns rPr (elemName ns "w" "strike")
665 , isSuperScript =
680 , isSuperScript =
666 (Just "superscript" ==
681 (Just "superscript" ==
667− (findChild (QName "vertAlign" (lookup "w" ns) (Just "w")) rPr >>=
682+ (findChild (elemName ns "w" "vertAlign") rPr >>=
668− findAttr (QName "val" (lookup "w" ns) (Just "w"))))
683+ findAttr (elemName ns "w" "val")))
669 , isSubScript =
684 , isSubScript =
670 (Just "subscript" ==
685 (Just "subscript" ==
671− (findChild (QName "vertAlign" (lookup "w" ns) (Just "w")) rPr >>=
686+ (findChild (elemName ns "w" "vertAlign") rPr >>=
672− findAttr (QName "val" (lookup "w" ns) (Just "w"))))
687+ findAttr (elemName ns "w" "val")))
673 , rUnderline =
688 , rUnderline =
674− findChild (QName "u" (lookup "w" ns) (Just "w")) rPr >>=
689+ findChild (elemName ns "w" "u") rPr >>=
675− findAttr (QName "val" (lookup "w" ns) (Just "w"))
690+ findAttr (elemName ns "w" "val")
676 , rStyle =
691 , rStyle =
677− findChild (QName "rStyle" (lookup "w" ns) (Just "w")) rPr >>=
692+ findChild (elemName ns "w" "rStyle") rPr >>=
678− findAttr (QName "val" (lookup "w" ns) (Just "w"))
693+ findAttr (elemName ns "w" "val")
679 }
694 }
680elemToRunStyle _ _ = defaultRunStyle
695elemToRunStyle _ _ = defaultRunStyle
681
696