aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2010-07-15 19:01:00 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2010-07-15 19:01:00 -0700
commit57a91f3b6add303ef70aa29a14a8c67123ec7c0f (patch)
tree3ec6a5f9dcb5e0c9d88d84d2599a68ee5b82a279
parent8757da76b0e4c26f722ac4742689739b2b5dfb08 (diff)
downloadpandoc-57a91f3b6add303ef70aa29a14a8c67123ec7c0f.tar.gz
Added --webtex option for HTML math.
+ Added --webtex command-line option, with optional parameter. (Defaults to using google charts API.) + Added WebTeX HTMLMathMethod. + Removed MimeTeX HTMLMathMethod. (WebTeX is generic and subsumes it.) + Modified --mimetex option to use WebTeX. + Thanks to lpeterse for the idea and some of the code.
-rw-r--r--README30
-rw-r--r--man/man1/pandoc.1.md5
-rw-r--r--src/Text/Pandoc/Shared.hs2
-rw-r--r--src/Text/Pandoc/Writers/HTML.hs39
-rw-r--r--src/pandoc.hs18
-rw-r--r--tests/writer.html6
6 files changed, 70 insertions, 30 deletions
diff --git a/README b/README
index 33af139a4..6c3a61ca5 100644
--- a/README
+++ b/README
@@ -351,8 +351,8 @@ For further documentation, see the `pandoc(1)` man page.
directly; this provides portability at the price of efficiency. If
you plan to use math on several pages, it is much better to link to
a copy of `LaTeXMathML.js`, which can be cached. (See `--jsmath`,
- `--gladtex`, and `--mimetex` for alternative ways of dealing with
- math in HTML.)
+ `--gladtex`, `--webtex`, and `--mimetex` for alternative ways of
+ dealing with math in HTML.)
`--mathml`
: causes `pandoc` to convert all TeX math to MathML.
@@ -364,21 +364,29 @@ For further documentation, see the `pandoc(1)` man page.
TeX math in HTML, Slidy, or S5. The *url* should point to the jsMath
load script (e.g. `jsMath/easy/load.js`). If it is provided, a link
to it will be included in the header of standalone HTML documents.
- (See `--latexmathml`, `--mimetex`, and `--gladtex` for alternative
- ways of dealing with math in HTML.)
+ (See `--latexmathml`, `--mimetex`, `--webtex`, and `--gladtex` for
+ alternative ways of dealing with math in HTML.)
`--gladtex`*[=url]*
: causes TeX formulas to be enclosed in `<eq>` tags in HTML, Slidy, or
S5 output. This output can then be processed by [gladTeX] to produce
links to images with the typeset formulas. (See `--latexmathml`,
- `--jsmath`, and `--mimetex` for alternative ways of dealing with
- math in HTML.)
+ `--jsmath`, `--webtex`, and `--mimetex` for alternative ways of
+ dealing with math in HTML.)
`--mimetex`*[=url]*
: causes TeX formulas to be replaced by `<img>` tags linking to the
[mimeTeX] CGI script, which will produce images with the typeset
- formulas. (See `--latexmathml`, `--jsmath`, and `--gladtex` for alternative
- ways of dealing with math in HTML.)
+ formulas. (See `--latexmathml`, `--jsmath`, `--webtex`, and
+ `--gladtex` for alternative ways of dealing with math in HTML.)
+
+`--webtex`*[=url]*
+: causes TeX formulas to be replaced by `<img>` tags linking to an
+ external service that converts TeX formulas to images. The formula
+ will be concatenated with the URL provided. If no URL
+ is specified, the Google Chart API is used. (See `--latexmathml`,
+ `--jsmath`, `--mimetex`, and `--gladtex` for alternative ways of
+ dealing with math in HTML.)
`-i` or `--incremental`
: causes all lists in Slidy or S5 output to be displayed incrementally by
@@ -1241,6 +1249,12 @@ command-line options selected:
gladtex -d myfile-images myfile.htex
# produces myfile.html and images in myfile-images
+6. If the `--webtex` option is used, TeX formulas will be converted
+ to `<img>` tags that link to an external script that converts
+ formulas to images. The formula will be URL-encoded and concatenated
+ with the URL provided. If no URL is specified, the Google Chart
+ API will be used (`http://chart.apis.google.com/chart?cht=tx&chl=`).
+
Inline TeX
----------
diff --git a/man/man1/pandoc.1.md b/man/man1/pandoc.1.md
index c829aacae..e1cf67847 100644
--- a/man/man1/pandoc.1.md
+++ b/man/man1/pandoc.1.md
@@ -136,6 +136,11 @@ should pipe input and output through `iconv`:
: Render TeX math using the mimeTeX CGI script. If *URL* is not specified,
it is assumed that the script is at `/cgi-bin/mimetex.cgi`.
+\--webtex=*URL*
+: Render TeX math using an external script. The formula will be
+ concatenated with the URL provided. If *URL* is not specified, the
+ Google Chart API will be used.
+
-i, \--incremental
: Make list items in Slidy or S5 display incrementally (one by one).
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index ac1cf7373..b8eb14177 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -457,7 +457,7 @@ data HTMLMathMethod = PlainMath
| LaTeXMathML (Maybe String) -- url of LaTeXMathML.js
| JsMath (Maybe String) -- url of jsMath load script
| GladTeX
- | MimeTeX String -- url of mimetex.cgi
+ | WebTeX String -- url of TeX->image script.
| MathML (Maybe String) -- url of MathMLinHTML.js
deriving (Show, Read, Eq)
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 3f9a417d2..20022e182 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -36,6 +36,7 @@ import Text.Pandoc.Templates
import Text.Pandoc.Readers.TeXMath
import Text.Pandoc.Highlighting ( highlightHtml )
import Text.Pandoc.XML (stripTags, escapeStringForXML)
+import Network.HTTP ( urlEncode )
import Numeric ( showHex )
import Data.Char ( ord, toLower )
import Data.List ( isPrefixOf, intersperse )
@@ -462,16 +463,20 @@ inlineToHtml opts inline =
-- non-math elements on the page from being treated as math by
-- the javascript
return $ thespan ! [theclass "LaTeX"] $
- if t == InlineMath
- then primHtml ("$" ++ str ++ "$")
- else primHtml ("$$" ++ str ++ "$$")
- JsMath _ ->
- return $ if t == InlineMath
- then thespan ! [theclass "math"] $ primHtml str
- else thediv ! [theclass "math"] $ primHtml str
- MimeTeX url ->
- return $ image ! [src (url ++ "?" ++ str),
- alt str, title str]
+ case t of
+ InlineMath -> primHtml ("$" ++ str ++ "$")
+ DisplayMath -> primHtml ("$$" ++ str ++ "$$")
+ JsMath _ -> do
+ let m = primHtml str
+ return $ case t of
+ InlineMath -> thespan ! [theclass "math"] $ m
+ DisplayMath -> thediv ! [theclass "math"] $ m
+ WebTeX url -> do
+ let m = image ! [src (url ++ urlEncode str),
+ alt str, title str]
+ return $ case t of
+ InlineMath -> m
+ DisplayMath -> br +++ m +++ br
GladTeX ->
return $ primHtml $ "<EQ>" ++ str ++ "</EQ>"
MathML _ -> do
@@ -484,12 +489,14 @@ inlineToHtml opts inline =
Right r -> return $ primHtml $
ppcElement conf r
Left _ -> inlineListToHtml opts
- (readTeXMath str) >>=
- return . (thespan !
- [theclass "math"])
- PlainMath ->
- inlineListToHtml opts (readTeXMath str) >>=
- return . (thespan ! [theclass "math"]) )
+ (readTeXMath str) >>= return .
+ (thespan ! [theclass "math"])
+ PlainMath -> do
+ x <- inlineListToHtml opts (readTeXMath str)
+ let m = thespan ! [theclass "math"] $ x
+ return $ case t of
+ InlineMath -> m
+ DisplayMath -> br +++ m +++ br )
(TeX str) -> case writerHTMLMathMethod opts of
LaTeXMathML _ -> do modify (\st -> st {stMath = True})
return $ primHtml str
diff --git a/src/pandoc.hs b/src/pandoc.hs
index 38db4c6df..9546d6026 100644
--- a/src/pandoc.hs
+++ b/src/pandoc.hs
@@ -40,7 +40,6 @@ import System.Environment ( getArgs, getProgName, getEnvironment )
import System.Exit ( exitWith, ExitCode (..) )
import System.FilePath
import System.Console.GetOpt
-import Data.Maybe ( fromMaybe )
import Data.Char ( toLower, isDigit )
import Data.List ( intercalate, isSuffixOf )
import System.Directory ( getAppUserDataDirectory )
@@ -282,11 +281,24 @@ options =
, Option "" ["mimetex"]
(OptArg
- (\arg opt -> return opt { optHTMLMathMethod = MimeTeX
- (fromMaybe "/cgi-bin/mimetex.cgi" arg)})
+ (\arg opt -> do
+ let url = case arg of
+ Just u -> u ++ "?"
+ Nothing -> "/cgi-bin/mimetex.cgi?"
+ return opt { optHTMLMathMethod = WebTeX url })
"URL")
"" -- "Use mimetex for HTML math"
+ , Option "" ["webtex"]
+ (OptArg
+ (\arg opt -> do
+ let url = case arg of
+ Just u -> u
+ Nothing -> "http://chart.apis.google.com/chart?cht=tx&chl="
+ return opt { optHTMLMathMethod = WebTeX url })
+ "URL")
+ "" -- "Use web service for HTML math"
+
, Option "" ["jsmath"]
(OptArg
(\arg opt -> return opt { optHTMLMathMethod = JsMath arg})
diff --git a/tests/writer.html b/tests/writer.html
index b8296a536..adf0bb9ca 100644
--- a/tests/writer.html
+++ b/tests/writer.html
@@ -855,9 +855,11 @@ Blah
></span
>-Tree</li
><li
- >Here’s some display math: <span class="math"
+ >Here’s some display math: <br
+ /><span class="math"
>$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$</span
- ></li
+ ><br
+ /></li
><li
>Here’s one that has a line break in it: <span class="math"
>α + ω × <em