From fe714093ebb95e4a870282782e2124cff2e546e5 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 10 Dec 2021 12:12:32 +0100 Subject: 2021-12-10 11:31:00 --- doc/context/scripts/mkiv/context.html | 4 + doc/context/scripts/mkiv/context.man | 9 + doc/context/scripts/mkiv/context.xml | 11 + doc/context/scripts/mkiv/mtx-context.html | 4 + doc/context/scripts/mkiv/mtx-context.man | 9 + doc/context/scripts/mkiv/mtx-context.xml | 11 + doc/context/scripts/mkiv/mtx-pdf.html | 53 +++ doc/context/scripts/mkiv/mtx-pdf.man | 39 ++ doc/context/scripts/mkiv/mtx-pdf.xml | 25 + .../general/manuals/luametatex/luametatex.tex | 10 + scripts/context/lua/mtx-context.lua | 8 + scripts/context/lua/mtx-context.xml | 11 + scripts/context/lua/mtxrun.lua | 6 +- scripts/context/stubs/mswin/mtxrun.lua | 6 +- scripts/context/stubs/unix/mtxrun | 6 +- scripts/context/stubs/win64/mtxrun.lua | 6 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-de.mkii | 30 ++ tex/context/base/mkiv/char-def.lua | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/libs-ini.lua | 1 - tex/context/base/mkiv/status-files.pdf | Bin 24730 -> 24770 bytes tex/context/base/mkiv/status-lua.pdf | Bin 257156 -> 257675 bytes tex/context/base/mkxl/back-imp-pdf.mkxl | 2 +- tex/context/base/mkxl/back-imp-pdp.lmt | 14 +- tex/context/base/mkxl/back-ini.lmt | 6 + tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 4 +- tex/context/base/mkxl/lpdf-ini.lmt | 35 +- tex/context/base/mkxl/lpdf-lmt.lmt | 520 +++++++++++++++++---- tex/context/base/mkxl/lpdf-mis.lmt | 2 +- tex/context/base/mkxl/node-rul.mkxl | 41 +- .../fonts/mkiv/type-imp-newcomputermodern.mkiv | 4 +- tex/context/interface/mkii/keys-de.xml | 30 ++ tex/context/modules/mkxl/m-circuitikz.mkxl | 137 ++++++ tex/context/modules/mkxl/m-tikz.mkxl | 87 ++-- tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 39 files changed, 954 insertions(+), 191 deletions(-) create mode 100644 doc/context/scripts/mkiv/mtx-pdf.html create mode 100644 doc/context/scripts/mkiv/mtx-pdf.man create mode 100644 doc/context/scripts/mkiv/mtx-pdf.xml create mode 100644 tex/context/modules/mkxl/m-circuitikz.mkxl diff --git a/doc/context/scripts/mkiv/context.html b/doc/context/scripts/mkiv/context.html index 15fa7985c..567b9b165 100644 --- a/doc/context/scripts/mkiv/context.html +++ b/doc/context/scripts/mkiv/context.html @@ -115,6 +115,10 @@ --extra=nameprocess extra (mtx-context-... in distribution) --extrasshow extras + + --ownerpassword + --userpassword + --permissions special --pdftexprocess file with texexec using pdftex diff --git a/doc/context/scripts/mkiv/context.man b/doc/context/scripts/mkiv/context.man index 93cd877be..7f6e97fda 100644 --- a/doc/context/scripts/mkiv/context.man +++ b/doc/context/scripts/mkiv/context.man @@ -188,6 +188,15 @@ process extra (mtx-context-... in distribution) .TP .B --extras show extras +.TP +.B --ownerpassword + +.TP +.B --userpassword + +.TP +.B --permissions + .SH OPTIONS: SPECIAL .TP .B --pdftex diff --git a/doc/context/scripts/mkiv/context.xml b/doc/context/scripts/mkiv/context.xml index cc13bf7df..c2e7c1c0b 100644 --- a/doc/context/scripts/mkiv/context.xml +++ b/doc/context/scripts/mkiv/context.xml @@ -223,6 +223,17 @@ show extras + + + encrypt the (pdf) file using this master password + + + use an additional password for opening the document + + + list of: print, modify, extract, add, fillin, assemble, quality + + diff --git a/doc/context/scripts/mkiv/mtx-context.html b/doc/context/scripts/mkiv/mtx-context.html index 15fa7985c..567b9b165 100644 --- a/doc/context/scripts/mkiv/mtx-context.html +++ b/doc/context/scripts/mkiv/mtx-context.html @@ -115,6 +115,10 @@ --extra=nameprocess extra (mtx-context-... in distribution) --extrasshow extras + + --ownerpassword + --userpassword + --permissions special --pdftexprocess file with texexec using pdftex diff --git a/doc/context/scripts/mkiv/mtx-context.man b/doc/context/scripts/mkiv/mtx-context.man index 93cd877be..7f6e97fda 100644 --- a/doc/context/scripts/mkiv/mtx-context.man +++ b/doc/context/scripts/mkiv/mtx-context.man @@ -188,6 +188,15 @@ process extra (mtx-context-... in distribution) .TP .B --extras show extras +.TP +.B --ownerpassword + +.TP +.B --userpassword + +.TP +.B --permissions + .SH OPTIONS: SPECIAL .TP .B --pdftex diff --git a/doc/context/scripts/mkiv/mtx-context.xml b/doc/context/scripts/mkiv/mtx-context.xml index cc13bf7df..c2e7c1c0b 100644 --- a/doc/context/scripts/mkiv/mtx-context.xml +++ b/doc/context/scripts/mkiv/mtx-context.xml @@ -223,6 +223,17 @@ show extras + + + encrypt the (pdf) file using this master password + + + use an additional password for opening the document + + + list of: print, modify, extract, add, fillin, assemble, quality + + diff --git a/doc/context/scripts/mkiv/mtx-pdf.html b/doc/context/scripts/mkiv/mtx-pdf.html new file mode 100644 index 000000000..2932b942c --- /dev/null +++ b/doc/context/scripts/mkiv/mtx-pdf.html @@ -0,0 +1,53 @@ + + + + + + + + + + + ConTeXt PDF Helpers 0.10 + + + + + +
+
ConTeXt PDF Helpers 0.10
+
+
+
+
wiki: http://contextgarden.net | mail: ntg-context@ntg.nl | website: http://www.pragma-ade.nl
+
+
+
+ +
+
+

Command line options

+ + + + + + + + + +
flagvaluedescription
--infoshow some info about the given file
--metadatashow metadata xml blob
--prettyreplace newlines in metadata
--fontsshow used fonts (--detail)
--objectshow object"/>
+
+
+
+ + diff --git a/doc/context/scripts/mkiv/mtx-pdf.man b/doc/context/scripts/mkiv/mtx-pdf.man new file mode 100644 index 000000000..ea74f2aa1 --- /dev/null +++ b/doc/context/scripts/mkiv/mtx-pdf.man @@ -0,0 +1,39 @@ +.TH "mtx-pdf" "1" "01-01-2021" "version 0.10" "ConTeXt PDF Helpers" +.SH NAME + mtx-pdf - ConTeXt PDF Helpers +.SH SYNOPSIS +.B mtxrun --script pdf [ +.I OPTIONS ... +.B ] [ +.I FILENAMES +.B ] +.SH DESCRIPTION +.B ConTeXt PDF Helpers +.SH OPTIONS +.TP +.B --info +show some info about the given file +.TP +.B --metadata +show metadata xml blob +.TP +.B --pretty +replace newlines in metadata +.TP +.B --fonts +show used fonts (--detail) +.TP +.B --object +show object"/> +.SH AUTHOR +More information about ConTeXt and the tools that come with it can be found at: + + +.B "maillist:" +ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context + +.B "webpage:" +http://www.pragma-ade.nl / http://tex.aanhet.net + +.B "wiki:" +http://contextgarden.net diff --git a/doc/context/scripts/mkiv/mtx-pdf.xml b/doc/context/scripts/mkiv/mtx-pdf.xml new file mode 100644 index 000000000..08b04d85e --- /dev/null +++ b/doc/context/scripts/mkiv/mtx-pdf.xml @@ -0,0 +1,25 @@ + + + + mtx-pdf + ConTeXt PDF Helpers + 0.10 + + + + + show some info about the given file + show metadata xml blob + replace newlines in metadata + show used fonts ( + show object"/> + + + mtxrun --script pdf --info foo.pdf + mtxrun --script pdf --metadata foo.pdf + mtxrun --script pdf --metadata --pretty foo.pdf + mtxrun --script pdf --stream=4 foo.pdf + + + + diff --git a/doc/context/sources/general/manuals/luametatex/luametatex.tex b/doc/context/sources/general/manuals/luametatex/luametatex.tex index 9958db10a..69bfc9509 100644 --- a/doc/context/sources/general/manuals/luametatex/luametatex.tex +++ b/doc/context/sources/general/manuals/luametatex/luametatex.tex @@ -102,6 +102,16 @@ \enableexperiments[fonts.compact] % \enabledirectives[fonts.injections.method=advance] % tricky ... not all xoffsets are advance robust +% This is only for testing, use the command line (or banner line) instead. +% +% \startluacode +% lpdf.setencryption { +% ownerpassword = "password", +% userpassword = "", +% permissions = "print,quality" +% } +% \stopluacode + \pushoverloadmode \unprotect % test code \protect \popoverloadmode diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index 5a67f4f2a..125750c26 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -792,6 +792,10 @@ function scripts.context.run(ctxdata,filename) local trackers = combine("trackers") local experiments = combine("experiments") -- + local ownerpassword = environment.ownerpassword or analysis.ownerpassword + local userpassword = environment.userpassword or analysis.userpassword + local permissions = environment.permissions or analysis.permissions + -- if formatfile and scriptfile then local suffix = validstring(getargument("suffix")) local resultname = validstring(getargument("result")) @@ -858,6 +862,10 @@ function scripts.context.run(ctxdata,filename) export = a_export and true or nil, nocompression = a_nocompression and true or nil, texmfbinpath = os.selfdir, + -- + ownerpassword = ownerpassword, + userpassword = userpassword, + permissions = permissions, } -- for k, v in next, environment.arguments do diff --git a/scripts/context/lua/mtx-context.xml b/scripts/context/lua/mtx-context.xml index cc13bf7df..c2e7c1c0b 100644 --- a/scripts/context/lua/mtx-context.xml +++ b/scripts/context/lua/mtx-context.xml @@ -223,6 +223,17 @@ show extras
+ + + encrypt the (pdf) file using this master password + + + use an additional password for opening the document + + + list of: print, modify, extract, add, fillin, assemble, quality + +
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index a75c6488c..1a1bc2734 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -25393,7 +25393,7 @@ do -- create closure to overcome 200 locals limit package.loaded["libs-ini"] = package.loaded["libs-ini"] or true --- original size: 6525, stripped down to: 4064 +-- original size: 6524, stripped down to: 4064 if not modules then modules={} end modules ['libs-ini']={ version=1.001, @@ -25948,8 +25948,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029804 --- stripped bytes : 405639 +-- original bytes : 1029803 +-- stripped bytes : 405638 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index a75c6488c..1a1bc2734 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -25393,7 +25393,7 @@ do -- create closure to overcome 200 locals limit package.loaded["libs-ini"] = package.loaded["libs-ini"] or true --- original size: 6525, stripped down to: 4064 +-- original size: 6524, stripped down to: 4064 if not modules then modules={} end modules ['libs-ini']={ version=1.001, @@ -25948,8 +25948,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029804 --- stripped bytes : 405639 +-- original bytes : 1029803 +-- stripped bytes : 405638 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index a75c6488c..1a1bc2734 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -25393,7 +25393,7 @@ do -- create closure to overcome 200 locals limit package.loaded["libs-ini"] = package.loaded["libs-ini"] or true --- original size: 6525, stripped down to: 4064 +-- original size: 6524, stripped down to: 4064 if not modules then modules={} end modules ['libs-ini']={ version=1.001, @@ -25948,8 +25948,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029804 --- stripped bytes : 405639 +-- original bytes : 1029803 +-- stripped bytes : 405638 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index a75c6488c..1a1bc2734 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -25393,7 +25393,7 @@ do -- create closure to overcome 200 locals limit package.loaded["libs-ini"] = package.loaded["libs-ini"] or true --- original size: 6525, stripped down to: 4064 +-- original size: 6524, stripped down to: 4064 if not modules then modules={} end modules ['libs-ini']={ version=1.001, @@ -25948,8 +25948,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029804 --- stripped bytes : 405639 +-- original bytes : 1029803 +-- stripped bytes : 405638 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 876eacdfc..801541637 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2021.12.03 15:17} +\newcontextversion{2021.12.10 11:29} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 48af7f8e3..2aa9cee0d 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2021.12.03 15:17} +\edef\contextversion{2021.12.10 11:29} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-de.mkii b/tex/context/base/mkii/mult-de.mkii index 60671069c..43a265056 100644 --- a/tex/context/base/mkii/mult-de.mkii +++ b/tex/context/base/mkii/mult-de.mkii @@ -79,6 +79,7 @@ \setinterfacevariable{anchor}{anchor} \setinterfacevariable{and}{und} \setinterfacevariable{answerarea}{answerarea} +\setinterfacevariable{append}{append} \setinterfacevariable{appendices}{anhaenge} \setinterfacevariable{appendix}{anhang} \setinterfacevariable{april}{april} @@ -150,6 +151,7 @@ \setinterfacevariable{commands}{befehle} \setinterfacevariable{comment}{kommentar} \setinterfacevariable{component}{komponente} +\setinterfacevariable{compress}{compress} \setinterfacevariable{compressseparator}{compressseparator} \setinterfacevariable{compressstopper}{compressstopper} \setinterfacevariable{concept}{konzept} @@ -186,6 +188,7 @@ \setinterfacevariable{enumeration}{nummerierung} \setinterfacevariable{environment}{umgebung} \setinterfacevariable{even}{gerade} +\setinterfacevariable{explicit}{explicit} \setinterfacevariable{export}{export} \setinterfacevariable{external}{extern} \setinterfacevariable{extremestretch}{extremestretch} @@ -207,6 +210,8 @@ \setinterfacevariable{fixed}{fest} \setinterfacevariable{flexible}{flexibel} \setinterfacevariable{float}{gleitobjekt} +\setinterfacevariable{flushbackward}{flushbackward} +\setinterfacevariable{flushforward}{flushforward} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} @@ -310,6 +315,7 @@ \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{linkerrand} \setinterfacevariable{leftpage}{linkerseite} +\setinterfacevariable{lefttext}{linkertext} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legende} \setinterfacevariable{less}{less} @@ -434,6 +440,7 @@ \setinterfacevariable{postscript}{postscript} \setinterfacevariable{precedingpage}{precedingpage} \setinterfacevariable{preference}{einstellung} +\setinterfacevariable{prepend}{prepend} \setinterfacevariable{preview}{vorschau} \setinterfacevariable{previous}{vorig} \setinterfacevariable{previousevenpage}{vorigegeradeseite} @@ -470,6 +477,7 @@ \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{rechterrand} \setinterfacevariable{rightpage}{rechterseite} +\setinterfacevariable{righttext}{rechtertext} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{antiqua} \setinterfacevariable{romannumerals}{roemischezahlen} @@ -1236,6 +1244,7 @@ \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} +\setinterfaceconstant{stacking}{stacking} \setinterfaceconstant{stackname}{stackname} \setinterfaceconstant{start}{start} \setinterfaceconstant{starter}{starter} @@ -1273,6 +1282,7 @@ \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{text} \setinterfaceconstant{textalign}{textalign} +\setinterfaceconstant{textalternative}{textalternative} \setinterfaceconstant{textcolor}{textfarbe} \setinterfaceconstant{textcommand}{textbefehl} \setinterfaceconstant{textdistance}{textdistance} @@ -1364,6 +1374,8 @@ \setinterfaceelement{load}{laden} \setinterfaceelement{local}{lokal} \setinterfaceelement{makeup}{umbruch} +\setinterfaceelement{namednotation}{namednotation} +\setinterfaceelement{namedtyping}{namedtyping} \setinterfaceelement{next}{folgende} \setinterfaceelement{place}{platziere} \setinterfaceelement{previous}{vorige} @@ -1532,6 +1544,7 @@ \setinterfacecommand{definereferencelist}{definierereferenzliste} \setinterfacecommand{defineregister}{definiereregister} \setinterfacecommand{definerule}{definerule} +\setinterfacecommand{definesavebuffer}{startsavebuffer} \setinterfacecommand{definesection}{definiereabschnitt} \setinterfacecommand{definesectionblock}{definiereabschnittsblock} \setinterfacecommand{definesorting}{definieresortieren} @@ -1708,6 +1721,9 @@ \setinterfacecommand{moveformula}{moveformula} \setinterfacecommand{moveongrid}{amgitterneuausrichten} \setinterfacecommand{movesidefloat}{movesidefloat} +\setinterfacecommand{namedconstruction}{namedconstruction} +\setinterfacecommand{nameddescription}{nameddescription} +\setinterfacecommand{namedenumeration}{namedenumeration} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{keindimension} \setinterfacecommand{noheaderandfooterlines}{keinekopfundfusszeilen} @@ -2079,6 +2095,13 @@ \setinterfacecommand{startmakeup}{startumbruch} \setinterfacecommand{startmarginblock}{startmarginalblock} \setinterfacecommand{startmarginrule}{startmarginallinie} +\setinterfacecommand{startnamedconstruction}{startnamedconstruction} +\setinterfacecommand{startnameddescription}{startnameddescription} +\setinterfacecommand{startnamedenumeration}{startnamedenumeration} +\setinterfacecommand{startnamedmatrix}{startnamedmatrix} +\setinterfacecommand{startnamedsection}{startnamedsection} +\setinterfacecommand{startnamedsubformulas}{startnamedsubformulas} +\setinterfacecommand{startnamedtyping}{startnamedtyping} \setinterfacecommand{startnarrower}{startenger} \setinterfacecommand{startopposite}{startgegenueber} \setinterfacecommand{startoverlay}{startoverlay} @@ -2122,6 +2145,13 @@ \setinterfacecommand{stopmakeup}{stopumbruch} \setinterfacecommand{stopmarginblock}{stopmarginalblock} \setinterfacecommand{stopmarginrule}{stopmarginallinie} +\setinterfacecommand{stopnamedconstruction}{stopnamedconstruction} +\setinterfacecommand{stopnameddescription}{stopnameddescription} +\setinterfacecommand{stopnamedenumeration}{stopnamedenumeration} +\setinterfacecommand{stopnamedmatrix}{stopnamedmatrix} +\setinterfacecommand{stopnamedsection}{stopnamedsection} +\setinterfacecommand{stopnamedsubformulas}{stopnamedsubformulas} +\setinterfacecommand{stopnamedtyping}{stopnamedtyping} \setinterfacecommand{stopnarrower}{stopenger} \setinterfacecommand{stopopposite}{stopgegenueber} \setinterfacecommand{stopoverlay}{stopoverlay} diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index c8dac09c5..5ed2f0198 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -2449,7 +2449,7 @@ characters.data={ linebreak="al", shcode={ 0x73, 0x73 }, synonyms={ "eszett" }, - uccode={ 0x73, 0x73 }, + uccode={ 0x53, 0x53 }, unicodeslot=0xDF, }, { diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 92172d354..1b143ffb7 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.12.03 15:17} +\newcontextversion{2021.12.10 11:29} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index fa300cafd..7c32ed6d8 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.12.03 15:17} +\edef\contextversion{2021.12.10 11:29} %D Kind of special: diff --git a/tex/context/base/mkiv/libs-ini.lua b/tex/context/base/mkiv/libs-ini.lua index d3cfe634f..cf696f4e9 100644 --- a/tex/context/base/mkiv/libs-ini.lua +++ b/tex/context/base/mkiv/libs-ini.lua @@ -17,7 +17,6 @@ local find = string.find -- here we implement the resolver - local nameonly = file.nameonly local joinfile = file.join local addsuffix = file.addsuffix diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 41707d50a..a7f20d3e8 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 40471b66f..43b1fbf13 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkxl/back-imp-pdf.mkxl b/tex/context/base/mkxl/back-imp-pdf.mkxl index a9cffc6cb..f2afe61da 100644 --- a/tex/context/base/mkxl/back-imp-pdf.mkxl +++ b/tex/context/base/mkxl/back-imp-pdf.mkxl @@ -91,7 +91,7 @@ %D as one can best stick to the defaults that also adapt to specific standards. \untraced\permanent\protected\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount} -\untraced\permanent\protected\def\onlypdfobjectcompression{\clf_setpdfcompression\zerocount\plusthree} +\untraced\permanent\protected\def\onlypdfobjectcompression{\clf_setpdfcompression\plusthree\zerocount} \untraced\permanent\protected\def\maximumpdfcompression {\clf_setpdfcompression\plusnine \plusnine } \untraced\permanent\protected\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree} diff --git a/tex/context/base/mkxl/back-imp-pdp.lmt b/tex/context/base/mkxl/back-imp-pdp.lmt index c7acc82a8..4c5d61b22 100644 --- a/tex/context/base/mkxl/back-imp-pdp.lmt +++ b/tex/context/base/mkxl/back-imp-pdp.lmt @@ -33,7 +33,7 @@ local cardinal_value = values.cardinal local immediate_code = tex.flagcodes.immediate -local trace = false trackers.register("backend", function(v) trace = v end) +local trace = false trackers.register("backend.primitives", function(v) trace = v end) local report = logs.reporter("backend") local nodepool = nodes.pool @@ -213,7 +213,7 @@ local extensions = { } local function pdf_extension() - local w = scanword() + local w = scanword(false) if w then local e = extensions[w] if e then @@ -234,11 +234,11 @@ local feedbacks = { } local function pdf_feedback() - local w = scanword() + local w = scanword(false) if w then local f = feedbacks[w] if f then - f() + return f() else report("\\pdffeedback: unsupported %a",w) end @@ -259,7 +259,7 @@ local variables = { } local function pdf_variable() - local w = scanword() + local w = scanword(false) if w then local f = variables[w] if f then @@ -274,8 +274,8 @@ end -- kept (also because tikz needs including the pdftex primitives): -implement { name = "pdfextension", actions = pdf_extension, public = true, untraced = true, protected = true } -implement { name = "pdffeedback", actions = pdf_feedback, public = true, untraced = true } -- expandable / todo : value +implement { name = "pdfextension", actions = pdf_extension, public = true, untraced = true } -- , protected = true } +implement { name = "pdffeedback", actions = pdf_feedback, public = true, usage = "value", untraced = true } -- expandable / todo : value implement { name = "pdfvariable", actions = pdf_variable, public = true, untraced = true } -- expandable / todo : value implement { name = "pdfliteral", actions = pdf_literal, public = true, untraced = true, protected = true } implement { name = "pdfobj", actions = pdf_obj, public = true, usage = "value", protected = true } diff --git a/tex/context/base/mkxl/back-ini.lmt b/tex/context/base/mkxl/back-ini.lmt index fc91fb31c..110a1b3dc 100644 --- a/tex/context/base/mkxl/back-ini.lmt +++ b/tex/context/base/mkxl/back-ini.lmt @@ -139,3 +139,9 @@ backends.included = included function backends.getcallbackstate() return { count = status.late_callbacks or 0 } end + +-- + +function backends.setencryption(specification) + codeinjections.setencryption(specification) +end diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 95430abf6..bd8833c4e 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.12.03 15:17} +\newcontextversion{2021.12.10 11:29} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 914f4bfd9..81310b47a 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.12.03 15:17} +\immutable\edef\contextversion{2021.12.10 11:29} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -398,7 +398,7 @@ \loadmkxlfile{tabl-tab} % thrd-tab stripped and merged \loadmkxlfile{tabl-tbl} -\loadmkxlfile{tabl-ntb} +\doiffileelse{tabl-ntb-new.mkxl}{\loadmkxlfile{tabl-ntb-new}}{\loadmkxlfile{tabl-ntb}} \loadmkxlfile{tabl-nte} \loadmkxlfile{tabl-ltb} \loadmkxlfile{tabl-frm} diff --git a/tex/context/base/mkxl/lpdf-ini.lmt b/tex/context/base/mkxl/lpdf-ini.lmt index 6bee9e17b..9357ebe75 100644 --- a/tex/context/base/mkxl/lpdf-ini.lmt +++ b/tex/context/base/mkxl/lpdf-ini.lmt @@ -57,7 +57,7 @@ if not modules then modules = { } end modules ['lpdf-ini'] = { local setmetatable, getmetatable, type, next, tostring, tonumber, rawset = setmetatable, getmetatable, type, next, tostring, tonumber, rawset local concat = table.concat -local char, byte, format, sub = string.char, string.byte, string.format, string.sub +local char, byte, format, sub, tohex = string.char, string.byte, string.format, string.sub, string.tohex local utfchar, utfbyte, utfvalues = utf.char, utf.byte, utf.values local sind, cosd, max, min = math.sind, math.cosd, math.max, math.min local sort, sortedhash = table.sort, table.sortedhash @@ -71,7 +71,6 @@ local report_finalizing = logs.reporter("backend","finalizing") local report_blocked = logs.reporter("backend","blocked") local implement = interfaces and interfaces.implement - local context = context -- In ConTeXt MkIV we use utf8 exclusively so all strings get mapped onto a hex @@ -81,7 +80,7 @@ local context = context pdf = type(pdf) == "table" and pdf or { } local factor = number.dimenfactors.bp -local pdfbackend = backends.registered.pdf +local pdfbackend = backends and backends.registered.pdf or { } local codeinjections = pdfbackend.codeinjections local nodeinjections = pdfbackend.nodeinjections @@ -224,6 +223,8 @@ do end end + -- we could make a helper for this + local more = 0 local pattern = C(4) / function(s) -- needs checking ! @@ -1167,7 +1168,7 @@ end -- return formatters["BT /Span << /ActualText (CONTEXT) >> BDC [] TJ % t EMC ET"](code) -do +if implement then local f_actual_text_p = formatters["BT /Span << /ActualText >> BDC %s EMC ET"] local f_actual_text_b = formatters["BT /Span << /ActualText >> BDC"] @@ -1232,17 +1233,21 @@ end -- Bah, tikz uses \immediate for some reason which is probably a bug, so the usage -- will deal with that. However, we will not provide the serialization. -implement { name = "pdfbackendcurrentresources", public = true, untraced = true, actions = { lpdf.collectedresources, context } } -implement { name = "pdfbackendsetcatalog", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtocatalog } -implement { name = "pdfbackendsetinfo", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b,c) lpdf.addtoinfo(a,b,c) end } -- gets adapted -implement { name = "pdfbackendsetname", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtonames } -implement { name = "pdfbackendsetpageattribute", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopageattributes } -implement { name = "pdfbackendsetpagesattribute", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopagesattributes } -implement { name = "pdfbackendsetpageresource", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopageresources } -implement { name = "pdfbackendsetextgstate", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentextgstate (a,pdfverbose(b)) end } -implement { name = "pdfbackendsetcolorspace", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentcolorspace(a,pdfverbose(b)) end } -implement { name = "pdfbackendsetpattern", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentpattern (a,pdfverbose(b)) end } -implement { name = "pdfbackendsetshade", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentshade (a,pdfverbose(b)) end } +if implement then + + implement { name = "pdfbackendcurrentresources", public = true, untraced = true, actions = { lpdf.collectedresources, context } } + implement { name = "pdfbackendsetcatalog", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtocatalog } + implement { name = "pdfbackendsetinfo", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b,c) lpdf.addtoinfo(a,b,c) end } -- gets adapted + implement { name = "pdfbackendsetname", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtonames } + implement { name = "pdfbackendsetpageattribute", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopageattributes } + implement { name = "pdfbackendsetpagesattribute", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopagesattributes } + implement { name = "pdfbackendsetpageresource", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = lpdf.addtopageresources } + implement { name = "pdfbackendsetextgstate", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentextgstate (a,pdfverbose(b)) end } + implement { name = "pdfbackendsetcolorspace", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentcolorspace(a,pdfverbose(b)) end } + implement { name = "pdfbackendsetpattern", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentpattern (a,pdfverbose(b)) end } + implement { name = "pdfbackendsetshade", usage = "value", public = true, protected = true, arguments = "2 arguments", actions = function(a,b) lpdf.adddocumentshade (a,pdfverbose(b)) end } + +end -- more helpers: copy from lepd to lpdf diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 61eac9517..321dea935 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -65,33 +65,34 @@ local pdfimmediateobject -- forward reference local pdfincludeimage -- forward reference -local pdf_pages = pdfconstant("Pages") -local pdf_page = pdfconstant("Page") -local pdf_xobject = pdfconstant("XObject") -local pdf_form = pdfconstant("Form") -local pdf_pattern = pdfconstant("Pattern") - -local fonthashes = fonts.hashes -local characters = fonthashes.characters -local descriptions = fonthashes.descriptions -local parameters = fonthashes.parameters -local properties = fonthashes.properties - -local report = logs.reporter("backend") -local report_objects = logs.reporter("backend","objects") -local report_fonts = logs.reporter("backend","fonts") - -local trace_objects = false trackers.register("backend.objects", function(v) trace_objects = v end) -local trace_details = false trackers.register("backend.details", function(v) trace_details = v end) -local trace_indices = false trackers.register("backend.fonts.details", function(v) trace_indices = v end) +local pdf_pages = pdfconstant("Pages") +local pdf_page = pdfconstant("Page") +local pdf_xobject = pdfconstant("XObject") +local pdf_form = pdfconstant("Form") +local pdf_pattern = pdfconstant("Pattern") + +local fonthashes = fonts.hashes +local characters = fonthashes.characters +local descriptions = fonthashes.descriptions +local parameters = fonthashes.parameters +local properties = fonthashes.properties + +local report = logs.reporter("backend") +local report_objects = logs.reporter("backend","objects") +local report_fonts = logs.reporter("backend","fonts") +local report_encryption = logs.reporter("backend","encryption") + +local trace_objects = false trackers.register("backend.objects", function(v) trace_objects = v end) +local trace_details = false trackers.register("backend.details", function(v) trace_details = v end) +local trace_indices = false trackers.register("backend.fonts.details", function(v) trace_indices = v end) -- These two tables used a font id as index and will be metatabled in lpdf-emb.lmt: -local usedfontnames = { } -local usedfontobjects = { } +local usedfontnames = { } +local usedfontobjects = { } -lpdf.usedfontnames = usedfontnames -lpdf.usedfontobjects = usedfontobjects +lpdf.usedfontnames = usedfontnames +lpdf.usedfontobjects = usedfontobjects -- experiment: @@ -116,7 +117,9 @@ local flushers = { } -- used variables -local pdf_h, pdf_v +local pdf_h = 0 +local pdf_v = 0 + local need_tm, need_tf, need_font, cur_tmrx, cur_factor local need_width, need_mode, done_width, done_mode local mode @@ -502,38 +505,6 @@ do return v end) - -- we need to use descriptions ... otherwise we get wrong dimensions when we use - -- characters[n].xoffset or virtual stuff - - -- local descriptionwidths = setmetatableindex(function(t,font) - -- local d = descriptions[font] - -- local c = characters[font] - -- local f = parameters[font].hfactor or parameters[font].factor - -- local v = setmetatableindex(function(t,char) - -- local w - -- local e = d and d[char] - -- if e then - -- w = e.width - -- if w then - -- w = w * f - -- end - -- end - -- if not w then - -- e = c and c[char] - -- if e then - -- w = e.width or 0 - -- end - -- end - -- if not w then - -- w = 0 - -- end - -- t[char] = w - -- return w - -- end) - -- t[font] = v - -- return v - -- end) - -- it's about time to get rid of the pdftex based model but i'll wait with that till after -- the first release so that we have some test period ... when we go compact even less @@ -1718,13 +1689,10 @@ local wrapupdocument, registerpage do pdfflushobject(page.objnum,object) end lpdf.addtocatalog("Pages",pdfreference(parent)) - end end -pdf_h, pdf_v = 0, 0 - local function initialize(driver,details) reset_variables(details) reset_buffer() @@ -1735,7 +1703,309 @@ end -- todo: more clever resource management: a bit tricky as we can inject -- stuff in the page stream -local compact = false +local compact = false +local encryptstream = false +local encryptobject = false +local encdict = nil +local majorversion = 1 +local minorversion = 7 + +-- Encryption + +-- This stuff is poorly documented so it took a while to figure out a way that made +-- loading in a few programe working. Of course one you see the solution one can +-- claim that it's easy and trivial. In the end we could even make acrobat accepting +-- the file: it doesn't like the catalog to be in an object stream which to me +-- smells like a bug. + +do + + -- move up (some already) or better: lpdf-aes.lmt or so + + local byte, sub, bytes, tohex, tobytes = string.byte, string.sub, string.bytes, string.tohex, string.tobytes + local P, S, V, Cs, lpegmatch, patterns = lpeg.P, lpeg.S, lpeg.V, lpeg.Cs, lpeg.match, lpeg.patterns + + local digest256 = sha2.digest256 + local digest384 = sha2.digest384 + local digest512 = sha2.digest512 + + local aesencode = aes.encode + local aesdecode = aes.decode + local aesrandom = aes.random + + -- random and padding functions are gone here + + local function validpassword(str) + return #str > 127 and sub(str,1,127) or str + end + + local encryptionkey = false + local objectparser = false + + do + + local function ps_encrypt(str) + -- string is already unescaped + str = aesencode(str,encryptionkey,true,true,true) + return "<" .. tohex(str) .. ">" + end + + local function hex_encrypt(str) + -- string needs to be decoded + str = tobytes(str) + str = aesencode(str,encryptionkey,true,true,true) + return "<" .. tohex(str) .. ">" + end + + local whitespace = S("\000\009\010\012\013\032")^1 + local anything = patterns.anything + local space = patterns.space + local spacing = whitespace^0 + local newline = patterns.eol + local cardinal = patterns.cardinal + + local p_psstring = ( + P("(") + * Cs(P { ( P("\\")/"" * anything + P("(") * V(1) * P(")") + (1 - P(")")) )^0 }) + * P(")") + ) / ps_encrypt + + local p_hexstring = ( + P("<") + * Cs((1-P(">"))^1) + * P(">") + ) / hex_encrypt + + local p_comment = P("%") * (1-newline)^1 * newline^1 + local p_name = P("/") * (1 - whitespace - S("<>/[]()"))^1 + local p_number = patterns.number + local p_boolean = P("true") + P("false") + local p_null = P("null") + local p_reference = cardinal * spacing * cardinal * spacing * P("R") + + local p_other = p_name + p_reference + p_psstring + p_hexstring + p_number + + p_boolean + p_null + p_comment + + local p_dictionary = { "dictionary", + dictionary = ( + P("<<") + * (spacing * p_name * spacing * V("whatever"))^0 + * spacing + * P(">>") + ), + array = ( + P("[") + * (spacing * V("whatever"))^0 + * spacing + * P("]") + ), + whatever = ( + V("dictionary") + + V("array") + + p_other + ), + } + + local p_object = P { "object", + dictionary = p_dictionary.dictionary, + array = p_dictionary.array, + whatever = p_dictionary.whatever, + object = spacing * (V("dictionary") + V("array") + p_other) + } + + -- local p_object = cardinal + -- * spacing + -- * cardinal + -- * spacing + -- * P("obj") + -- * p_object + -- * P(1)^0 + -- + -- objectparser = Cs(p_object^1) + + objectparser = Cs(p_object^1) + + end + + local function makehash(password,salt,userkey) + local k = digest256(password .. salt .. (userkey or "")) + local n = 0 + while true do + local k1 = rep(password .. k .. (userkey or ""),64) + local k2 = sub(k,1,16) + local iv = sub(k,17,32) + local e = aesencode(k1,k2,iv) + local m = 0 + local i = 1 + for b in bytes(e) do + m = m + b + if i == 16 then + break + else + i = i + 1 + end + end + m = m % 3 + if m == 0 then + k = digest256(e) + elseif m == 1 then + k = digest384(e) + else + k = digest512(e) + end + n = n + 1 + if n >= 64 and byte(sub(e,-1)) <= (n - 32) then + break + end + end + return sub(k,1,32) + end + + local options = { + -- unknown = 0x0001, -- bit 1 + -- unknown = 0x0002, -- bit 2 + print = 0x0004, -- bit 3 + modify = 0x0008, -- bit 4 + extract = 0x0010, -- bit 5 + add = 0x0020, -- bit 6 + -- unknown = 0x0040, -- bit 7 + -- unknown = 0x0080, -- bit 8 + fillin = 0x0100, -- bit 9 + access = 0x0200, -- bit 10 + assemble = 0x0400, -- bit 11 + quality = 0x0800, -- bit 12 + -- unknown = 0x1000, -- bit 13 + -- unknown = 0x2000, -- bit 14 + -- unknown = 0x4000, -- bit 15 + -- unknown = 0x8000, -- bit 16 + } + + -- 1111 0000 1100 0011 + + local mandate = 0x0200 + local defaults = options.print | options.extract | options.quality + + -- majorversion = 2 + -- minorversion = 0 + + function lpdf.setencryption(specification) + if not encryptstream then + local ownerpassword = specification.ownerpassword + local userpassword = specification.userpassword + local optionlist = specification.permissions + if type(ownerpassword) == "string" and ownerpassword ~= "" then + -- + if type(userpassword) ~= "string" then + userpassword = "" + end + userpassword = validpassword(userpassword) + ownerpassword = validpassword(ownerpassword) + -- + encryptionkey = aesrandom(32) -- used earlier on + -- + local permissions = mandate + if optionlist then + optionlist = utilities.parsers.settings_to_array(optionlist) + for i=1,#optionlist do + local p = options[optionlist[i]] + if p then + permissions = permissions | p + end + end + else + permissions = permissions | defaults + end + -- + permissions = permissions | 0xF0C3 -- needs work + -- + optionlist = { } + for k, v in table.sortedhash(options) do + if permissions & v == v then + optionlist[#optionlist+1] = k + end + end + -- + local uservalidationsalt = aesrandom(8) + local userkeysalt = aesrandom(8) + local userhash = makehash(userpassword,uservalidationsalt) + local userkey = userhash .. uservalidationsalt .. userkeysalt -- U + local userintermediate = makehash(userpassword,userkeysalt) + local useraes = aesencode(encryptionkey,userintermediate) -- UE + -- + local ownervalidationsalt = aesrandom(8) + local ownerkeysalt = aesrandom(8) + local ownerhash = makehash(ownerpassword,ownervalidationsalt,userkey) + local ownerkey = ownerhash .. ownervalidationsalt .. ownerkeysalt -- O + local ownerintermediate = makehash(ownerpassword,ownerkeysalt,userkey) + local owneraes = aesencode(encryptionkey,ownerintermediate) -- OE + -- + -- still not ok test in qpdf + -- + local permissionsstring = sio.tocardinal4(0xFFFFFFFF) + .. sio.tocardinal4(permissions) + .. "T" -- EncryptMetadata + .. "adb" + .. aesrandom(4) + local permissionsaes = aesencode(permissionsstring,encryptionkey) + -- + permissionsaes = tohex(permissionsaes) + userkey = tohex(userkey) + ownerkey = tohex(ownerkey) + useraes = tohex(useraes) + owneraes = tohex(owneraes) + -- + encdict = pdfdictionary { + Filter = pdfconstant("Standard"), + V = 5, -- variant + R = 6, -- revision + Length = 256, -- not needed + StmF = pdfconstant("StdCF"), + StrF = pdfconstant("StdCF"), + P = permissions, + Perms = pdfliteral(permissionsaes,true), -- #16 + U = pdfliteral(userkey, true), -- #48 + O = pdfliteral(ownerkey, true), -- #48 + UE = pdfliteral(useraes, true), -- #32 + OE = pdfliteral(owneraes, true), -- #32 + CF = { + StdCF = { + AuthEvent = pdfconstant("DocOpen"), + CFM = pdfconstant("AESV3"), + Length = 32, -- #encryptionkey + } + }, + -- bonus + EncryptMetadata = true, + } + -- + encryptstream = function(str) + return aesencode(str,encryptionkey,true,true,true) -- random-iv add-iv add-padding + end + encryptobject = function(obj) + if obj then + if type(obj) == "table" then + obj = obj() + end + return lpegmatch(objectparser,obj) or obj + end + end + -- + report_encryption("stream objects get encrypted") + if not objectstream then + report_encryption("strings are not encrypted, enable object streams") + end + report_encryption("permissions: % t",optionlist) + if userpassword == "" then + report_encryption("no user password") + end + -- + end + end + end + + backends.registered.pdf.codeinjections.setencryption = lpdf.setencryption + +end do @@ -1791,7 +2061,6 @@ do end end) - end local flushdeferred -- defined later @@ -2003,8 +2272,6 @@ local cache = false local info = "" local catalog = "" local lastdeferred = false -local majorversion = 1 -local minorversion = 7 directives.register("backend.pdf.threshold",function(v) if v then @@ -2142,13 +2409,17 @@ local addtocache, flushcache, cache do else fb = f_stream_b_d_u end - local s = #data - local b = fb(cache,strobj(),s) + local size = #data + if encryptstream then + data = encryptstream(data) + size = #data + end + local b = fb(cache,strobj(),size) local e = s_stream_e flush(f,b) flush(f,data) flush(f,e) - offset = offset + #b + s + #e + offset = offset + #b + size + #e data, d = { }, 0 list, l = { }, 0 coffset = 0 @@ -2257,6 +2528,7 @@ do nolength = true -- data = string.formatters["<< %s >>stream\n%s\nendstream"](attr,data) end + return pdfdeferredobject { objnum = objnum, immediate = true, @@ -2342,6 +2614,9 @@ local function flushnormalobj(data,n) nofobjects = nofobjects + 1 n = nofobjects end + if encryptobject then + data = encryptobject(data) + end data = f_object(n,data) if level == 0 then objects[n] = offset @@ -2371,12 +2646,21 @@ local function flushstreamobj(data,n,dict,comp,nolength) if comp ~= false then comp = compress and size > threshold end + if encryptobject then + dict = encryptobject(dict) + end if level == 0 then local b = nil local e = s_stream_e if nolength then + -- probleem: we need to adapt length! b = f_stream_b_d_r(n,dict) -- raw object, already treated - else + if encryptstream then +print("check length") + data = encryptstream(data) + size = #data + end + else if comp then local compdata = compressdata(data,size) if compdata then @@ -2391,6 +2675,10 @@ local function flushstreamobj(data,n,dict,comp,nolength) comp = false end end + if encryptstream then + data = encryptstream(data) + size = #data + end if comp then b = dict and f_stream_b_d_c(n,dict,size) or f_stream_b_n_c(n,size) else @@ -2404,6 +2692,10 @@ local function flushstreamobj(data,n,dict,comp,nolength) offset = offset + #b + size + #e else if nolength then + if encryptstream then +print("check length") + data = encryptstream(data) + end data = f_stream_d_r(n,dict,data) -- raw object, already treated else if comp then @@ -2420,6 +2712,10 @@ local function flushstreamobj(data,n,dict,comp,nolength) comp = false end end + if encryptstream then + data = encryptstream(data) + size = #data + end if comp then data = dict and f_stream_d_c(n,dict,size,data) or f_stream_n_c(n,size,data) else @@ -2555,10 +2851,17 @@ local openfile, closefile do -- local banner = "%\xCC\xD5\xC1\xD4\xC5\xD8\xD0\xC4\xC6\010" -- LUATEXPDF (+128) local banner = "%\xC3\xCF\xCE\xD4\xC5\xD8\xD4\xD0\xC4\xC6\010" -- CONTEXTPDF (+128) - - -- local removefile = os.remove - openfile = function(filename) + -- + local arguments = environment.arguments + if arguments.ownerpassword then + lpdf.setencryption { + ownerpassword = arguments.ownerpassword, + userpassword = arguments.userpassword, + permissions = arguments.permissions, + } + end + -- if inmemory then local n = 0 f = { } @@ -2631,9 +2934,17 @@ local openfile, closefile do local xrefoffset = offset local lastfree = 0 local noffree = 0 + -- + local os = objectstream + if encryptstream then + objectstream = false + end local catalog = lpdf.getcatalog() + objectstream = os + -- local info = lpdf.getinfo() local trailerid = lpdf.gettrailerid() + if objectstream then flushdeferred() flushcache() @@ -2752,38 +3063,70 @@ local openfile, closefile do local data = concat(objects,"",0,nofobjects) local size = #data local xref = pdfdictionary { - Type = pdfconstant("XRef"), - Size = nofobjects + 1, - W = pdfarray { 1, nofbytes, 1 }, - Root = catalog, - Info = info, - ID = trailerid and pdfarray { pdfliteral(trailerid,true), pdfliteral(trailerid,true) } or nil, + Type = pdfconstant("XRef"), + Size = nofobjects + 1, + W = pdfarray { 1, nofbytes, 1 }, + Root = catalog, + Info = info, + ID = trailerid and pdfarray { pdfliteral(trailerid,true), pdfliteral(trailerid,true) } or nil, + Encrypt = encdict or nil, } local fb - if compress then - local comp = compressdata(data,size) - if comp then - data = comp - size = #data - fb = f_stream_b_d_c + -- if encryptstream then + -- if compress then + -- local comp = compressdata(data,size) + -- if comp then + -- data = comp + -- size = #data + -- fb = f_stream_b_d_c + -- xref.Filter = pdfarray { + -- pdfconstant("Crypt"), -- identity + -- pdfconstant("FlateDecode") + -- } + -- else + -- xref.Filter = pdfconstant("Crypt") -- identity + -- end + -- else + -- xref.Filter = pdfconstant("Crypt") -- identity + -- end + -- fb = f_stream_b_d_u + -- else + if compress then + local comp = compressdata(data,size) + if comp then + data = comp + size = #data + fb = f_stream_b_d_c + else + fb = f_stream_b_d_u + end else fb = f_stream_b_d_u end - else - fb = f_stream_b_d_u - end + -- end + -- no encryption of data here flush(f,fb(nofobjects,xref(),size)) flush(f,data) flush(f,s_stream_e) flush(f,f_startxref(xrefoffset)) else flushdeferred() + -- + -- if encryptstream then + -- -- unencrypted ! + -- local eo = encryptobject + -- encryptobject = false + -- encdict = pdfreference(pdfimmediateobject(tostring(encdict))) + -- encryptobject = eo + -- end + -- xrefoffset = offset flush(f,f_xref(nofobjects+1)) local trailer = pdfdictionary { - Size = nofobjects+1, - Root = catalog, - Info = info, + Size = nofobjects + 1, + Root = catalog, + Info = info, + Encrypt = encdict or nil, } for i=1,nofobjects do local o = objects[i] @@ -2994,7 +3337,6 @@ do -- end -- todo: prevent twice - local function prepare(driver) if not environment.initex then -- diff --git a/tex/context/base/mkxl/lpdf-mis.lmt b/tex/context/base/mkxl/lpdf-mis.lmt index 6d99b215d..a3a78c49f 100644 --- a/tex/context/base/mkxl/lpdf-mis.lmt +++ b/tex/context/base/mkxl/lpdf-mis.lmt @@ -20,7 +20,7 @@ local format, gsub, formatters = string.format, string.gsub, string.formatters local concat, flattened = table.concat, table.flattened local settings_to_array = utilities.parsers.settings_to_array -local pdfbackend = backends.registered.pdf +local pdfbackend = backends and backends.registered.pdf or { } local nodeinjections = pdfbackend.nodeinjections local codeinjections = pdfbackend.codeinjections local registrations = pdfbackend.registrations diff --git a/tex/context/base/mkxl/node-rul.mkxl b/tex/context/base/mkxl/node-rul.mkxl index 208ea430e..5f9eef7cb 100644 --- a/tex/context/base/mkxl/node-rul.mkxl +++ b/tex/context/base/mkxl/node-rul.mkxl @@ -171,6 +171,8 @@ % +\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_index\fi\endcsname % \relax} +%D \overbar{Über} \underbar{Unterstrich \underbar{steigt \overbar{auf} den \underbar{Unterberg}}}. +%D %D \underbar {\underbar {\samplefile{tufte}}}\par %D \underbar {\underdot {\samplefile{tufte}}}\par %D \underbar {\underdot {\samplefile{tufte}}}\par @@ -179,10 +181,12 @@ %D \underbar {\underdots{\samplefile{tufte}}}\par %D \underdots{\underdots{\samplefile{tufte}}}\par -\newcount\c_node_rules_index % can barindex go? +\newcount \c_node_rules_index +\integerdef \c_node_rules_used \zerocount +\mutable\let\m_node_rules_previous_bar\empty \permanent\protected\def\node_rules_set#1% maybe reverse the 1000 (also maybe use more attributes instead of settings) - {\let\previousbar\currentbar + {\let\m_node_rules_previous_bar\currentbar \edef\currentbar{#1}% \usebarstyleandcolor\c!foregroundstyle\c!foregroundcolor % maybe: \usebarstyleandcolor\c!textgroundstyle\c!textcolor @@ -190,19 +194,32 @@ % \expandafter\let\expandafter\c_node_rules_index\csname\??barindex#1\endcsname \advance\c_node_rules_index\plusone \clf_enablerules % will be relaxed - \ifempty\previousbar + \edef\p_level{\barparameter\c!level}% + \ifx\p_level\v!yes + \integerdef\c_node_rules_used\c_node_rules_index \c_attr_ruled - \orelse\ifx\previousbar\currentbar + \orelse\ifx\p_level\v!auto + \integerdef\c_node_rules_used\c_node_rules_index + \ifempty\m_node_rules_previous_bar + \c_attr_ruled + \orelse\ifx\m_node_rules_previous_bar\currentbar + \c_attr_ruled + \else + \clf_enableextrarules % will be relaxed + \c_attr_ruledextra + \fi + \orelse\ifchknum\p_level\or + \integerdef\c_node_rules_used\p_level \c_attr_ruled \else - \clf_enableextrarules % will be relaxed - \c_attr_ruledextra + \integerdef\c_node_rules_used\c_node_rules_index + \c_attr_ruled \fi - \numexpr - \plusthousand*\c_node_rules_index - % optimizing this one needs testing - +\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_index\fi\endcsname - \relax} + \numexpr + \plusthousand*\c_node_rules_used + % optimizing this one needs testing + +\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_used\fi\endcsname + \relax} \permanent\protected\def\resetbar {\c_attr_ruled \attributeunsetvalue @@ -247,6 +264,7 @@ \setupbars [\c!method=0, % new: 0=center nested, 1=stack nested \c!continue=\v!no, + \c!level=\v!yes, \c!empty=, % new: yes = hide text \c!offset=0, % upwards, replaces: topoffset bottomoffset \c!dy=0, @@ -379,6 +397,7 @@ \definebar [undergraphic] [\c!mp=rules:under:dash, + \c!level=\v!auto, \c!offset=-.2, \c!dy=.4, \c!continue=\v!yes, diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv index 0ee8a3a65..1c9788a98 100644 --- a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv @@ -49,8 +49,8 @@ \starttypescript [\s!math][newcomputermodern] [\s!name] % \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math - \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra}] - \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}] + \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm] + \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}\s!goodies=lm] \stoptypescript \starttypescript [\s!serif] [newcomputermodern-book] [\s!name] diff --git a/tex/context/interface/mkii/keys-de.xml b/tex/context/interface/mkii/keys-de.xml index ab68cfb9b..579cc352d 100644 --- a/tex/context/interface/mkii/keys-de.xml +++ b/tex/context/interface/mkii/keys-de.xml @@ -82,6 +82,7 @@ + @@ -153,6 +154,7 @@ + @@ -189,6 +191,7 @@ + @@ -210,6 +213,8 @@ + + @@ -313,6 +318,7 @@ + @@ -437,6 +443,7 @@ + @@ -473,6 +480,7 @@ + @@ -1242,6 +1250,7 @@ + @@ -1279,6 +1288,7 @@ + @@ -1373,6 +1383,8 @@ + + @@ -1544,6 +1556,7 @@ + @@ -1720,6 +1733,9 @@ + + + @@ -2091,6 +2107,13 @@ + + + + + + + @@ -2134,6 +2157,13 @@ + + + + + + + diff --git a/tex/context/modules/mkxl/m-circuitikz.mkxl b/tex/context/modules/mkxl/m-circuitikz.mkxl new file mode 100644 index 000000000..9a105ff09 --- /dev/null +++ b/tex/context/modules/mkxl/m-circuitikz.mkxl @@ -0,0 +1,137 @@ +%D \module +%D [ file=m-circuitikz, +%D version=2021.12.03, +%D title=\CONTEXT\ Extra Modules, +%D subtitle=CURCUITIKZ support, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%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 A fixed variant of the t-curcuitikz module distributed with tikz. This one +%D is for \LMTX. + +\usemodule[m][tikz] + +\startmodule[circuitikz] + +\def\pgfcircversion {1.4.4} +\def\pgfcircversiondate {2021/10/31} + +\usetikzlibrary[calc] +\usetikzlibrary[arrows.meta, bending] +\usetikzlibrary[fpu] % may be needed for use fpu reciprocal (v1.0.1) + +\tikzinputfile{pgfcirc.defines.tex} +\tikzinputfile{pgfcircutils.tex} +\tikzinputfile{pgfcircpath.tex} + +\tikzinputfile{pgfcircshapes.tex} +\tikzinputfile{pgfcircmonopoles.tex} +\tikzinputfile{pgfcircbipoles.tex} +\tikzinputfile{pgfcirctripoles.tex} +\tikzinputfile{pgfcircquadpoles.tex} +\tikzinputfile{pgfcircmultipoles.tex} + +\tikzinputfile{pgfcirclabel.tex} +\tikzinputfile{pgfcircvoltage.tex} +\tikzinputfile{pgfcirccurrent.tex} +\tikzinputfile{pgfcircflow.tex} + +% defaults + +\setupmodule + [current=european, + voltage=european, + resistor=american, + inductor=cute, + logic=american, + siunitx=true, + arrowmos=false] + +% can be done nicer ... todo + +\processaction + [\currentmoduleparameter{voltage}] + [european=>\ctikzset{voltage=european}, + american=>\ctikzset{voltage=american}] + +\processaction + [\currentmoduleparameter{current}] + [european=>\ctikzset{ current=european}, + american=>\ctikzset{ current=american}] + +\processaction + [\currentmoduleparameter{label}] + [straight=>\ctikzset{label/align = straight}, + align=>\ctikzset{label/align = rotate}, + smart=>\ctikzset{label/align = smart}] + +\processaction + [\currentmoduleparameter{resistor}] + [european=>\ctikzset{ resistor=european}, + american=>\ctikzset{ resistor=american}] + +\processaction + [\currentmoduleparameter{inductor}] + [european=>\ctikzset{ inductor=european}, + american=>\ctikzset{ inductor=american}, + cute=>\ctikzset{ inductor=cute}] + +\processaction + [\currentmoduleparameter{diode}] + [full=>\ctikzset{ diode=full}, + empty=>\ctikzset{ diode=empty}] + +\processaction + [\currentmoduleparameter{logic}] + [european=>\ctikzset{ logic ports=european}, + american=>\ctikzset{ logic ports=american}] + +% hm, we have units built in and in mkii one can load the units module +% ... always been so ... + +\processaction + [\currentmoduleparameter{siunitx}] + [true=>\def\SI #1#2{#1\,#2} + \def\ampere {\rm{A}} + \def\volt {\rm{V}} + \def\ohm {\Omega} + \def\siemens {\rm{S}} + \def\farad {\rm{F}} + \def\henry {\rm{H}} + \def\second {\rm{s}} + \def\coulomb {\rm{C}} + \def\siemens {\rm{S}} + \def\radians {\rm{rad}} + \def\milli {\rm{m}} + \def\micro {\mu} + \def\nano {\rm{n}} + \def\pico {\rm{p}} + \def\kilo {\rm{k}} + \def\mega {\rm{M}} + \def\giga {\rm{G}} + \def\tera {\rm{T}}] + +\unprotect + +\processaction + [\currentmoduleparameter{arrowmos}] + [true=>\pgf@circuit@mos@arrowstrue, + false=>\pgf@circuit@mos@arrowsfalse] + +\protect + +\ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]} + +\aliased\let\stopcircuitikz\relax + +\permanent\protected\def\startcircuitikz#1\stopcircuitikz + {\starttikzpicture#1\stoptikzpicture} + +\stopmodule + +\endinput diff --git a/tex/context/modules/mkxl/m-tikz.mkxl b/tex/context/modules/mkxl/m-tikz.mkxl index 5b1f6e76c..df8d44f49 100644 --- a/tex/context/modules/mkxl/m-tikz.mkxl +++ b/tex/context/modules/mkxl/m-tikz.mkxl @@ -22,43 +22,52 @@ \protect \fi - -\pushoverloadmode - - \pushcatcodetable - - \setcatcodetable\texcatcodes - - \catcode`\@=11 - \catcode`\|=12 - \catcode`\!=12 - - \input t-pgf.tex - \input t-pgffor.tex - \input tikz.code.tex - - \popcatcodetable - -\popoverloadmode +\permanent\protected\def\starttikzinput + {\pushoverloadmode + \pushcatcodetable + \setcatcodetable\texcatcodes + \unprotect + \catcode`\@=11 + \catcode`\|=12 + \catcode`\!=12 + \autoparagraphmode\zerocount} + +\permanent\protected\def\stoptikzinput + {\autoparagraphmode\plusone + \protect + \popcatcodetable + \popoverloadmode} + +\permanent\protected\def\tikzinputfile#1% + {\starttikzinput + \input{#1}\relax + \stoptikzinput} + +\tikzinputfile{t-pgf.tex} +\tikzinputfile{t-pgffor.tex} +\tikzinputfile{tikz.code.tex} \permanent\protected\def\tikzerrormessage#1#2#3% {\writestatus{#1}{#2}} -% For now we need this but we need to educate the user to wrap settings -% in the wrappers. So some day the next line will go. I need to check what -% commands are possible outside a picture. +% For now we need this but we need to educate the user to wrap settings in the +% wrappers. So some day the next line will go. I need to check what commands are +% possible outside a picture. \overloadmode\zerocount \permanent\protected\def\starttikzsettings - {\pushoverloadmode} + {\pushoverloadmode + \autoparagraphmode\zerocount} \permanent\protected\def\stoptikzsettings - {\popoverloadmode} + {\autoparagraphmode\plusone + \popoverloadmode} \permanent\protected\def\starttikzpicture {\dontleavehmode \hcontainer\bgroup + \autoparagraphmode\zerocount % \pushoverloadmode \ifdefined\PackageError\else \let\PackageError\tikzerrormessage \fi \tikzpicture} @@ -68,33 +77,18 @@ % \popoverloadmode \egroup} -% \input t-pgf.tex - \ifx\pgfdefined\undefined \let\pgfdefined\relax - % \input t-pgfcor.tex - \ifx\pgfcoredefined\undefined - \let\pgfcoredefined=\relax - - \input t-pgfsys.tex - - \edef\pgfcoreatcode {\the\catcode`\@} - \edef\pgfcorebarcode {\the\catcode`\|} - \edef\pgfcoreexclaimcode{\the\catcode`\!} - - \catcode`\@=11 - \catcode`\|=12 - \catcode`\!=12 + \let\pgfcoredefined\relax - \input pgfcore.code.tex - - \catcode`\@=\pgfcoreatcode - \catcode`\|=\pgfcorebarcode - \catcode`\!=\pgfcoreexclaimcode + \tikzinputfile{pgfsys.code.tex} + \tikzinputfile{pgfsyssoftpath.code.tex} + \tikzinputfile{pgfsysprotocol.code.tex} + \tikzinputfile{pgfcore.code.tex} \let\startpgfpicture \pgfpicture \let\stoppgfpicture \endpgfpicture \let\startpgfscope \pgfscope \let\stoppgfscope \endpgfscope @@ -105,6 +99,13 @@ \fi + \let\normalusepgfmodule\usepgfmodule + + \protected\def\usepgfmodule[#1]% + {\starttikzinput + \normalusepgfmodule[#1]% + \stoptikzinput} + \usepgfmodule[shapes,plot] \fi diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index e50c388b9..2427e3389 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 : 2021-12-03 15:17 +-- merge date : 2021-12-10 11:29 do -- begin closure to overcome local limits and interference -- cgit v1.2.3