texmath 0.6.3 → 0.6.4
raw patch · 3 files changed
+115/−3 lines, 3 filesdep +pandoc-types
Dependencies added: pandoc-types
Files
- Text/TeXMath.hs +9/−1
- Text/TeXMath/Pandoc.hs +103/−0
- texmath.cabal +3/−2
Text/TeXMath.hs view
@@ -19,13 +19,16 @@ {- | Functions for converting LaTeX math formulas to MathML. -} -module Text.TeXMath ( texMathToMathML, texMathToOMML, DisplayType(..) )+module Text.TeXMath ( texMathToMathML, texMathToOMML, texMathToPandoc,+ DisplayType(..) ) where import Text.TeXMath.Parser import Text.TeXMath.MathML import Text.TeXMath.OMML+import Text.TeXMath.Pandoc import Text.TeXMath.Types import Text.XML.Light+import Text.Pandoc.Definition texMathToMathML :: DisplayType -> String -> Either String Element texMathToMathML dt inp = inp `seq`@@ -34,3 +37,8 @@ texMathToOMML :: DisplayType -> String -> Either String Element texMathToOMML dt inp = inp `seq` either Left (Right . toOMML dt) $ parseFormula inp++texMathToPandoc :: DisplayType -> String -> Either String [Inline]+texMathToPandoc dt inp = inp `seq`+ either Left (Right . maybe fallback id . toPandoc dt) $ parseFormula inp+ where fallback = [Str $ "$" ++ inp ++ "$"]
+ Text/TeXMath/Pandoc.hs view
@@ -0,0 +1,103 @@+{-+Copyright (C) 2010-2013 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+-}++{- | Functions for writing a parsed formula as a list of Pandoc+ Inlines.+-}++module Text.TeXMath.Pandoc (toPandoc)+where+import Text.Pandoc.Definition+import Text.TeXMath.Types++-- | Converts a formula to a list of 'Pandoc' inlines.+-- Defaults to raw formula between @$@ characters if entire formula+-- can't be converted.+toPandoc :: DisplayType+ -> [Exp]+ -> Maybe [Inline]+toPandoc _ exps = expsToInlines exps++expsToInlines :: [Exp] -> Maybe [Inline]+expsToInlines xs = do+ res <- mapM expToInlines xs+ return (concat res)++expToInlines :: Exp -> Maybe [Inline]+expToInlines (ENumber s) = Just [Str s]+expToInlines (EIdentifier s) = Just [Emph [Str s]]+expToInlines (EMathOperator s) = Just [Str s]+expToInlines (ESymbol t s) = Just $ addSpace t (Str s)+ where addSpace Op x = [x, thinspace]+ addSpace Bin x = [medspace, x, medspace]+ addSpace Rel x = [widespace, x, widespace]+ addSpace Pun x = [x, thinspace]+ addSpace _ x = [x]+ thinspace = Str "\x2006"+ medspace = Str "\x2005"+ widespace = Str "\x2004"+expToInlines (EStretchy x) = expToInlines x+expToInlines (EDelimited start end xs) = do+ xs' <- mapM expToInlines xs+ return $ [Str start] ++ concat xs' ++ [Str end]+expToInlines (EGrouped xs) = expsToInlines xs+expToInlines (ESpace "0.167em") = Just [Str "\x2009"]+expToInlines (ESpace "0.222em") = Just [Str "\x2005"]+expToInlines (ESpace "0.278em") = Just [Str "\x2004"]+expToInlines (ESpace "0.333em") = Just [Str "\x2004"]+expToInlines (ESpace "1em") = Just [Str "\x2001"]+expToInlines (ESpace "2em") = Just [Str "\x2001\x2001"]+expToInlines (ESpace _) = Just [Str " "]+expToInlines (EBinary _ _ _) = Nothing+expToInlines (ESub x y) = do+ x' <- expToInlines x+ y' <- expToInlines y+ return $ x' ++ [Subscript y']+expToInlines (ESuper x y) = do+ x' <- expToInlines x+ y' <- expToInlines y+ return $ x' ++ [Superscript y']+expToInlines (ESubsup x y z) = do+ x' <- expToInlines x+ y' <- expToInlines y+ z' <- expToInlines z+ return $ x' ++ [Subscript y'] ++ [Superscript z']+expToInlines (EDown x y) = expToInlines (ESub x y)+expToInlines (EUp x y) = expToInlines (ESuper x y)+expToInlines (EDownup x y z) = expToInlines (ESubsup x y z)+expToInlines (EText TextNormal x) = Just [Str x]+expToInlines (EText TextBold x) = Just [Strong [Str x]]+expToInlines (EText TextMonospace x) = Just [Code nullAttr x]+expToInlines (EText TextItalic x) = Just [Emph [Str x]]+expToInlines (EText _ x) = Just [Str x]+expToInlines (EOver (EGrouped [EIdentifier [c]]) (ESymbol Accent [accent])) =+ case accent of+ '\x203E' -> Just [Emph [Str [c,'\x0304']]] -- bar+ '\x00B4' -> Just [Emph [Str [c,'\x0301']]] -- acute+ '\x0060' -> Just [Emph [Str [c,'\x0300']]] -- grave+ '\x02D8' -> Just [Emph [Str [c,'\x0306']]] -- breve+ '\x02C7' -> Just [Emph [Str [c,'\x030C']]] -- check+ '.' -> Just [Emph [Str [c,'\x0307']]] -- dot+ '\x00B0' -> Just [Emph [Str [c,'\x030A']]] -- ring+ '\x20D7' -> Just [Emph [Str [c,'\x20D7']]] -- arrow right+ '\x20D6' -> Just [Emph [Str [c,'\x20D6']]] -- arrow left+ '\x005E' -> Just [Emph [Str [c,'\x0302']]] -- hat+ '\x0302' -> Just [Emph [Str [c,'\x0302']]] -- hat+ '~' -> Just [Emph [Str [c,'\x0303']]] -- tilde+ _ -> Nothing+expToInlines _ = Nothing
texmath.cabal view
@@ -1,5 +1,5 @@ Name: texmath-Version: 0.6.3+Version: 0.6.4 Cabal-Version: >= 1.6 Build-type: Custom Synopsis: Conversion of LaTeX math formulas to MathML or OMML.@@ -78,7 +78,7 @@ default: False Library- Build-depends: xml, parsec >= 3, containers+ Build-depends: xml, parsec >= 3, containers, pandoc-types if impl(ghc >= 6.10) Build-depends: base >= 4 && < 5, syb else@@ -88,6 +88,7 @@ Text.TeXMath.Parser Text.TeXMath.MathML Text.TeXMath.OMML+ Text.TeXMath.Pandoc Text.TeXMath.Macros Text.TeXMath.ToUnicode