summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/Docx.hs20
-rw-r--r--tests/Tests/Readers/Docx.hs4
-rw-r--r--tests/docx/char_styles.docxbin0 -> 30134 bytes
-rw-r--r--tests/docx/char_styles.native4
4 files changed, 15 insertions, 13 deletions
diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs
index 823755a51..a1c16a03a 100644
--- a/src/Text/Pandoc/Readers/Docx.hs
+++ b/src/Text/Pandoc/Readers/Docx.hs
@@ -165,7 +165,7 @@ bodyPartsToMeta' (bp : bps)
| (Paragraph pPr parParts) <- bp
, (c : _)<- intersect (pStyle pPr) (M.keys metaStyles)
, (Just metaField) <- M.lookup c metaStyles = do
- inlines <- parPartsToInlines parParts
+ inlines <- concatReduce <$> mapM parPartToInlines parParts
remaining <- bodyPartsToMeta' bps
let
f (MetaInlines ils) (MetaInlines ils') = MetaBlocks [Para ils, Para ils']
@@ -218,11 +218,8 @@ runElemToString (TextRun s) = s
runElemToString (LnBrk) = ['\n']
runElemToString (Tab) = ['\t']
-runElemsToString :: [RunElem] -> String
-runElemsToString = concatMap runElemToString
-
runToString :: Run -> String
-runToString (Run _ runElems) = runElemsToString runElems
+runToString (Run _ runElems) = concatMap runElemToString runElems
runToString _ = ""
parPartToString :: ParPart -> String
@@ -242,14 +239,14 @@ runStyleToTransform rPr
, s `elem` emphStyles =
let rPr' = rPr{rStyle = Nothing, isItalic = Nothing}
in
- case isItalic rPr' of
+ case isItalic rPr of
Just False -> runStyleToTransform rPr'
_ -> emph . (runStyleToTransform rPr')
| Just s <- rStyle rPr
, s `elem` strongStyles =
let rPr' = rPr{rStyle = Nothing, isBold = Nothing}
in
- case isItalic rPr' of
+ case isBold rPr of
Just False -> runStyleToTransform rPr'
_ -> strong . (runStyleToTransform rPr')
| Just True <- isItalic rPr =
@@ -272,7 +269,7 @@ runToInlines :: Run -> DocxContext Inlines
runToInlines (Run rs runElems)
| Just s <- rStyle rs
, s `elem` codeStyles =
- return $ code $ runElemsToString runElems
+ return $ code $ concatMap runElemToString runElems
| otherwise = do
let ils = concatReduce (map runElemToInlines runElems)
return $ (runStyleToTransform rs) ils
@@ -383,9 +380,6 @@ makeHeaderAnchor' (Header n (_, classes, kvs) ils) =
return $ Header n (newIdent, classes, kvs) ils
makeHeaderAnchor' blk = return blk
-parPartsToInlines :: [ParPart] -> DocxContext Inlines
-parPartsToInlines parparts = concatReduce <$> mapM parPartToInlines parparts
-
cellToBlocks :: Cell -> DocxContext Blocks
cellToBlocks (Cell bps) = concatReduce <$> mapM bodyPartToBlocks bps
@@ -447,12 +441,12 @@ bodyPartToBlocks (Paragraph pPr parparts)
| (c : cs) <- filter (isJust . isHeaderClass) $ pStyle pPr
, Just n <- isHeaderClass c = do
ils <- local (\s-> s{docxInHeaderBlock=True}) $
- (parPartsToInlines parparts)
+ (concatReduce <$> mapM parPartToInlines parparts)
makeHeaderAnchor $
headerWith ("", delete ("Heading" ++ show n) cs, []) n ils
| otherwise = do
- ils <- parPartsToInlines parparts >>=
+ ils <- concatReduce <$> mapM parPartToInlines parparts >>=
(return . fromList . trimLineBreaks . normalizeSpaces . toList)
dropIls <- gets docxDropCap
let ils' = dropIls <> ils
diff --git a/tests/Tests/Readers/Docx.hs b/tests/Tests/Readers/Docx.hs
index 0e0f6c2c5..234b1b5b7 100644
--- a/tests/Tests/Readers/Docx.hs
+++ b/tests/Tests/Readers/Docx.hs
@@ -103,6 +103,10 @@ tests = [ testGroup "inlines"
"docx/inline_formatting.docx"
"docx/inline_formatting.native"
, testCompare
+ "font formatting with character styles"
+ "docx/char_styles.docx"
+ "docx/char_styles.native"
+ , testCompare
"hyperlinks"
"docx/links.docx"
"docx/links.native"
diff --git a/tests/docx/char_styles.docx b/tests/docx/char_styles.docx
new file mode 100644
index 000000000..05979b9a7
--- /dev/null
+++ b/tests/docx/char_styles.docx
Binary files differ
diff --git a/tests/docx/char_styles.native b/tests/docx/char_styles.native
new file mode 100644
index 000000000..7dfc208fb
--- /dev/null
+++ b/tests/docx/char_styles.native
@@ -0,0 +1,4 @@
+[Para [Emph [Str "This",Space,Str "is",Space,Str "all",Space,Str "in",Space,Str "an"],Space,Emph [Strong [Str "italic",Space,Str "style"],Str "."]]
+,Para [Emph [Str "This",Space,Str "is",Space,Str "an",Space,Str "italic"],Space,Str "style",Space,Emph [Str "with",Space,Str "some"],Space,Str "words",Space,Emph [Str "unitalicized."]]
+,Para [Strong [Str "This",Space,Str "is",Space,Str "all",Space,Str "in",Space,Str "a",Space,Emph [Str "strong",Space,Str "style"],Str "."]]
+,Para [Strong [Str "This",Space,Str "is",Space,Str "a",Space,Str "strong"],Space,Str "style",Space,Strong [Str "with",Space,Str "some"],Space,Str "words",Space,Strong [Str "ubolded."]]]