@@ -94,6 +94,7 @@ import System.FilePath (combine)
9494import qualified Data.Map as M
9595import Control.Monad.Reader
9696import Control.Monad.State
97+import Control.Applicative (liftA2)
9798
9899readDocx :: ReaderOptions
99100 -> B.ByteString
@@ -153,7 +154,6 @@ runStyleToContainers rPr =
153154 in
154155 classContainers ++ formatters
155156
156−
157157divAttrToContainers :: [String] -> [(String, String)] -> [Container Block]
158158divAttrToContainers (c:cs) _ | Just n <- isHeaderClass c =
159159 [Container $ \_ ->
@@ -171,22 +171,37 @@ divAttrToContainers (c:cs) kvs | c `elem` listParagraphDivs =
171171divAttrToContainers (c:cs) kvs | c `elem` blockQuoteDivs =
172172 (Container BlockQuote) : (divAttrToContainers (cs \\ blockQuoteDivs) kvs)
173173divAttrToContainers (_:cs) kvs = divAttrToContainers cs kvs
174−divAttrToContainers [] kvs | Just numString <- lookup "indent" kvs =
175− let kvs' = filter (\(k,_) -> k /= "indent") kvs
174+divAttrToContainers [] kvs | Just _ <- lookup "indent" kvs
175+ , Just flInd <- lookup "first-line-indent" kvs =
176+ let
177+ kvs' = filter (\(k,_) -> notElem k ["indent", "first-line-indent"]) kvs
176178 in
177− case numString of
178− "0" -> divAttrToContainers [] kvs'
179− ('-' : _) -> divAttrToContainers [] kvs'
180− _ -> (Container BlockQuote) : divAttrToContainers [] kvs'
179+ case flInd of
180+ "0" -> divAttrToContainers [] kvs'
181+ ('-':_) -> divAttrToContainers [] kvs'
182+ _ -> (Container BlockQuote) : divAttrToContainers [] kvs'
183+divAttrToContainers [] kvs | Just ind <- lookup "indent" kvs =
184+ let
185+ kvs' = filter (\(k,_) -> notElem k ["indent"]) kvs
186+ in
187+ case ind of
188+ "0" -> divAttrToContainers [] kvs'
189+ ('-':_) -> divAttrToContainers [] kvs'
190+ _ -> (Container BlockQuote) : divAttrToContainers [] kvs'
191+
181192divAttrToContainers _ _ = []
182193
183194
184195parStyleToContainers :: ParagraphStyle -> [Container Block]
185196parStyleToContainers pPr =
186197 let classes = pStyle pPr
187− kvs = case indent pPr of
188− Just n -> [("indent", show n)]
189− Nothing -> []
198+ indent = indentation pPr >>= leftParIndent
199+ hanging = indentation pPr >>= hangingParIndent
200+ firstLineIndent = liftA2 (-) indent hanging
201+ kvs = mapMaybe id
202+ [ indent >>= (\n -> Just ("indent", show n)),
203+ firstLineIndent >>= (\n -> Just ("first-line-indent", show n))
204+ ]
190205 in
191206 divAttrToContainers classes kvs
192207