diff options
51 files changed, 699 insertions, 431 deletions
diff --git a/doc/context/documents/general/manuals/lua-mkiv.pdf b/doc/context/documents/general/manuals/lua-mkiv.pdf Binary files differindex 2c1e444e3..9e92ebad9 100644 --- a/doc/context/documents/general/manuals/lua-mkiv.pdf +++ b/doc/context/documents/general/manuals/lua-mkiv.pdf diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf Binary files differindex a63c4d917..8b746b0f2 100644 --- a/doc/context/documents/general/manuals/luatex.pdf +++ b/doc/context/documents/general/manuals/luatex.pdf diff --git a/doc/context/documents/general/manuals/mreadme.pdf b/doc/context/documents/general/manuals/mreadme.pdf Binary files differindex 35aca89fc..031be0fda 100644 --- a/doc/context/documents/general/manuals/mreadme.pdf +++ b/doc/context/documents/general/manuals/mreadme.pdf diff --git a/doc/context/documents/general/manuals/sql-mkiv.pdf b/doc/context/documents/general/manuals/sql-mkiv.pdf Binary files differindex bf6013d33..fa9a5ad61 100644 --- a/doc/context/documents/general/manuals/sql-mkiv.pdf +++ b/doc/context/documents/general/manuals/sql-mkiv.pdf diff --git a/doc/context/documents/general/manuals/swiglib-mkiv.pdf b/doc/context/documents/general/manuals/swiglib-mkiv.pdf Binary files differindex c61666845..57b717f9b 100644 --- a/doc/context/documents/general/manuals/swiglib-mkiv.pdf +++ b/doc/context/documents/general/manuals/swiglib-mkiv.pdf diff --git a/doc/context/documents/general/manuals/templates-mkiv.pdf b/doc/context/documents/general/manuals/templates-mkiv.pdf Binary files differindex 02a4aee0d..47a0d70a6 100644 --- a/doc/context/documents/general/manuals/templates-mkiv.pdf +++ b/doc/context/documents/general/manuals/templates-mkiv.pdf diff --git a/doc/context/documents/general/manuals/tools-mkiv.pdf b/doc/context/documents/general/manuals/tools-mkiv.pdf Binary files differindex 53118457e..1da11dcb0 100644 --- a/doc/context/documents/general/manuals/tools-mkiv.pdf +++ b/doc/context/documents/general/manuals/tools-mkiv.pdf diff --git a/doc/context/documents/general/manuals/xtables-mkiv.pdf b/doc/context/documents/general/manuals/xtables-mkiv.pdf Binary files differindex 9dbf4469e..fb04a53d9 100644 --- a/doc/context/documents/general/manuals/xtables-mkiv.pdf +++ b/doc/context/documents/general/manuals/xtables-mkiv.pdf diff --git a/doc/context/sources/general/manuals/lua/lua-mkiv.tex b/doc/context/sources/general/manuals/lua/lua-mkiv.tex index a6a2b465a..40e885eac 100644 --- a/doc/context/sources/general/manuals/lua/lua-mkiv.tex +++ b/doc/context/sources/general/manuals/lua/lua-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[art-01,abr-02] diff --git a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex index 372aca1e5..03c0774c7 100644 --- a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex +++ b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex @@ -642,15 +642,18 @@ will simply step over such whatsits without ever looking at the contents. \NC \NC table \NC a \LUA\ table \NC \NR \stoptabulate -The \type {type} can have one of five distinct values: +The \type {type} can have one of six distinct values. The number is the \ASCII\ +value if the first character if the type name (so you can use string.byte("l") +instead of \type {108}). \starttabulate[|lT|p|] -\NC \rmbf value \NC \bf explanation \NC \NR -\NC 97 \NC list of attributes \NC \NR -\NC 100 \NC a \LUA\ number \NC \NR -\NC 110 \NC a node list \NC \NR -\NC 115 \NC a \LUA\ string \NC \NR -\NC 116 \NC a \LUA\ token list in \LUA\ table form \NC \NR +\NC \rmbf value \NC \bf meaning \NC \bf explanation \NC \NR +\NC 97 \NC a \NC list of attributes (a node list) \NC \NR +\NC 100 \NC d \NC a \LUA\ number \NC \NR +\NC 108 \NC l \NC a \LUA\ value (table, number, boolean, etc) \NC \NR +\NC 110 \NC n \NC a node list \NC \NR +\NC 115 \NC s \NC a \LUA\ string \NC \NR +\NC 116 \NC t \NC a \LUA\ token list in \LUA\ table form (a list of triplets) \NC \NR \stoptabulate \subsubsubsection{save_pos whatsits} diff --git a/doc/context/sources/general/manuals/mcommon.tex b/doc/context/sources/general/manuals/mcommon.tex index b6b6026e9..94b5f9bf5 100644 --- a/doc/context/sources/general/manuals/mcommon.tex +++ b/doc/context/sources/general/manuals/mcommon.tex @@ -192,19 +192,19 @@ % urls -\useurl[gpl-simple] [http://creativecommons.org/licenses/GPL/2.0/] -\useurl[gpl-legal] [http://creativecommons.org/licenses/GPL/2.0/legalcode] -\useurl[byncsa-simple][http://creativecommons.org/licenses/by-nc-sa/2.5/] -\useurl[byncsa-legal] [http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode] - -\useurl[garden] [http://contextgarden.net] -\useurl[install] [http://wiki.contextgarden.net/ConTeXt_Standalone] -\useurl[texlive] [http://www.tug.org/texlive/] -\useurl[group] [http://group.contextgarden.net] -\useurl[list] [http://www.ntg.nl/mailman/listinfo/ntg-context] -\useurl[development] [http://www.ntg.nl/mailman/listinfo/dev-context] -\useurl[announce] [http://www.ntg.nl/mailman/listinfo/ann-context] -\useurl[collector] [http://tracker.luatex.org] -\useurl[pragma] [http://www.pragma-ade.com] +\useurl[gpl-simple] [http://creativecommons.org/licenses/GPL/2.0/] +\useurl[gpl-legal] [http://creativecommons.org/licenses/GPL/2.0/legalcode] +\useurl[bysa-simple][http://creativecommons.org/licenses/by-sa/4.0/] +\useurl[bysa-legal] [http://creativecommons.org/licenses/by-sa/4.0/legalcode] + +\useurl[garden] [http://contextgarden.net] +\useurl[install] [http://wiki.contextgarden.net/ConTeXt_Standalone] +\useurl[texlive] [http://www.tug.org/texlive/] +\useurl[group] [http://group.contextgarden.net] +\useurl[list] [http://www.ntg.nl/mailman/listinfo/ntg-context] +\useurl[development][http://www.ntg.nl/mailman/listinfo/dev-context] +\useurl[announce] [http://www.ntg.nl/mailman/listinfo/ann-context] +\useurl[collector] [http://tracker.luatex.org] +\useurl[pragma] [http://www.pragma-ade.com] \stopenvironment diff --git a/doc/context/sources/general/manuals/readme/mreadme.tex b/doc/context/sources/general/manuals/readme/mreadme.tex index b2af11bc4..32c1684d9 100644 --- a/doc/context/sources/general/manuals/readme/mreadme.tex +++ b/doc/context/sources/general/manuals/readme/mreadme.tex @@ -1,6 +1,17 @@ % interface=en engine=luatex language=uk + +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution % -% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \environment mcommon @@ -104,8 +115,8 @@ distributed under the \stopnarrower For practical purposes distributers may also choose the \LATEX\ project licence, -which is considered to be a bit more \TEX\ friendly. (BSD alike licences, the -Ruby Licence and the Apache are all licences that apply well for \CONTEXT.) +which is considered to be a bit more \TEX\ friendly. (BSD alike licences also +apply well for \CONTEXT.) In practice, users may forget about the legal part, if only because I haven't even read (and understood) it completely myself, so let's stick to what Creative @@ -157,6 +168,12 @@ holder. Your fair use and other rights are in no way affected by the above. \stopcolor +Many source filed mention the \quotation {\CONTEXT\ Development Team} as +copyright holder. This is because over time users submit patches and whenever +something happens to the main author, those involved in development can take +over without the need to bother about derived work. In the end the \CONTEXT\ +group is the place to get more information. + \stopsubject \startsubject[title={Recommendations}] @@ -224,13 +241,20 @@ Here are a few recommendations in case you want to distribute, extend of embed \startsubject[title={Documents}] -The documentation is provided under another Creative Commons licence +The documentation is provided under another Creative Commons licence: \startnarrower - \goto{Attribution NonCommercial ShareAlike}[url(byncsa-simple)] + \goto{Attribution ShareAlike}[url(bysa-simple)] \stopnarrower -This one says: +The manuals that are distributed with \CONTEXT\ comes with a rather liberal +license. However, we try to adapt these documents to upgrades in the (sub)systems +that they describe and derived work can therefore conflict with existing +functionality and we cannot be held responsible for that. Many of the manuals +contain characteristic graphics and personal notes or examples that make no sense +when used out|-|of|-|context. + +The mentioned license says: \startcolor[blue] You are free: @@ -243,8 +267,6 @@ You are free: {\sc Attribution:} You must attribute the work in the manner specified by the author or licensor. -{\sc NonCommercial:} You may not use this work for commercial purposes. - {\sc Share Alike:} If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. @@ -262,10 +284,6 @@ distribute the resulting work only under a license identical to this one. Your fair use and other rights are in no way affected by the above. \stopcolor -The non||commercial part is mostly a safeguard. We don't mind if user groups -distribute printed copies, publish (parts of) manuals and|/|or if authors use -example code in manuals and books about \CONTEXT. - If you distribute \CONTEXT\ and related software on electronic media as part of \TEX\ distributions (either or not for money), you may also distribute the manuals and their sources in electronic form, preferable as provided by the @@ -295,8 +313,8 @@ few starting points: \stoplines \startlines -\goto{\url[byncsa-simple]}[url(byncsa-simple)] -\goto{\url[byncsa-legal]}[url(byncsa-legal)] +\goto{\url[bysa-simple]}[url(bysa-simple)] +\goto{\url[bysa-legal]}[url(bysa-legal)] \stoplines \CONTEXT\ itself can be fetched from the main site or the garden: diff --git a/doc/context/sources/general/manuals/sql/sql-mkiv.tex b/doc/context/sources/general/manuals/sql/sql-mkiv.tex index 520532e0b..ec2c999aa 100644 --- a/doc/context/sources/general/manuals/sql/sql-mkiv.tex +++ b/doc/context/sources/general/manuals/sql/sql-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[art-01,abr-02] diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg Binary files differnew file mode 100644 index 000000000..8c45b41b9 --- /dev/null +++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf Binary files differnew file mode 100644 index 000000000..d576c7d91 --- /dev/null +++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png Binary files differnew file mode 100644 index 000000000..fba526e9f --- /dev/null +++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex index fc7a269bb..c24be76bf 100644 --- a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex +++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[art-01,abr-02] @@ -72,11 +82,11 @@ StartPage ; shifted (-1cm,2cm) withcolor \MPcolor{maincolor} ; -% draw textext.ulft("\definedfont[TitlePageMono]in context mkiv") -% xsized .6PaperWidth -% shifted lrcorner Page -% shifted (-1cm,6cm) -% withcolor \MPcolor{maincolor} ; + % draw textext.ulft("\definedfont[TitlePageMono]in context mkiv") + % xsized .6PaperWidth + % shifted lrcorner Page + % shifted (-1cm,6cm) + % withcolor \MPcolor{maincolor} ; StopPage ; @@ -135,6 +145,12 @@ Here is an example of using such a library (by Luigi): local gm = swiglib("gmwand.core") local findfile = resolvers.findfile +if not gm then + -- no big deal for this manual as we use a system in flux + logs.report("swiglib","no swiglib libraries loaded") + return +end + gm.InitializeMagick(".") local magick_wand = gm.NewMagickWand() @@ -174,7 +190,9 @@ gm.DestroyMagickWand(magick_wand) \stopluacode \stopbuffer -\typebuffer \getbuffer +\typebuffer + +\getbuffer In practice you will probably stay away from manipulating text this way, but it illustrates that you can use the regular \CONTEXT\ helpers to locate files. @@ -316,7 +334,7 @@ needs a lot of them) it will first look on its own path (which is remembered). The \MKIV\ lookups are somewhat more robust in the sense that they first check for matches on engine specific paths. This comes in handy when the search patterns are too generic and one can match on for instance \type {luajittex} -whilc \type {luatex} is used. +while \type {luatex} is used. \stopsection @@ -326,7 +344,6 @@ whilc \type {luatex} is used. \NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR \NC version \NC \currentdate \NC \NR \NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR -\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR \NC comment \NC the swiglib infrastructure is implemented by Luigi Scarso \NC \NR \stoptabulate diff --git a/doc/context/sources/general/manuals/templates/templates-mkiv.tex b/doc/context/sources/general/manuals/templates/templates-mkiv.tex index 9361d1a8d..01f2c429e 100644 --- a/doc/context/sources/general/manuals/templates/templates-mkiv.tex +++ b/doc/context/sources/general/manuals/templates/templates-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[art-01,abr-02] diff --git a/doc/context/sources/general/manuals/tools/tools-mkiv.tex b/doc/context/sources/general/manuals/tools/tools-mkiv.tex index 5f20e6985..2ac1e15f4 100644 --- a/doc/context/sources/general/manuals/tools/tools-mkiv.tex +++ b/doc/context/sources/general/manuals/tools/tools-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[abr-02] diff --git a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex index 302f2880c..a41282622 100644 --- a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex +++ b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex @@ -1,7 +1,17 @@ % language=uk -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. \usemodule[art-01,abr-02] diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex 50805410f..f0938c902 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/mkii/mult-de.mkii b/tex/context/base/mkii/mult-de.mkii index f3bdc0740..0762fadfc 100644 --- a/tex/context/base/mkii/mult-de.mkii +++ b/tex/context/base/mkii/mult-de.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{verkopplungsart} \setinterfaceconstant{criterium}{kriterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{aktuell} \setinterfaceconstant{cutspace}{cutspace} diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii index 262b4fde5..a16b87a48 100644 --- a/tex/context/base/mkii/mult-en.mkii +++ b/tex/context/base/mkii/mult-en.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{couplingway} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{current} \setinterfaceconstant{cutspace}{cutspace} diff --git a/tex/context/base/mkii/mult-fr.mkii b/tex/context/base/mkii/mult-fr.mkii index 6d9bf8982..6c71d4aad 100644 --- a/tex/context/base/mkii/mult-fr.mkii +++ b/tex/context/base/mkii/mult-fr.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modecouplage} \setinterfaceconstant{criterium}{critere} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{courant} \setinterfaceconstant{cutspace}{cutspace} diff --git a/tex/context/base/mkii/mult-it.mkii b/tex/context/base/mkii/mult-it.mkii index a5367dfbb..a875555bd 100644 --- a/tex/context/base/mkii/mult-it.mkii +++ b/tex/context/base/mkii/mult-it.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modoaccoppiamento} \setinterfaceconstant{criterium}{criterio} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{corrente} \setinterfaceconstant{cutspace}{cutspace} diff --git a/tex/context/base/mkii/mult-nl.mkii b/tex/context/base/mkii/mult-nl.mkii index 6cd6a7b5d..efc0d2be3 100644 --- a/tex/context/base/mkii/mult-nl.mkii +++ b/tex/context/base/mkii/mult-nl.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{koppelwijze} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{huidige} \setinterfaceconstant{cutspace}{snijwit} diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii index 371b64074..7e5c53791 100644 --- a/tex/context/base/mkii/mult-pe.mkii +++ b/tex/context/base/mkii/mult-pe.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{روشتزویج} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{جاری} \setinterfaceconstant{cutspace}{فضایبرش} diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 00e2f30cc..f7121f703 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modcuplare} \setinterfaceconstant{criterium}{criteriu} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{curent} \setinterfaceconstant{cutspace}{cutspace} diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua index c01e90179..fef1a8474 100644 --- a/tex/context/base/mkiv/anch-pos.lua +++ b/tex/context/base/mkiv/anch-pos.lua @@ -110,18 +110,19 @@ local f_e_tag = formatters["e:%s"] local f_p_tag = formatters["p:%s"] local f_w_tag = formatters["w:%s"] -local f_b_column = formatters["_plib_.b_col(%q)"] -local f_e_column = formatters["_plib_.e_col()"] - -local f_enhance = formatters["_plib_.enhance(%q)"] local f_region = formatters["region:%s"] -local f_b_region = formatters["_plib_.b_region(%q)"] -local f_e_region = formatters["_plib_.e_region(%s)"] - local f_tag_three = formatters["%s:%s:%s"] local f_tag_two = formatters["%s:%s"] +----- f_enhance = formatters["_plib_.enhance(%q)"] + +----- f_b_column = formatters["_plib_.b_column(%q)"] +----- f_e_column = formatters["_plib_.e_column()"] + +----- f_b_region = formatters["_plib_.b_region(%q)"] +----- f_e_region = formatters["_plib_.e_region(%s)"] + local function sorter(a,b) return a.y > b.y end @@ -272,7 +273,7 @@ local function enhance(data) data.y = getvpos() end if data.p == true then - data.p = texgetcount("realpageno") + data.p = texgetcount("realpageno") -- we should use a variable set in otr end if data.c == true then data.c = column @@ -351,7 +352,7 @@ scanners.dosavepositionplus = compilescanner { -- not much gain in keeping stack (inc/dec instead of insert/remove) -function jobpositions.b_col(tag) +local function b_column(tag) tobesaved[tag] = { r = true, x = gethpos(), @@ -361,7 +362,7 @@ function jobpositions.b_col(tag) column = tag end -function jobpositions.e_col(tag) +local function e_column(tag) local t = tobesaved[column] if not t then -- something's wrong @@ -373,6 +374,9 @@ function jobpositions.e_col(tag) column = columns[#columns] end +jobpositions.b_column = b_column +jobpositions.e_column = e_column + scanners.bposcolumn = function() -- tag local tag = scanstring() insert(columns,tag) @@ -383,7 +387,8 @@ scanners.bposcolumnregistered = function() -- tag local tag = scanstring() insert(columns,tag) column = tag - context(new_latelua_node(f_b_column(tag))) + -- context(new_latelua_node(f_b_column(tag))) + context(new_latelua_node(function() b_column(tag) end)) end scanners.eposcolumn = function() @@ -392,14 +397,15 @@ scanners.eposcolumn = function() end scanners.eposcolumnregistered = function() - context(new_latelua_node(f_e_column())) + -- context(new_latelua_node(f_e_column())) + context(new_latelua_node(e_column)) remove(columns) column = columns[#columns] end -- regions -function jobpositions.b_region(tag) +local function b_region(tag) local last = tobesaved[tag] last.x, last.y = getpos() last.p = texgetcount("realpageno") @@ -407,7 +413,7 @@ function jobpositions.b_region(tag) region = tag end -function jobpositions.e_region(correct) +local function e_region(correct) local last = tobesaved[region] local v = getvpos() if correct then @@ -418,6 +424,9 @@ function jobpositions.e_region(correct) region = regions[#regions] end +jobpositions.b_region = b_region +jobpositions.e_region = e_region + local function setregionbox(n,tag) if not tag or tag == "" then nofregions = nofregions + 1 @@ -438,10 +447,13 @@ local function setregionbox(n,tag) return tag, box end -local function markregionbox(n,tag,correct) +local function markregionbox(n,tag,correct) -- correct needs checking local tag, box = setregionbox(n,tag) - local push = new_latelua(f_b_region(tag)) - local pop = new_latelua(f_e_region(tostring(correct))) -- todo: check if tostring is needed with formatter + -- todo: check if tostring is needed with formatter + -- local push = new_latelua(f_b_region(tag)) + -- local pop = new_latelua(f_e_region(tostring(correct))) + local push = new_latelua(function() b_region(tag) end) + local pop = new_latelua(function() e_region(tostring(correct)) end) -- maybe we should construct a hbox first (needs experimenting) so that we can avoid some at the tex end local head = getlist(box) if head then @@ -509,7 +521,8 @@ scanners.parpos = function() -- todo: relate to localpar (so this is an intermed end local tag = f_p_tag(nofparagraphs) tobesaved[tag] = t - context(new_latelua_node(f_enhance(tag))) + -- context(new_latelua_node(f_enhance(tag))) + context(new_latelua_node(function() enhance(tobesaved[tag]) end)) end scanners.dosetposition = function() -- name @@ -522,7 +535,8 @@ scanners.dosetposition = function() -- name y = true, n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionwhd = function() -- name w h d extra @@ -538,7 +552,8 @@ scanners.dosetpositionwhd = function() -- name w h d extra d = scandimen(), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionbox = function() -- name box @@ -555,7 +570,8 @@ scanners.dosetpositionbox = function() -- name box d = getfield(box,"depth"), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionplus = function() -- name w h d extra @@ -572,7 +588,8 @@ scanners.dosetpositionplus = function() -- name w h d extra n = nofparagraphs > 0 and nofparagraphs or nil, e = scanstring(), } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionstrut = function() -- name @@ -588,7 +605,8 @@ scanners.dosetpositionstrut = function() -- name d = getfield(strutbox,"depth"), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end function jobpositions.getreserved(tag,n) diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 7925f8797..79aa939d4 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2016.05.10 23:43} +\newcontextversion{2016.05.12 23:49} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/mkiv/context-todo.tex b/tex/context/base/mkiv/context-todo.tex index 66889c4d3..bf7d198c9 100644 --- a/tex/context/base/mkiv/context-todo.tex +++ b/tex/context/base/mkiv/context-todo.tex @@ -47,6 +47,9 @@ redo some of the spacing (adapt to improvements in engine) \stopitem \startitem + reorganize position data (more subtables) + \stopitem + \startitem use \type {\matheqnogapstep}, \type {\Ustack}, \type {\mathscriptsmode}, \ \type {\mathdisplayskipmode} and other new math primitives \stopitem diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 228e3f0cd..b670c40c1 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -39,7 +39,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2016.05.10 23:43} +\edef\contextversion{2016.05.12 23:49} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/mkiv/font-one.lua b/tex/context/base/mkiv/font-one.lua index af3246342..5d54150c5 100644 --- a/tex/context/base/mkiv/font-one.lua +++ b/tex/context/base/mkiv/font-one.lua @@ -55,7 +55,7 @@ local otfenhancers = otf.enhancers local afmfeatures = constructors.newfeatures("afm") local registerafmfeature = afmfeatures.register -afm.version = 1.507 -- incrementing this number one up will force a re-cache +afm.version = 1.510 -- incrementing this number one up will force a re-cache afm.cache = containers.define("fonts", "afm", afm.version, true) afm.autoprefixed = true -- this will become false some day (catches texnansi-blabla.*) @@ -87,143 +87,6 @@ and <l n='otf'/> reader.</p> -- Comment DELIM 2390 1010 -- Comment AXISHEIGHT 250 -local comment = P("Comment") -local spacing = patterns.spacer -- S(" \t")^1 -local lineend = patterns.newline -- S("\n\r") -local words = spacing * C((1 - lineend)^1) -local number = spacing * C((R("09") + S("."))^1) / tonumber * spacing^0 -local data = Carg(1) -local plus = P("plus") * number -local minus = P("minus") * number - -local pattern = ( -- needs testing ... not used anyway as we no longer need math afm's - comment * spacing * ( - data * ( - ("CODINGSCHEME" * words ) / function(t,a) end + - ("DESIGNSIZE" * number * words ) / function(t,a) t[ 1] = a end + - ("CHECKSUM" * number * words ) / function(t,a) t[ 2] = a end + - ("SPACE" * number * plus * minus ) / function(t,a,b,c) t[ 3], t[ 4], t[ 5] = a, b, c end + - ("QUAD" * number ) / function(t,a) t[ 6] = a end + - ("EXTRASPACE" * number ) / function(t,a) t[ 7] = a end + - ("NUM" * number * number * number ) / function(t,a,b,c) t[ 8], t[ 9], t[10] = a, b, c end + - ("DENOM" * number * number ) / function(t,a,b) t[11], t[12] = a, b end + - ("SUP" * number * number * number ) / function(t,a,b,c) t[13], t[14], t[15] = a, b, c end + - ("SUB" * number * number ) / function(t,a,b) t[16], t[17] = a, b end + - ("SUPDROP" * number ) / function(t,a) t[18] = a end + - ("SUBDROP" * number ) / function(t,a) t[19] = a end + - ("DELIM" * number * number ) / function(t,a,b) t[20], t[21] = a, b end + - ("AXISHEIGHT" * number ) / function(t,a) t[22] = a end - ) - + (1-lineend)^0 - ) - + (1-comment)^1 -)^0 - -local function scan_comment(str) - local fd = { } - lpegmatch(pattern,str,1,fd) - return fd -end - --- Comment DesignSize 12 (pts) --- Comment TFM designsize: 12 (in points) - -local keys = { - - FontName = function(data,line) - data.metadata.fontname = strip(line) -- get rid of spaces - data.metadata.fullname = strip(line) - end, - - ItalicAngle = function(data,line) - data.metadata.italicangle = tonumber(line) - end, - - IsFixedPitch = function(data,line) - data.metadata.monospaced = toboolean(line,true) - end, - - CharWidth = function(data,line) - data.metadata.charwidth = tonumber(line) - end, - - XHeight = function(data,line) - data.metadata.xheight = tonumber(line) - end, - - Descender = function(data,line) - data.metadata.descender = tonumber (line) - end, - - Ascender = function(data,line) - data.metadata.ascender = tonumber (line) - end, - - Comment = function(data,line) - line = lower(line) - local designsize = match(line,"designsize[^%d]*(%d+)") - if designsize then data.metadata.designsize = tonumber(designsize) end - end, - -} - -local function get_charmetrics(data,charmetrics,vector) - local characters = data.characters - local chr, ind = { }, 0 - for k, v in gmatch(charmetrics,"([%a]+) +(.-) *;") do - if k == 'C' then - v = tonumber(v) - if v < 0 then - ind = ind + 1 -- ? - else - ind = v - end - chr = { - index = ind - } - elseif k == 'WX' then - chr.width = tonumber(v) - elseif k == 'N' then - characters[v] = chr - elseif k == 'B' then - local llx, lly, urx, ury = match(v,"^ *(.-) +(.-) +(.-) +(.-)$") - chr.boundingbox = { tonumber(llx), tonumber(lly), tonumber(urx), tonumber(ury) } - elseif k == 'L' then - local plus, becomes = match(v,"^(.-) +(.-)$") - local ligatures = chr.ligatures - if ligatures then - ligatures[plus] = becomes - else - chr.ligatures = { [plus] = becomes } - end - end - end -end - -local function get_kernpairs(data,kernpairs) - local characters = data.characters - for one, two, value in gmatch(kernpairs,"KPX +(.-) +(.-) +(.-)\n") do - local chr = characters[one] - if chr then - local kerns = chr.kerns - if kerns then - kerns[two] = tonumber(value) - else - chr.kerns = { [two] = tonumber(value) } - end - end - end -end - -local function get_variables(data,fontmetrics) - for key, rest in gmatch(fontmetrics,"(%a+) *(.-)[\n\r]") do - local keyhandler = keys[key] - if keyhandler then - keyhandler(data,rest) - end - end -end - --[[ldx-- <p>We now use a new (unfinished) pfb loader but I see no differences between the old and new vectors (we actually had one bad vector with the old loader).</p> @@ -353,61 +216,205 @@ do end -local function readafm(filename) - local ok, afmblob, size = resolvers.loadbinfile(filename) -- has logging - if ok and afmblob then - local data = { - resources = { - filename = resolvers.unresolve(filename), - version = afm.version, - creator = "context mkiv", - }, - properties = { - hasitalics = false, - }, - goodies = { - }, - metadata = { - filename = file.removesuffix(file.basename(filename)) - }, - characters = { - -- a temporary store - }, - descriptions = { - -- the final store - }, - } --- afmblob = gsub(afmblob,"StartCharMetrics(.-)EndCharMetrics", function(charmetrics) - for charmetrics in gmatch(afmblob,"StartCharMetrics(.-)EndCharMetrics") do - if trace_loading then - report_afm("loading char metrics") +--[[ldx-- +<p>We start with the basic reader which we give a name similar to the built in <l n='tfm'/> +and <l n='otf'/> reader.</p> +--ldx]]-- + +-- Comment FONTIDENTIFIER LMMATHSYMBOLS10 +-- Comment CODINGSCHEME TEX MATH SYMBOLS +-- Comment DESIGNSIZE 10.0 pt +-- Comment CHECKSUM O 4261307036 +-- Comment SPACE 0 plus 0 minus 0 +-- Comment QUAD 1000 +-- Comment EXTRASPACE 0 +-- Comment NUM 676.508 393.732 443.731 +-- Comment DENOM 685.951 344.841 +-- Comment SUP 412.892 362.892 288.889 +-- Comment SUB 150 247.217 +-- Comment SUPDROP 386.108 +-- Comment SUBDROP 50 +-- Comment DELIM 2390 1010 +-- Comment AXISHEIGHT 250 +-- Comment DesignSize 12 (pts) +-- Comment TFM designsize: 12 (in points) + +local readafm + +do -- no need for a further speedup with locals + + local spacing = patterns.spacer + local lineend = patterns.newline + local number = spacing * (R("09") + S("."))^1 / tonumber + local name = spacing * C((1-spacing)^1) + local words = spacing * (1 - lineend)^1 / strip + local rest = (1 - lineend)^0 + local fontdata = Carg(1) + local semicolon = spacing * P(";") + local plus = P("plus") * number + local minus = P("minus") * number + + -- kern pairs + + local function addkernpair(data,one,two,value) + local chr = data.characters[one] + if chr then + local kerns = chr.kerns + if kerns then + kerns[two] = tonumber(value) + else + chr.kerns = { [two] = tonumber(value) } end - get_charmetrics(data,charmetrics,vector) - break end - for kernpairs in gmatch(afmblob,"StartKernPairs(.-)EndKernPairs") do + end + + local p_kernpair = (fontdata * P("KPX") * name * name * number) / addkernpair + + -- char metrics + + local chr = false + local ind = 0 + + local function start() + ind = 0 + chr = { } + end + + local function stop() + ind = 0 + chr = false + end + + local function setindex(i) + if i < 0 then + ind = ind + 1 -- ? + else + ind = i + end + chr = { + index = ind + } + end + + local function setwidth(width) + chr.width = width + end + + local function setname(data,name) + data.characters[name] = chr + end + + local function setboundingbox(boundingbox) + chr.boundingbox = boundingbox + end + + local function setligature(plus,becomes) + local ligatures = chr.ligatures + if ligatures then + ligatures[plus] = becomes + else + chr.ligatures = { [plus] = becomes } + end + end + + local p_charmetric = ( ( + P("C") * number / setindex + + P("WX") * number / setwidth + + P("N") * fontdata * name / setname + + P("B") * Ct((number)^4) / setboundingbox + + P("L") * (name)^2 / setligature + ) * semicolon )^1 + + local p_charmetrics = P("StartCharMetrics") * number * (p_charmetric + (1-P("EndCharMetrics")))^0 * P("EndCharMetrics") + local p_kernpairs = P("StartKernPairs") * number * (p_kernpair + (1-P("EndKernPairs")) )^0 * P("EndKernPairs") + + local function set_1(data,key,a) data.metadata[lower(key)] = a end + local function set_2(data,key,a,b) data.metadata[lower(key)] = { a, b } end + local function set_3(data,key,a,b,c) data.metadata[lower(key)] = { a, b, c } end + + local p_parameters = P(false) + + P("FontName") * fontdata * words / function(data,line) + data.metadata.fontname = line + data.metadata.fullname = line + end + + P("ItalicAngle") * fontdata * number / function(data,angle) + data.metadata.italicangle = angle + end + + P("IsFixedPitch") * fontdata * name / function(data,pitch) + data.metadata.monospaced = toboolean(pitch,true) + end + + P("CharWidth") * fontdata * number / function(data,width) + data.metadata.charwidth = width + end + + P("XHeight") * fontdata * number / function(data,xheight) + data.metadata.xheight = xheight + end + + P("Descender") * fontdata * number / function(data,descender) + data.metadata.descender = descender + end + + P("Ascender") * fontdata * number / function(data,ascender) + data.metadata.ascender = ascender + end + + P("Comment") * spacing * ( P(false) + + (fontdata * C("DESIGNSIZE") * number * rest) / set_1 -- 1 + + (fontdata * C("TFM designsize") * number * rest) / set_1 + + (fontdata * C("DesignSize") * number * rest) / set_1 + + (fontdata * C("CODINGSCHEME") * words * rest) / set_1 -- + + (fontdata * C("CHECKSUM") * number * words * rest) / set_1 -- 2 + + (fontdata * C("SPACE") * number * plus * minus * rest) / set_3 -- 3 4 5 + + (fontdata * C("QUAD") * number * rest) / set_1 -- 6 + + (fontdata * C("EXTRASPACE") * number * rest) / set_1 -- 7 + + (fontdata * C("NUM") * number * number * number * rest) / set_3 -- 8 9 10 + + (fontdata * C("DENOM") * number * number * rest) / set_2 -- 11 12 + + (fontdata * C("SUP") * number * number * number * rest) / set_3 -- 13 14 15 + + (fontdata * C("SUB") * number * number * rest) / set_2 -- 16 17 + + (fontdata * C("SUPDROP") * number * rest) / set_1 -- 18 + + (fontdata * C("SUBDROP") * number * rest) / set_1 -- 19 + + (fontdata * C("DELIM") * number * number * rest) / set_2 -- 20 21 + + (fontdata * C("AXISHEIGHT") * number * rest) / set_1 -- 22 + ) + + local parser = ( P("StartFontMetrics") / start ) + * ( p_charmetrics + p_kernpairs + p_parameters + (1-P("EndFontMetrics")) )^0 + * ( P("EndFontMetrics") / stop ) + + readafm = function(filename) + local ok, afmblob, size = resolvers.loadbinfile(filename) -- has logging + if ok and afmblob then + local data = { + resources = { + filename = resolvers.unresolve(filename), + version = afm.version, + creator = "context mkiv", + }, + properties = { + hasitalics = false, + }, + goodies = { + }, + metadata = { + filename = file.removesuffix(file.basename(filename)) + }, + characters = { + -- a temporary store + }, + descriptions = { + -- the final store + }, + } if trace_loading then - report_afm("loading kern pairs") + report_afm("parsing afm file %a",filename) end - get_kernpairs(data,kernpairs) - break - end - for version, fontmetrics in gmatch(afmblob,"StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics") do + lpegmatch(parser,afmblob,1,data) + return data + else if trace_loading then - report_afm("loading variables") + report_afm("no valid afm file %a",filename) end - data.afmversion = version - get_variables(data,fontmetrics) - data.fontdimens = scan_comment(fontmetrics) -- todo: all lpeg, no time now - break - end - return data - else - if trace_loading then - report_afm("no valid afm file %a",filename) + return nil end - return nil end + end --[[ldx-- @@ -929,11 +936,31 @@ local function copytotfm(data) end -- end - local fd = data.fontdimens - if fd and fd[8] and fd[9] and fd[10] then -- math - for k,v in next, fd do - parameters[k] = v - end + -- + if metadata.sup then + local dummy = { 0, 0, 0 } + parameters[ 1] = metadata.designsize or 0 + parameters[ 2] = metadata.checksum or 0 + parameters[ 3], + parameters[ 4], + parameters[ 5] = unpack(metadata.space or dummy) + parameters[ 6] = metadata.quad or 0 + parameters[ 7] = metadata.extraspace or 0 + parameters[ 8], + parameters[ 9], + parameters[10] = unpack(metadata.num or dummy) + parameters[11], + parameters[12] = unpack(metadata.denom or dummy) + parameters[13], + parameters[14], + parameters[15] = unpack(metadata.sup or dummy) + parameters[16], + parameters[17] = unpack(metadata.sub or dummy) + parameters[18] = metadata.supdrop or 0 + parameters[19] = metadata.subdrop or 0 + parameters[20], + parameters[21] = unpack(metadata.delim or dummy) + parameters[22] = metadata.axisheight or 0 end -- parameters.designsize = (metadata.designsize or 10)*65536 diff --git a/tex/context/base/mkiv/grph-inc.lua b/tex/context/base/mkiv/grph-inc.lua index cf4a70269..d13d45a29 100644 --- a/tex/context/base/mkiv/grph-inc.lua +++ b/tex/context/base/mkiv/grph-inc.lua @@ -2117,3 +2117,34 @@ implement { -- end -- -- \externalfigure[t:/sources/hakker1b.tiff] + +-- something relatively new: + +local registered = { } + +interfaces.implement { + name = "figure_register_page", + arguments = { "string", "string", "string" }, + actions = function(a,b,c) + registered[#registered+1] = { a, b, c } + context(#registered) + end +} + +interfaces.implement { + name = "figure_nof_registered_pages", + actions = function() + context(#registered) + end +} + +interfaces.implement { + name = "figure_flush_registered_pages", + arguments = "string", + actions = function(n) + local f = registered[tonumber(n)] + if f then + context.doexternalfigurerepeat(f[1],f[2],f[3],n) + end + end +} diff --git a/tex/context/base/mkiv/grph-inc.mkiv b/tex/context/base/mkiv/grph-inc.mkiv index deba82c58..de5a2227a 100644 --- a/tex/context/base/mkiv/grph-inc.mkiv +++ b/tex/context/base/mkiv/grph-inc.mkiv @@ -99,6 +99,7 @@ \c!ymax =24, \c!xmax =, \c!align =\v!none, % New, for Tacos extremely large graphics. + \c!crossreference =\v!no, ] %D Defining figures. @@ -305,9 +306,10 @@ % \the\t_grph_include_local_settings % - \edef\p_width {\externalfigureparameter\c!width}% - \edef\p_height{\externalfigureparameter\c!height}% - \edef\p_label {\externalfigureparameter\c!label}% + \edef\p_width {\externalfigureparameter\c!width}% + \edef\p_height {\externalfigureparameter\c!height}% + \edef\p_label {\externalfigureparameter\c!label}% + \edef\p_reference{\externalfigureparameter\c!reference}% % \dostarttagged\t!image\empty \clf_figure_push @@ -361,10 +363,81 @@ \fi \clf_figure_pop \dotagfigure - \naturalvbox attr \imageattribute 2 {\box\foundexternalfigure}% + % + \scratchcounter\zerocount + \edef\p_crossreference{\externalfigureparameter\c!crossreference}% + \iflocation\iftrialtypesetting\else + \ifx\p_crossreference\empty + % nothing + \else\ifx\p_crossreference\v!no + % nothing + \else\ifx\p_crossreference\v!yes + \ifassignment + \scratchcounter\clf_figure_register_page{#1}{}{#2}\relax + \else + \scratchcounter\clf_figure_register_page{#1}{#2}{#3}\relax + \fi + \else + \scratchcounter-\p_crossreference % passed by repeater + \fi\fi\fi + \fi\fi + \naturalvpack + attr \imageattribute \plustwo + \ifnum\scratchcounter>\zerocount + {\strc_references_cross_forward {ex:\number \scratchcounter}{\box\foundexternalfigure}}% + \else\ifnum\scratchcounter<\zerocount + {\strc_references_cross_backward{ex:\number-\scratchcounter}{\box\foundexternalfigure}}% + \else + {\box\foundexternalfigure}% + \fi\fi + % \dostoptagged \egroup} +%D Next we provide a cross referenced scale-up mechanism: + +\def\strc_references_cross_forward#1#2% + {\begingroup + \strc_references_set_simple_internal_reference{cross:b:#1}% + \naturalhpack + attr \destinationattribute\number\lastdestinationattribute + {\naturalhpack{\strc_references_flush_destination_nodes\directgotodumbbox{#2}[cross:f:#1]}}% + \endgroup} + +\def\strc_references_cross_backward#1#2% + {\begingroup + \strc_references_set_simple_internal_reference{cross:f:#1}% + \naturalhpack + attr \destinationattribute\number\lastdestinationattribute + {\naturalhpack{\strc_references_flush_destination_nodes\directgotodumbbox{#2}[cross:b:#1]}}% + \endgroup} + +\let\doexternalfigurerepeat\gobblefourarguments % called from lua end + +\unexpanded\def\placeregisteredexternalfigures + {\dosingleempty\grph_include_place_registered} + +\unexpanded\def\grph_include_place_registered[#1]% + {\page + \begingroup + \unexpanded\def\doexternalfigurerepeat{\grph_include_place_registered_indeed{#1}}% + \dorecurse\clf_figure_nof_registered_pages + {\page + \clf_figure_flush_registered_pages\recurselevel + \page}% + \endgroup + \page} + +\unexpanded\def\grph_include_place_registered_indeed#1#2#3#4#5% called from lua end + {\grph_include_place[#2][#3][#4,% + \c!hfactor=,\c!wfactor=,\c!factor=,% + \c!maxwidth=,\c!maxheight=,% + \c!xscale=,\c!yscale=,\c!scale=,% + \c!sx=,\c!sy=,\c!s=,% + \c!width=,\c!height=,% + \c!crossreference=#5,% + #1]} + %D Scaling: \let\dowithfigure\relax % name might change (into a proper hook) diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index 99e0eb604..681144816 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -7362,6 +7362,9 @@ return { ["pe"]="criterium", ["ro"]="criteriu", }, + ["crossreference"]={ + ["en"]="crossreference", + }, ["cropoffset"]={ ["en"]="cropoffset", }, diff --git a/tex/context/base/mkiv/pack-rul.mkiv b/tex/context/base/mkiv/pack-rul.mkiv index c8288586f..635863302 100644 --- a/tex/context/base/mkiv/pack-rul.mkiv +++ b/tex/context/base/mkiv/pack-rul.mkiv @@ -2727,6 +2727,8 @@ {\pack_framed_text_start_continue\empty{#1}} {\pack_framed_text_start_continue{#1}{#2}}} +% todo: sort out first/lastline ht/dp + \def\pack_framed_text_start_continue#1#2% {\setupframedtexts[\currentframedtext][#2]% \doifsomething{#1}{\setframedtextparameter\c!location{#1}}% does not listen to #3 @@ -2739,10 +2741,10 @@ \hsize\localhsize % \insidefloattrue % ? better \usebodyfontparameter\framedtextparameter + % \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% to be used \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \let\\=\endgraf - \framedtextparameter\c!inner % oud spul \edef\p_framed_text_depthcorrection{\framedtextparameter\c!depthcorrection}% \ifx\p_framed_text_depthcorrection\v!on \pack_framed_text_start_depth_correction @@ -2753,6 +2755,7 @@ \doinhibitblank \useindentingparameter\framedtextparameter \useframedtextstyleandcolor\c!style\c!color + \framedtextparameter\c!inner \ignorespaces} % testcase 1: @@ -2855,17 +2858,26 @@ \def\pack_framed_text_start_direct[#1]% {\usebodyfontparameter\framedtextparameter - \letframedtextparameter\c!strut\v!no \iffirstargument \setupcurrentframedtext[#1]% \fi + \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% + \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \blank[\v!disable]% \let\\=\endgraf - \framedtextparameter\c!inner \useframedtextstyleandcolor\c!style\c!color + \vskip-\strutdp % brrr why is this needed ... needs to be sorted out, see testcase 1 + \framedtextparameter\c!inner + \ifx\p_framed_text_strut\v!no + \let\pack_framed_strut\relax + \else + \let\pack_framed_strut\strut + \fi \bgroup \aftergroup\pack_framed_text_stop_direct + \afterassignment\ignorespaces + \afterassignment\pack_framed_strut \let\next=} \def\pack_framed_text_stop_direct diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv index bbe53fb2a..e591d85f6 100644 --- a/tex/context/base/mkiv/spac-ver.mkiv +++ b/tex/context/base/mkiv/spac-ver.mkiv @@ -1139,7 +1139,7 @@ % when enabled, sigstruts will remove themselves if nothing % goes inbetween -%D For poractical reasons we define some boundary characters here. +%D For practical reasons we define some boundary characters here. \unexpanded\def\leftboundary {\protrusionboundary\plusone} \unexpanded\def\rightboundary {\protrusionboundary\plustwo} diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex bc8c201e7..ce4ce0520 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex 5260d86f0..c3f475e42 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml index e8df8ee30..ce8e41016 100644 --- a/tex/context/interface/mkii/keys-cs.xml +++ b/tex/context/interface/mkii/keys-cs.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='zpusobpropojeni'/> <cd:constant name='criterium' value='kriterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='aktualni'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkii/keys-de.xml b/tex/context/interface/mkii/keys-de.xml index 94314bf61..5c7ecc651 100644 --- a/tex/context/interface/mkii/keys-de.xml +++ b/tex/context/interface/mkii/keys-de.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='verkopplungsart'/> <cd:constant name='criterium' value='kriterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='aktuell'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml index b0cb6fa2c..621cbd763 100644 --- a/tex/context/interface/mkii/keys-en.xml +++ b/tex/context/interface/mkii/keys-en.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='couplingway'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='current'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkii/keys-fr.xml b/tex/context/interface/mkii/keys-fr.xml index dae2ecfe0..301f94628 100644 --- a/tex/context/interface/mkii/keys-fr.xml +++ b/tex/context/interface/mkii/keys-fr.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modecouplage'/> <cd:constant name='criterium' value='critere'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='courant'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkii/keys-it.xml b/tex/context/interface/mkii/keys-it.xml index 0d661c5e1..458acd5c1 100644 --- a/tex/context/interface/mkii/keys-it.xml +++ b/tex/context/interface/mkii/keys-it.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modoaccoppiamento'/> <cd:constant name='criterium' value='criterio'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='corrente'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkii/keys-nl.xml b/tex/context/interface/mkii/keys-nl.xml index d9f192ec5..5e214c8bb 100644 --- a/tex/context/interface/mkii/keys-nl.xml +++ b/tex/context/interface/mkii/keys-nl.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='koppelwijze'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='huidige'/> <cd:constant name='cutspace' value='snijwit'/> diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml index ec120ee06..1afb96c9a 100644 --- a/tex/context/interface/mkii/keys-pe.xml +++ b/tex/context/interface/mkii/keys-pe.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='روشتزویج'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='جاری'/> <cd:constant name='cutspace' value='فضایبرش'/> diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index 71fa22e92..8a7707a2d 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modcuplare'/> <cd:constant name='criterium' value='criteriu'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='curent'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf Binary files differindex 525127f6f..99c3cce1f 100644 --- a/tex/context/interface/mkiv/i-context.pdf +++ b/tex/context/interface/mkiv/i-context.pdf diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf Binary files differindex cc920a21b..5dc85d2f5 100644 --- a/tex/context/interface/mkiv/i-readme.pdf +++ b/tex/context/interface/mkiv/i-readme.pdf diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index b84893719..183135443 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 05/10/16 23:43:55 +-- merge date : 05/12/16 23:49:15 do -- begin closure to overcome local limits and interference @@ -22287,116 +22287,13 @@ local otfreaders=otf.readers local otfenhancers=otf.enhancers local afmfeatures=constructors.newfeatures("afm") local registerafmfeature=afmfeatures.register -afm.version=1.507 +afm.version=1.510 afm.cache=containers.define("fonts","afm",afm.version,true) afm.autoprefixed=true afm.helpdata={} afm.syncspace=true local overloads=fonts.mappings.overloads local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes -local comment=P("Comment") -local spacing=patterns.spacer -local lineend=patterns.newline -local words=spacing*C((1-lineend)^1) -local number=spacing*C((R("09")+S("."))^1)/tonumber*spacing^0 -local data=Carg(1) -local plus=P("plus")*number -local minus=P("minus")*number -local pattern=( - comment*spacing*( - data*( - ("CODINGSCHEME"*words )/function(t,a) end+("DESIGNSIZE"*number*words )/function(t,a) t[ 1]=a end+("CHECKSUM"*number*words )/function(t,a) t[ 2]=a end+("SPACE"*number*plus*minus )/function(t,a,b,c) t[ 3],t[ 4],t[ 5]=a,b,c end+("QUAD"*number )/function(t,a) t[ 6]=a end+("EXTRASPACE"*number )/function(t,a) t[ 7]=a end+("NUM"*number*number*number )/function(t,a,b,c) t[ 8],t[ 9],t[10]=a,b,c end+("DENOM"*number*number )/function(t,a,b) t[11],t[12]=a,b end+("SUP"*number*number*number )/function(t,a,b,c) t[13],t[14],t[15]=a,b,c end+("SUB"*number*number )/function(t,a,b) t[16],t[17]=a,b end+("SUPDROP"*number )/function(t,a) t[18]=a end+("SUBDROP"*number )/function(t,a) t[19]=a end+("DELIM"*number*number )/function(t,a,b) t[20],t[21]=a,b end+("AXISHEIGHT"*number )/function(t,a) t[22]=a end - )+(1-lineend)^0 - )+(1-comment)^1 -)^0 -local function scan_comment(str) - local fd={} - lpegmatch(pattern,str,1,fd) - return fd -end -local keys={ - FontName=function(data,line) - data.metadata.fontname=strip(line) - data.metadata.fullname=strip(line) - end, - ItalicAngle=function(data,line) - data.metadata.italicangle=tonumber(line) - end, - IsFixedPitch=function(data,line) - data.metadata.monospaced=toboolean(line,true) - end, - CharWidth=function(data,line) - data.metadata.charwidth=tonumber(line) - end, - XHeight=function(data,line) - data.metadata.xheight=tonumber(line) - end, - Descender=function(data,line) - data.metadata.descender=tonumber (line) - end, - Ascender=function(data,line) - data.metadata.ascender=tonumber (line) - end, - Comment=function(data,line) - line=lower(line) - local designsize=match(line,"designsize[^%d]*(%d+)") - if designsize then data.metadata.designsize=tonumber(designsize) end - end, -} -local function get_charmetrics(data,charmetrics,vector) - local characters=data.characters - local chr,ind={},0 - for k,v in gmatch(charmetrics,"([%a]+) +(.-) *;") do - if k=='C' then - v=tonumber(v) - if v<0 then - ind=ind+1 - else - ind=v - end - chr={ - index=ind - } - elseif k=='WX' then - chr.width=tonumber(v) - elseif k=='N' then - characters[v]=chr - elseif k=='B' then - local llx,lly,urx,ury=match(v,"^ *(.-) +(.-) +(.-) +(.-)$") - chr.boundingbox={ tonumber(llx),tonumber(lly),tonumber(urx),tonumber(ury) } - elseif k=='L' then - local plus,becomes=match(v,"^(.-) +(.-)$") - local ligatures=chr.ligatures - if ligatures then - ligatures[plus]=becomes - else - chr.ligatures={ [plus]=becomes } - end - end - end -end -local function get_kernpairs(data,kernpairs) - local characters=data.characters - for one,two,value in gmatch(kernpairs,"KPX +(.-) +(.-) +(.-)\n") do - local chr=characters[one] - if chr then - local kerns=chr.kerns - if kerns then - kerns[two]=tonumber(value) - else - chr.kerns={ [two]=tonumber(value) } - end - end - end -end -local function get_variables(data,fontmetrics) - for key,rest in gmatch(fontmetrics,"(%a+) *(.-)[\n\r]") do - local keyhandler=keys[key] - if keyhandler then - keyhandler(data,rest) - end - end -end local get_indexes do local n,m @@ -22482,56 +22379,138 @@ do end end end -local function readafm(filename) - local ok,afmblob,size=resolvers.loadbinfile(filename) - if ok and afmblob then - local data={ - resources={ - filename=resolvers.unresolve(filename), - version=afm.version, - creator="context mkiv", - }, - properties={ - hasitalics=false, - }, - goodies={}, - metadata={ - filename=file.removesuffix(file.basename(filename)) - }, - characters={ - }, - descriptions={ - }, - } - for charmetrics in gmatch(afmblob,"StartCharMetrics(.-)EndCharMetrics") do - if trace_loading then - report_afm("loading char metrics") +local readafm +do + local spacing=patterns.spacer + local lineend=patterns.newline + local number=spacing*(R("09")+S("."))^1/tonumber + local name=spacing*C((1-spacing)^1) + local words=spacing*(1-lineend)^1/strip + local rest=(1-lineend)^0 + local fontdata=Carg(1) + local semicolon=spacing*P(";") + local plus=P("plus")*number + local minus=P("minus")*number + local function addkernpair(data,one,two,value) + local chr=data.characters[one] + if chr then + local kerns=chr.kerns + if kerns then + kerns[two]=tonumber(value) + else + chr.kerns={ [two]=tonumber(value) } end - get_charmetrics(data,charmetrics,vector) - break end - for kernpairs in gmatch(afmblob,"StartKernPairs(.-)EndKernPairs") do + end + local p_kernpair=(fontdata*P("KPX")*name*name*number)/addkernpair + local chr=false + local ind=0 + local function start() + ind=0 + chr={} + end + local function stop() + ind=0 + chr=false + end + local function setindex(i) + if i<0 then + ind=ind+1 + else + ind=i + end + chr={ + index=ind + } + end + local function setwidth(width) + chr.width=width + end + local function setname(data,name) + data.characters[name]=chr + end + local function setboundingbox(boundingbox) + chr.boundingbox=boundingbox + end + local function setligature(plus,becomes) + local ligatures=chr.ligatures + if ligatures then + ligatures[plus]=becomes + else + chr.ligatures={ [plus]=becomes } + end + end + local p_charmetric=(( + P("C")*number/setindex+P("WX")*number/setwidth+P("N")*fontdata*name/setname+P("B")*Ct((number)^4)/setboundingbox+P("L")*(name)^2/setligature + )*semicolon )^1 + local p_charmetrics=P("StartCharMetrics")*number*(p_charmetric+(1-P("EndCharMetrics")))^0*P("EndCharMetrics") + local p_kernpairs=P("StartKernPairs")*number*(p_kernpair+(1-P("EndKernPairs")) )^0*P("EndKernPairs") + local function set_1(data,key,a) data.metadata[lower(key)]=a end + local function set_2(data,key,a,b) data.metadata[lower(key)]={ a,b } end + local function set_3(data,key,a,b,c) data.metadata[lower(key)]={ a,b,c } end + local p_parameters=P(false)+P("FontName")*fontdata*words/function(data,line) + data.metadata.fontname=line + data.metadata.fullname=line + end+P("ItalicAngle")*fontdata*number/function(data,angle) + data.metadata.italicangle=angle + end+P("IsFixedPitch")*fontdata*name/function(data,pitch) + data.metadata.monospaced=toboolean(pitch,true) + end+P("CharWidth")*fontdata*number/function(data,width) + data.metadata.charwidth=width + end+P("XHeight")*fontdata*number/function(data,xheight) + data.metadata.xheight=xheight + end+P("Descender")*fontdata*number/function(data,descender) + data.metadata.descender=descender + end+P("Ascender")*fontdata*number/function(data,ascender) + data.metadata.ascender=ascender + end+P("Comment")*spacing*(P(false)+(fontdata*C("DESIGNSIZE")*number*rest)/set_1 ++(fontdata*C("TFM designsize")*number*rest)/set_1+(fontdata*C("DesignSize")*number*rest)/set_1+(fontdata*C("CODINGSCHEME")*words*rest)/set_1 ++(fontdata*C("CHECKSUM")*number*words*rest)/set_1 ++(fontdata*C("SPACE")*number*plus*minus*rest)/set_3 ++(fontdata*C("QUAD")*number*rest)/set_1 ++(fontdata*C("EXTRASPACE")*number*rest)/set_1 ++(fontdata*C("NUM")*number*number*number*rest)/set_3 ++(fontdata*C("DENOM")*number*number*rest)/set_2 ++(fontdata*C("SUP")*number*number*number*rest)/set_3 ++(fontdata*C("SUB")*number*number*rest)/set_2 ++(fontdata*C("SUPDROP")*number*rest)/set_1 ++(fontdata*C("SUBDROP")*number*rest)/set_1 ++(fontdata*C("DELIM")*number*number*rest)/set_2 ++(fontdata*C("AXISHEIGHT")*number*rest)/set_1 + ) + local parser=(P("StartFontMetrics")/start )*(p_charmetrics+p_kernpairs+p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop ) + readafm=function(filename) + local ok,afmblob,size=resolvers.loadbinfile(filename) + if ok and afmblob then + local data={ + resources={ + filename=resolvers.unresolve(filename), + version=afm.version, + creator="context mkiv", + }, + properties={ + hasitalics=false, + }, + goodies={}, + metadata={ + filename=file.removesuffix(file.basename(filename)) + }, + characters={ + }, + descriptions={ + }, + } if trace_loading then - report_afm("loading kern pairs") + report_afm("parsing afm file %a",filename) end - get_kernpairs(data,kernpairs) - break - end - for version,fontmetrics in gmatch(afmblob,"StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics") do + lpegmatch(parser,afmblob,1,data) + return data + else if trace_loading then - report_afm("loading variables") + report_afm("no valid afm file %a",filename) end - data.afmversion=version - get_variables(data,fontmetrics) - data.fontdimens=scan_comment(fontmetrics) - break + return nil end - return data - else - if trace_loading then - report_afm("no valid afm file %a",filename) - end - return nil end end local enhancers={ @@ -22975,11 +22954,30 @@ local function copytotfm(data) end end end - local fd=data.fontdimens - if fd and fd[8] and fd[9] and fd[10] then - for k,v in next,fd do - parameters[k]=v - end + if metadata.sup then + local dummy={ 0,0,0 } + parameters[ 1]=metadata.designsize or 0 + parameters[ 2]=metadata.checksum or 0 + parameters[ 3], + parameters[ 4], + parameters[ 5]=unpack(metadata.space or dummy) + parameters[ 6]=metadata.quad or 0 + parameters[ 7]=metadata.extraspace or 0 + parameters[ 8], + parameters[ 9], + parameters[10]=unpack(metadata.num or dummy) + parameters[11], + parameters[12]=unpack(metadata.denom or dummy) + parameters[13], + parameters[14], + parameters[15]=unpack(metadata.sup or dummy) + parameters[16], + parameters[17]=unpack(metadata.sub or dummy) + parameters[18]=metadata.supdrop or 0 + parameters[19]=metadata.subdrop or 0 + parameters[20], + parameters[21]=unpack(metadata.delim or dummy) + parameters[22]=metadata.axisheight or 0 end parameters.designsize=(metadata.designsize or 10)*65536 parameters.ascender=abs(metadata.ascender or 0) |