summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex')
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex89
1 files changed, 89 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex
new file mode 100644
index 00000000000..910a9dd6034
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luametafun/luametafun-technology.tex
@@ -0,0 +1,89 @@
+% language=us
+
+\environment luametafun-style
+
+\startcomponent luametafun-technology
+
+\startchapter[title={Technology}]
+
+The \METAPOST\ library that we use in \LUAMETATEX\ is a follow up on the library
+used in \LUATEX\ which itself is a follow up on the original \METAPOST\ program
+that again was a follow up on Don Knuths \METAFONT, the natural companion to
+\TEX.
+
+When we start with John Hobbies \METAPOST\ we see a graphical engine that
+provides a simple but powerful programming language meant for making graphics,
+not the freehand kind, but the more systematic ones. The output is \POSTSCRIPT\
+but a simple kind that can easily be converted to \PDF. \footnote {For that
+purpose I wrote a converter in the \TEX\ language for \PDFTEX, and even within
+the limitations of \TEX\ at that time (fonts, number of registers, memory) it
+worked out quite well.} It's output is very accurate and performance is great.
+
+As part of the \LUATEX\ development project Taco Hoekwater turned \METAPOST\ into
+\MPLIB, a downward compatible library where \METAPOST\ became a small program
+using that library. But there is more: there are (when enabled) backends that
+produce \PNG\ or \SVG, but when used these also add dependencies on moving
+targets. The library by default uses the so called scaled numbers: floats that
+internally are long integers. But it can also work in doubles, decimal and binary
+and especially the last two create a dependency on libraries. It is good to
+notice that as in the original \METAPOST\ the \POSTSCRIPT\ output handling is
+visible all over the source. Also, the way \TYPEONE\ fonts are handled has been
+extended, for instance by providing access to shapes.
+
+At some point a \LUA\ interface got added that made it possible to call out to
+the \LUA\ instance used in \LUATEX, so the three concepts: \TEX, \METAPOST\ and
+\LUA\ can combine forces. A snippet of code can be run, and a result can be piped
+back. Although there is some limited access to \METAPOST\ internals, the normal
+way to go is by serializing \METAPOST\ data to the \LUA\ end and let \METAPOST\
+scan the result using \type {scantokens}.
+
+The library in \LUAMETATEX\ is a bit different. Of course it has the same core
+graphic engine, but there is no longer a backend. In \CONTEXT\ \MKIV\ the
+\POSTSCRIPT\ (and other) backends were not used anyway because it operates on the
+exported \LUA\ representation of the result. Combined with the \type {prescript}
+and \type {postscript} features introduced in the library that provides all we
+need to make interesting extensions to the graphical engine (color, shading,
+image inclusion, text, etc). The \METAPOST\ font support features are also not
+used because we need support for \OPENTYPE\ and even in \MKII\ (for \PDFTEX\ and
+\XETEX) we used a different approach to fonts.
+
+It is for that reason that the library we use in \LUAMETATEX\ is a leaner version
+of its ancestor. As mentioned, there is no backend code, only the \LUA\ export,
+which saves a lot, and there are no traces of font support left, which also drops
+many lines of code. We forget about the binary number model because it needs a
+large library that also occasionally changes, but one can add it if needed. This
+means that there are no dependencies except for decimal but that library is
+relatively small and doesn't change at all. It also means that the resulting
+\MPLIB\ library is much smaller, but it's still a substantial component in
+\LUAMETATEX. Internally I use the future version number 3. The original
+\METAPOST\ program is version 1, so the library got version 2, and that one
+basically being frozen (it's in bug|-|fix mode) means that it will stick to that.
+
+Another difference is that from the \LUA\ end one has access to several scanners
+and also has possibilities to efficiently push back results to the engine.
+Running scripts can also be done more efficient. This permits a rather efficient
+(in terms of performance and memory usage) way to extend the language and add for
+instance key|/|value based interfaces. There are some more additions, like for
+instance pre- and postscripts to clip, boundary and group objects. Internals can
+be numeric, string and boolean. One can use \UTF\ input although that has also be
+added to the ancestor. Some redundant internal input|/|output remapping has been
+removed and we are more tolerant to newlines in return values from \LUA. Error
+messages have been normalized, internal documentation cleaned up a bit. A few
+anomalies have been fixed too. All in- and output is now under \LUA\ control.
+Etcetera. The (now very few) source files are still \CWEB\ files but the
+conversion to \CCODE\ is done with a \LUA\ script that uses (surprise) the
+\LUAMETATEX\ engine as \LUA\ processor. This give a bit nicer \CCODE\ output for
+when we view it in e.g.\ Visual Studio too (normally the \CWEB\ output is not
+meant to be seen by humans).
+
+Keep in mind that it's still \METAPOST\ with all it provided, but some has to be
+implemented in macros or in \LUA\ via callbacks. The simple fact that the
+original library is the standard and is also the core of \METAPOST\ most of these
+changes and additions cannot be backported to the original, but that is no big
+deal. The advantage is that we can experiment with new features without
+endangering users outside the \CONTEXT\ bubble. The same is true for the \LUA\
+interface, which already is upgraded in many aspects.
+
+\stopchapter
+
+\stopcomponent