HaTeX 3.22.1.0 → 3.22.2.0
raw patch · 3 files changed
+72/−34 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Text.LaTeX.Base.Render: renderBuilder :: Render a => a -> Builder
Files
- CHANGELOG.md +3/−0
- HaTeX.cabal +1/−1
- Text/LaTeX/Base/Render.hs +68/−33
CHANGELOG.md view
@@ -9,6 +9,9 @@ # Changelog by versions +## From 3.22.1.0 to 3.22.2.0+* New render method: renderBuilder.+ ## From 3.22.0.0 to 3.22.1.0 * Export PlainDOI type synonym. * Comment out QuickCheck parser test. See https://github.com/Daniel-Diaz/HaTeX/issues/144.
HaTeX.cabal view
@@ -1,5 +1,5 @@ Name: HaTeX -Version: 3.22.1.0 +Version: 3.22.2.0 Author: Daniel Díaz Category: LaTeX Build-type: Simple
Text/LaTeX/Base/Render.hs view
@@ -22,15 +22,20 @@ , showFloat ) where -import Data.Text (Text,lines,unlines) import Text.LaTeX.Base.Syntax import Text.LaTeX.Base.Class import Data.String-import Data.Text.Encoding import Data.List (intersperse) import qualified Data.ByteString as B import Data.Word (Word8) import Numeric (showFFloat)+import Data.Text (Text,lines,unlines)+import Data.Text.Encoding+import Data.Text.Lazy (toStrict)+import Data.Text.Lazy.Builder (Builder)+import qualified Data.Text.Lazy.Builder as Builder+import qualified Data.Text.Lazy.Builder.Int as Builder+import qualified Data.Text.Lazy.Builder.RealFloat as Builder -- | Class of values that can be transformed to 'Text'. -- You mainly will use this to obtain the 'Text' output@@ -47,9 +52,14 @@ -- class Show a => Render a where render :: a -> Text+ renderBuilder :: a -> Builder -- render = fromString . show+ renderBuilder = Builder.fromText . render +renderDefault :: Render a => a -> Text+renderDefault = toStrict . Builder.toLazyText . renderBuilder+ -- | This instance escapes LaTeX reserved characters. instance Render Text where render = protectText@@ -58,16 +68,25 @@ renderAppend :: Render a => [a] -> Text renderAppend = mconcat . fmap render +renderAppendBuilder :: Render a => [a] -> Builder+renderAppendBuilder = foldMap renderBuilder+ -- | Render every element of a list and append results, -- separated by the given 'Char'. renderChars :: Render a => Char -> [a] -> Text renderChars c = mconcat . intersperse (fromString [c]) . fmap render +renderCharsBuilder :: Render a => Char -> [a] -> Builder+renderCharsBuilder c = mconcat . intersperse (Builder.singleton c) . fmap renderBuilder+ -- | Render every element of a list and append results, -- separated by commas. renderCommas :: Render a => [a] -> Text renderCommas = renderChars ',' +renderCommasBuilder :: Render a => [a] -> Builder+renderCommasBuilder = renderCharsBuilder ','+ -- | Use this function to render a 'LaTeX' (or another -- one in the 'Render' class) value directly -- in a file.@@ -104,53 +123,56 @@ instance Render LaTeX where - render (TeXRaw t) = t+ renderBuilder (TeXRaw t) = Builder.fromText t - render (TeXComm name []) = "\\" <> fromString name <> "{}"- render (TeXComm name args) =+ renderBuilder (TeXComm name []) = "\\" <> fromString name <> "{}"+ renderBuilder (TeXComm name args) = "\\" <> fromString name- <> renderAppend args- render (TeXCommS name) = "\\" <> fromString name+ <> renderAppendBuilder args+ renderBuilder (TeXCommS name) = "\\" <> fromString name - render (TeXEnv name args c) =+ renderBuilder (TeXEnv name args c) = "\\begin{" <> fromString name <> "}"- <> renderAppend args- <> render c+ <> renderAppendBuilder args+ <> renderBuilder c <> "\\end{" <> fromString name <> "}" - render (TeXMath Dollar l) = "$" <> render l <> "$"- render (TeXMath DoubleDollar l) = "$$" <> render l <> "$$"- render (TeXMath Square l) = "\\[" <> render l <> "\\]"- render (TeXMath Parentheses l) = "\\(" <> render l <> "\\)"+ renderBuilder (TeXMath Dollar l) = "$" <> renderBuilder l <> "$"+ renderBuilder (TeXMath DoubleDollar l) = "$$" <> renderBuilder l <> "$$"+ renderBuilder (TeXMath Square l) = "\\[" <> renderBuilder l <> "\\]"+ renderBuilder (TeXMath Parentheses l) = "\\(" <> renderBuilder l <> "\\)" - render (TeXLineBreak m b) = "\\\\" <> maybe mempty (\x -> "[" <> render x <> "]") m <> ( if b then "*" else mempty )+ renderBuilder (TeXLineBreak m b) = "\\\\" <> maybe mempty (\x -> "[" <> renderBuilder x <> "]") m <> ( if b then "*" else mempty ) - render (TeXBraces l) = "{" <> render l <> "}"+ renderBuilder (TeXBraces l) = "{" <> renderBuilder l <> "}" - render (TeXComment c) =+ renderBuilder (TeXComment c) = let xs = Data.Text.lines c in if null xs then "%\n"- else Data.Text.unlines $ fmap ("%" <>) xs+ else Builder.fromText $ Data.Text.unlines $ fmap ("%" <>) xs - render (TeXSeq l1 l2) = render l1 <> render l2- render TeXEmpty = mempty+ renderBuilder (TeXSeq l1 l2) = renderBuilder l1 <> renderBuilder l2+ renderBuilder TeXEmpty = mempty + render = renderDefault+ instance Render TeXArg where- render (FixArg l) = "{" <> render l <> "}"- render (OptArg l) = "[" <> render l <> "]"- render (MOptArg []) = mempty- render (MOptArg ls) = "[" <> renderCommas ls <> "]"- render (SymArg l) = "<" <> render l <> ">"- render (MSymArg []) = mempty- render (MSymArg ls) = "<" <> renderCommas ls <> ">"- render (ParArg l) = "(" <> render l <> ")"- render (MParArg []) = mempty- render (MParArg ls) = "(" <> renderCommas ls <> ")"+ renderBuilder (FixArg l) = "{" <> renderBuilder l <> "}"+ renderBuilder (OptArg l) = "[" <> renderBuilder l <> "]"+ renderBuilder (MOptArg []) = mempty+ renderBuilder (MOptArg ls) = "[" <> renderCommasBuilder ls <> "]"+ renderBuilder (SymArg l) = "<" <> renderBuilder l <> ">"+ renderBuilder (MSymArg []) = mempty+ renderBuilder (MSymArg ls) = "<" <> renderCommasBuilder ls <> ">"+ renderBuilder (ParArg l) = "(" <> renderBuilder l <> ")"+ renderBuilder (MParArg []) = mempty+ renderBuilder (MParArg ls) = "(" <> renderCommasBuilder ls <> ")"+ render = renderDefault -- Other instances @@ -159,12 +181,24 @@ showFloat x = showFFloat (Just 5) x [] instance Render Int where+ renderBuilder = Builder.decimal+ render = renderDefault+ instance Render Integer where+ renderBuilder = Builder.decimal+ render = renderDefault+ instance Render Float where- render = fromString . showFloat+ renderBuilder = Builder.formatRealFloat Builder.Fixed (Just 5)+ render = renderDefault+ instance Render Double where- render = fromString . showFloat+ renderBuilder = Builder.formatRealFloat Builder.Fixed (Just 5)+ render = renderDefault+ instance Render Word8 where+ renderBuilder = Builder.decimal+ render = renderDefault -- | 'Render' instance for 'Bool'. It satisfies @render True = "true"@ and @render False = "false"@. instance Render Bool where@@ -172,4 +206,5 @@ render _ = "false" instance Render a => Render [a] where- render xs = "[" <> renderCommas xs <> "]"+ renderBuilder xs = "[" <> renderCommasBuilder xs <> "]"+ render = renderDefault