packages feed

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 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