git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #1540 from jkr/charStyles

Char styles

commit7672997d18084bf2b12005eb73fd2453245637e4 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 16 Aug 2014, 15:39 (12 years ago) parentb5782459bb0b99
4 files changed+15−13
src/Text/Pandoc/Readers/Docx.hs+7−13 tests/Tests/Readers/Docx.hs+4 tests/docx/char_styles.docx tests/docx/char_styles.native+4
src/Text/Pandoc/Readers/Docx.hs+7−13
@@ -165,7 +165,7 @@ bodyPartsToMeta' (bp : bps)
165165 | (Paragraph pPr parParts) <- bp
166166 , (c : _)<- intersect (pStyle pPr) (M.keys metaStyles)
167167 , (Just metaField) <- M.lookup c metaStyles = do
168− inlines <- parPartsToInlines parParts
168+ inlines <- concatReduce <$> mapM parPartToInlines parParts
169169 remaining <- bodyPartsToMeta' bps
170170 let
171171 f (MetaInlines ils) (MetaInlines ils') = MetaBlocks [Para ils, Para ils']
@@ -218,11 +218,8 @@ runElemToString (TextRun s) = s
218218runElemToString (LnBrk) = ['\n']
219219runElemToString (Tab) = ['\t']
220220
221−runElemsToString :: [RunElem] -> String
222−runElemsToString = concatMap runElemToString
223−
224221runToString :: Run -> String
225−runToString (Run _ runElems) = runElemsToString runElems
222+runToString (Run _ runElems) = concatMap runElemToString runElems
226223runToString _ = ""
227224
228225parPartToString :: ParPart -> String
@@ -242,14 +239,14 @@ runStyleToTransform rPr
242239 , s `elem` emphStyles =
243240 let rPr' = rPr{rStyle = Nothing, isItalic = Nothing}
244241 in
245− case isItalic rPr' of
242+ case isItalic rPr of
246243 Just False -> runStyleToTransform rPr'
247244 _ -> emph . (runStyleToTransform rPr')
248245 | Just s <- rStyle rPr
249246 , s `elem` strongStyles =
250247 let rPr' = rPr{rStyle = Nothing, isBold = Nothing}
251248 in
252− case isItalic rPr' of
249+ case isBold rPr of
253250 Just False -> runStyleToTransform rPr'
254251 _ -> strong . (runStyleToTransform rPr')
255252 | Just True <- isItalic rPr =
@@ -272,7 +269,7 @@ runToInlines :: Run -> DocxContext Inlines
272269runToInlines (Run rs runElems)
273270 | Just s <- rStyle rs
274271 , s `elem` codeStyles =
275− return $ code $ runElemsToString runElems
272+ return $ code $ concatMap runElemToString runElems
276273 | otherwise = do
277274 let ils = concatReduce (map runElemToInlines runElems)
278275 return $ (runStyleToTransform rs) ils
@@ -383,9 +380,6 @@ makeHeaderAnchor' (Header n (_, classes, kvs) ils) =
383380 return $ Header n (newIdent, classes, kvs) ils
384381makeHeaderAnchor' blk = return blk
385382
386−parPartsToInlines :: [ParPart] -> DocxContext Inlines
387−parPartsToInlines parparts = concatReduce <$> mapM parPartToInlines parparts
388−
389383cellToBlocks :: Cell -> DocxContext Blocks
390384cellToBlocks (Cell bps) = concatReduce <$> mapM bodyPartToBlocks bps
391385
@@ -447,12 +441,12 @@ bodyPartToBlocks (Paragraph pPr parparts)
447441 | (c : cs) <- filter (isJust . isHeaderClass) $ pStyle pPr
448442 , Just n <- isHeaderClass c = do
449443 ils <- local (\s-> s{docxInHeaderBlock=True}) $
450− (parPartsToInlines parparts)
444+ (concatReduce <$> mapM parPartToInlines parparts)
451445
452446 makeHeaderAnchor $
453447 headerWith ("", delete ("Heading" ++ show n) cs, []) n ils
454448 | otherwise = do
455− ils <- parPartsToInlines parparts >>=
449+ ils <- concatReduce <$> mapM parPartToInlines parparts >>=
456450 (return . fromList . trimLineBreaks . normalizeSpaces . toList)
457451 dropIls <- gets docxDropCap
458452 let ils' = dropIls <> ils
tests/Tests/Readers/Docx.hs+4
@@ -102,6 +102,10 @@ tests = [ testGroup "inlines"
102102 "font formatting"
103103 "docx/inline_formatting.docx"
104104 "docx/inline_formatting.native"
105+ , testCompare
106+ "font formatting with character styles"
107+ "docx/char_styles.docx"
108+ "docx/char_styles.native"
105109 , testCompare
106110 "hyperlinks"
107111 "docx/links.docx"
tests/docx/char_styles.docxnew file

Binary file not shown.

tests/docx/char_styles.nativenew file+4
@@ -0,0 +1,4 @@
1+[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 "."]]
2+,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."]]
3+,Para [Strong [Str "This",Space,Str "is",Space,Str "all",Space,Str "in",Space,Str "a",Space,Emph [Str "strong",Space,Str "style"],Str "."]]
4+,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."]]]