@@ -62,7 +62,9 @@ import Control.Monad.Reader
62import qualified Data.Map as M
62import qualified Data.Map as M
63import Text.Pandoc.Compat.Except
63import Text.Pandoc.Compat.Except
64import Text.Pandoc.Readers.Docx.OMath (readOMML)
64import Text.Pandoc.Readers.Docx.OMath (readOMML)
65+import Text.Pandoc.Readers.Docx.Fonts (getUnicode, Font(..))
65import Text.TeXMath (Exp)
66import Text.TeXMath (Exp)
67+import Data.Char (readLitChar)
67data ReaderEnv = ReaderEnv { envNotes :: Notes
69data ReaderEnv = ReaderEnv { envNotes :: Notes
68 , envNumbering :: Numbering
70 , envNumbering :: Numbering
@@ -673,8 +675,25 @@ elemToRunElem ns element
673 return $ TextRun $ strContent element
675 return $ TextRun $ strContent element
674 | isElem ns "w" "br" element = return LnBrk
676 | isElem ns "w" "br" element = return LnBrk
675 | isElem ns "w" "tab" element = return Tab
677 | isElem ns "w" "tab" element = return Tab
678+ | isElem ns "w" "sym" element = return (getSymChar ns element)
676 | otherwise = throwError WrongElem
679 | otherwise = throwError WrongElem
681+-- The char attribute is a hex string
682+getSymChar :: NameSpaces -> Element -> RunElem
683+getSymChar ns element
684+ | Just s <- getCodepoint
685+ , Just font <- getFont =
686+ let [(char, _)] = readLitChar ("\\x" ++ s) in
687+ TextRun . maybe "" (:[]) $ getUnicode font char
689+ getCodepoint = findAttr (elemName ns "w" "char") element
690+ getFont = stringToFont =<< findAttr (elemName ns "w" "font") element
691+getSymChar _ _ = TextRun ""
693+stringToFont :: String -> Maybe Font
694+stringToFont "Symbol" = Just Symbol
695+stringToFont _ = Nothing
678elemToRunElems :: NameSpaces -> Element -> D [RunElem]
697elemToRunElems :: NameSpaces -> Element -> D [RunElem]
679elemToRunElems ns element
698elemToRunElems ns element
680 | isElem ns "w" "r" element
699 | isElem ns "w" "r" element