{-# LANGUAGE FlexibleContexts #-} {- | Module : Text.Pandoc.Writers.Docx.StyleMap Copyright : © 2014-2020 Jesse Rosenthal , 2014-2020 John MacFarlane , 2015-2019 Nikolay Yakimov License : GNU GPL, version 2 or above Maintainer : Jesse Rosenthal Stability : alpha Portability : portable Mappings of element styles (word to pandoc-internal). -} module Text.Pandoc.Writers.Docx.StyleMap ( StyleMaps(..) , ParaStyleName , CharStyleName , getStyleMaps , getStyleIdFromName , hasStyleName , fromStyleId , fromStyleName ) where import Text.Pandoc.Readers.Docx.Parse.Styles import Codec.Archive.Zip import qualified Data.Map as M import qualified Data.Text as T import Data.String import Data.Char (isSpace) data StyleMaps = StyleMaps { smCharStyle :: CharStyleNameMap, smParaStyle :: ParaStyleNameMap } type ParaStyleNameMap = M.Map ParaStyleName ParStyle type CharStyleNameMap = M.Map CharStyleName CharStyle getStyleIdFromName :: (Ord sn, FromStyleName sn, IsString (StyleId sty), HasStyleId sty) => sn -> M.Map sn sty -> StyleId sty getStyleIdFromName s = maybe (fallback s) getStyleId . M.lookup s where fallback = fromString . T.unpack . T.filter (not . isSpace) . fromStyleName hasStyleName :: (Ord sn, HasStyleId sty) => sn -> M.Map sn sty -> Bool hasStyleName styleName = M.member styleName getStyleMaps :: Archive -> StyleMaps getStyleMaps = uncurry StyleMaps . archiveToStyles' getStyleName getStyleName