summaryrefslogtreecommitdiff
path: root/tex/context/base/x-asciimath.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/x-asciimath.mkiv')
-rw-r--r--tex/context/base/x-asciimath.mkiv96
1 files changed, 96 insertions, 0 deletions
diff --git a/tex/context/base/x-asciimath.mkiv b/tex/context/base/x-asciimath.mkiv
new file mode 100644
index 000000000..c9252408d
--- /dev/null
+++ b/tex/context/base/x-asciimath.mkiv
@@ -0,0 +1,96 @@
+%D \module
+%D [ file=m-asciimath,
+%D version=2006.04.24, % 1999.11.06,
+%D title=\CONTEXT\ Modules,
+%D subtitle=AsciiMath,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Lua code.
+
+\ctxloadluafile{x-asciimath}{}
+
+%D The following code is not officially supported and is only meant
+%D for the Math4All project.
+%D
+%D The following code kind of maps ascii math
+%D http://www1.chapman.edu/~jipsen/mathml/asciimath.html onto \TEX. The
+%D code was written for the math4all project but in retrospect we
+%D could have used just tex code as the web version can handle that
+%D as well. Anyhow, as we use \MATHML\ as basis it makes sense to add
+%D this to the repertoire as annotation variant, so now we have
+%D content \MATHML\ (prefered), presentation \MATHML\ (often messy),
+%D \OPENMATH\ (what was which we started with in this project)
+%D calcmath (handy for students who are accustomed to calculators),
+%D asciimath (to make Frits's live easier) and of course \TEX. Of
+%D course all are used mixed.
+%D
+%D We don't support all quirks of asciimath as I am not in the mood to
+%D write a complex parser while a bit of sane coding can work as well.
+%D
+%D \startitemize
+%D \item We support only the syntactically clear variants and as long
+%D as lpeg does not support left recursion this is as far as we
+%D want to go.
+%D \item The parser is rather insensitive for spaces but yet the advice is
+%D to avoid weird coding like \type {d/dxf(x)} but use \type {d/dx
+%D f(x)} instead. After all we're not in a compact coding cq.\
+%D parser challenge.
+%D \item We also don't support the somewhat confusing \type {sqrt sqrt 2}
+%D nor \type {root3x} (although the second one kind of works). A bit
+%D of defensive coding does not hurt.
+%D \item We can process \type {a/b/c/d} but it's not compatible with the
+%D default behaviour of asciimath. Use grouping instead. Yes, we do
+%D support the somewhat nonstandard grouping token mix.
+%D \item You should use explicit \type {text(..)} directives as one can
+%D never be sure what is a reserved word and not.
+%D \stopitemize
+%D
+%D Actually, as the only parsing sensitive elements of \TEX\ are
+%D fractions (\type {\over} and friends, a restricted use of \TEX\
+%D coding is probably as comprehensive and parseble.
+%D
+%D The webpage with examples served as starting point so anything beyond
+%D what can be found there isn't supported.
+
+\unprotect
+
+\writestatus{asciimath}{beware, this is an experimental (m4all only) module}
+
+\unexpanded\def\asciimath#1{\ctxlua{asciimath.convert(\!!bs\detokenize{#1}\!!es,true)}}
+
+\protect
+
+\doifnotmode{demo}{\endinput}
+
+\enabletrackers[asciimath.mapping]
+
+\starttext
+
+\startlines
+\asciimath{x^2+y_1+z_12^34}
+\asciimath{sin^-1(x)}
+\asciimath{d/dx f(x)=lim_(h->0) (f(x+h)-f(x))/h}
+\asciimath{f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n}
+\asciimath{int_0^1 f(x)dx}
+\asciimath{int^1_0 f(x)dx}
+\asciimath{a//b}
+\asciimath{(a/b)/(d/c)}
+\asciimath{((a*b))/(d/c)}
+\asciimath{[[a,b],[c,d]]((n),(k))}
+\asciimath{1/x={(1,text{if } x!=0),(text{undefined},if x=0):}}
+\asciimath{{ (1,2), (x,(x + text(x))) }}
+\asciimath{{(1,2),(x,(x+text(x))),(x,text(x))}}
+\asciimath{{(1,2),(x,(x+text(x))),(x,x text(x))}}
+\asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,x text(xyz))}}
+\asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,text(xyz)+1+text(hans))}}
+\asciimath{<<a,b>> text{and} {:(x,y),(u,v):}}
+\asciimath{(a,b] = {x text(in) RR | a < x <= b}}
+\stoplines
+
+\stoptext