module Recognize.Data.MathParserOutput where
import Data.Monoid ( (<>) )
import Ideas.Text.HTML hiding (table, ul)
import Ideas.Text.HTML.W3CSS hiding (input)
import Ideas.Text.XML hiding (tag)
import Recognize.Data.Math
import Recognize.Data.MathParserOptions
import Recognize.Parsing.MathParser
import Util.Monad
import qualified Text.PrettyPrint.Leijen as PP
data MathParserOutput = MathParserOutput { mathParserOutput :: [Math], hasChainedEquations :: Bool}
deriving Eq
instance Show MathParserOutput where
show = show . PP.pretty
instance PP.Pretty MathParserOutput where
pretty a = PP.vcat $
map (PP.string . show) (mathParserOutput a) ++
[ PP.string $ "Chained equations: " ++ show (hasChainedEquations a) ]
instance ToHTML MathParserOutput where
toHTML m =
toHTML (mathParserOutput m)
<> mWhen (hasChainedEquations m) ((tag . background Orange . string) "chained")
instance ToXML MathParserOutput where
toXML mpo = makeXML "mathparseroutput" $ mconcat
[ element "mathparseroutput" (map builderXML (mathParserOutput mpo))
, element "hasChainedEquations" [string (show (hasChainedEquations mpo))]
]
mathParser :: MathParserOptions -> [String] -> MathParserOutput
mathParser opts ss = MathParserOutput
{ mathParserOutput = fs
, hasChainedEquations = or chainedEqs
}
where
(chainedEqs,eqs) = unzip (map (parseMath opts) ss)
fs = concat eqs