Docx reader: accept explicit "Italic" and "Bold" rStyles.

Note that "Italic" can be on, and, from the last commit, `<w:i>` can be
present, but be turned off. In that case, the turned-off tag takes
precedence. So, we have to distinguish between something being off and
something not being there. Hence, isItalic, isBold, isStrike, and
isSmallCaps have become Maybes.
This commit is contained in:
Jesse Rosenthal 2014-08-12 22:15:09 -04:00
parent aae71ad595
commit 194ed88852
2 changed files with 31 additions and 18 deletions

View file

@ -202,17 +202,30 @@ runStyleToContainers rPr =
[Container $ (\ils -> Code ("", [], []) (concatMap ilToCode ils))]
spanClassToContainers s | s `elem` spansToKeep =
[Container $ Span ("", [s], [])]
spanClassToContainers _ = []
spanClassToContainers _ = []
classContainers = case rStyle rPr of
Nothing -> []
Just s -> spanClassToContainers s
resolveFmt :: Bool -> Maybe Bool -> Bool
resolveFmt _ (Just True) = True
resolveFmt _ (Just False) = False
resolveFmt bool Nothing = bool
formatters = map Container $ mapMaybe id
[ if isBold rPr then (Just Strong) else Nothing
, if isItalic rPr then (Just Emph) else Nothing
, if isSmallCaps rPr then (Just SmallCaps) else Nothing
, if isStrike rPr then (Just Strikeout) else Nothing
[ if resolveFmt (rStyle rPr == Just "Bold") (isBold rPr)
then (Just Strong)
else Nothing
, if resolveFmt (rStyle rPr == Just "Italic") (isItalic rPr)
then (Just Emph)
else Nothing
, if resolveFmt False (isSmallCaps rPr)
then (Just SmallCaps)
else Nothing
, if resolveFmt False (isStrike rPr)
then (Just Strikeout)
else Nothing
, if isSuperScript rPr then (Just Superscript) else Nothing
, if isSubScript rPr then (Just Subscript) else Nothing
, rUnderline rPr >>=

View file

@ -196,10 +196,10 @@ data Run = Run RunStyle [RunElem]
data RunElem = TextRun String | LnBrk | Tab
deriving Show
data RunStyle = RunStyle { isBold :: Bool
, isItalic :: Bool
, isSmallCaps :: Bool
, isStrike :: Bool
data RunStyle = RunStyle { isBold :: Maybe Bool
, isItalic :: Maybe Bool
, isSmallCaps :: Maybe Bool
, isStrike :: Maybe Bool
, isSuperScript :: Bool
, isSubScript :: Bool
, rUnderline :: Maybe String
@ -207,10 +207,10 @@ data RunStyle = RunStyle { isBold :: Bool
deriving Show
defaultRunStyle :: RunStyle
defaultRunStyle = RunStyle { isBold = False
, isItalic = False
, isSmallCaps = False
, isStrike = False
defaultRunStyle = RunStyle { isBold = Nothing
, isItalic = Nothing
, isSmallCaps = Nothing
, isStrike = Nothing
, isSuperScript = False
, isSubScript = False
, rUnderline = Nothing
@ -652,20 +652,20 @@ elemToParagraphStyle ns element
}
elemToParagraphStyle _ _ = defaultParagraphStyle
checkOnOff :: NameSpaces -> Element -> QName -> Bool
checkOnOff :: NameSpaces -> Element -> QName -> Maybe Bool
checkOnOff ns rPr tag
| Just t <- findChild tag rPr
, Just val <- findAttr (elemName ns "w" "val") t =
case val of
"true" -> True
Just $ case val of
"true" -> True
"false" -> False
"on" -> True
"off" -> False
"1" -> True
"0" -> False
_ -> False
| Just _ <- findChild tag rPr = True
checkOnOff _ _ _ = False
| Just _ <- findChild tag rPr = Just True
checkOnOff _ _ _ = Nothing
elemToRunStyle :: NameSpaces -> Element -> RunStyle