diff options
38 files changed, 354 insertions, 78 deletions
diff --git a/doc/context/documents/general/manuals/xtables-mkiv.pdf b/doc/context/documents/general/manuals/xtables-mkiv.pdf Binary files differindex d1b1a3ed0..255a730b8 100644 --- a/doc/context/documents/general/manuals/xtables-mkiv.pdf +++ b/doc/context/documents/general/manuals/xtables-mkiv.pdf diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf Binary files differindex 4e9d547c5..aa527b862 100644 --- a/doc/context/documents/general/qrcs/setup-cs.pdf +++ b/doc/context/documents/general/qrcs/setup-cs.pdf diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf Binary files differindex 0941e1f49..ea5fc1ed7 100644 --- a/doc/context/documents/general/qrcs/setup-de.pdf +++ b/doc/context/documents/general/qrcs/setup-de.pdf diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf Binary files differindex 7137482f0..f373195d9 100644 --- a/doc/context/documents/general/qrcs/setup-en.pdf +++ b/doc/context/documents/general/qrcs/setup-en.pdf diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf Binary files differindex cfdd71b78..9ce8b8717 100644 --- a/doc/context/documents/general/qrcs/setup-fr.pdf +++ b/doc/context/documents/general/qrcs/setup-fr.pdf diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf Binary files differindex 93e68397f..9bca93711 100644 --- a/doc/context/documents/general/qrcs/setup-it.pdf +++ b/doc/context/documents/general/qrcs/setup-it.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf Binary files differindex 746595024..d6be2f850 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf Binary files differindex 4b463d18a..b4fb3686f 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf Binary files differindex d9bddbfc0..c6324683a 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf Binary files differindex af22546f6..4782d388e 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf Binary files differindex 8027468ab..25ca636c0 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf Binary files differindex e87d00337..1b70533ac 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf Binary files differindex 61d893e81..dc4c994be 100644 --- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf +++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf Binary files differindex c25f2cbff..39bcb233c 100644 --- a/doc/context/documents/general/qrcs/setup-nl.pdf +++ b/doc/context/documents/general/qrcs/setup-nl.pdf diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf Binary files differindex 5714672c7..69a744975 100644 --- a/doc/context/documents/general/qrcs/setup-ro.pdf +++ b/doc/context/documents/general/qrcs/setup-ro.pdf diff --git a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex index 827ad3fcc..1b878e5cb 100644 --- a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex +++ b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex @@ -1250,6 +1250,101 @@ you're lucky. \stopsection +\startsection[title={Swapping}] + +The next two examples demonstrate a feature added for Taco, who wanted to input +vertical instead of horizontal. It's a bit of a hack but it works okay for +simple cases. We assume these settings: + +\startbuffer[settings] +\setupxtable[one] [foregroundcolor=darkred] +\setupxtable[two] [foregroundcolor=darkgreen] +\setupxtable[three][foregroundcolor=darkblue] +\setupxtable[four] [foregroundcolor=darkorange] +\stopbuffer + +\startbuffer[demo-1] +\startxtable[frame=on] + \startxcolumn[one] + \startxcell A1 \stopxcell + \startxcell B1 \stopxcell + \startxcell C1 \stopxcell + \startxcell D1 \stopxcell + \startxcell E1 \stopxcell + \stopxcolumn + \startxcolumn[two] + \startxcell A2 \stopxcell + \startxcell B2 \stopxcell + \startxcell C2 \stopxcell + \startxcell D2 \stopxcell + \startxcell E2 \stopxcell + \stopxcolumn + \startxcolumn[three] + \startxcell A3 \stopxcell + \startxcell B3 \stopxcell + \startxcell C3 \stopxcell + \startxcell D3 \stopxcell + \startxcell E3 \stopxcell + \stopxcolumn + \startxcolumn[four] + \startxcell A4 \stopxcell + \startxcell B4 \stopxcell + \startxcell C4 \stopxcell + \startxcell D4 \stopxcell + \startxcell E4 \stopxcell + \stopxcolumn +\stopxtable +\stopbuffer + +\startbuffer[demo-2] +\startxtable[frame=on] + \startxcolumn[one] + \startxcell A \stopxcell + \startxcell B \stopxcell + \startxcell C \stopxcell + \startxcell D \stopxcell + \startxcell E \stopxcell + \stopxcolumn + \startxcolumn[two] + \startxcell A \stopxcell + \startxcell[ny=2] BC \stopxcell + \startxcell[ny=2] DE \stopxcell + \stopxcolumn + \startxcolumn[three] + \startxcell A \stopxcell + \startxcell[ny=4] BCDE \stopxcell + \stopxcolumn + \startxcolumn[four] + \startxcell A \stopxcell + \startxcell B \stopxcell + \startxcell[ny=2] CD \stopxcell + \startxcell E \stopxcell + \stopxcolumn +\stopxtable +\stopbuffer + +\typebuffer[settings] + +The first example has no spans: + +\typebuffer[demo-1] + +while the second one has: + +\typebuffer[demo-2] + +The results are shown in \in {figure} [fig:swapped]. + +\startplacefigure[title={Entering columns instead of rows.},reference=fig:swapped] + \getbuffer[settings] + \startcombination + {\getbuffer[demo-1]} {no spans} + {\getbuffer[demo-2]} {some spans} + \stopcombination +\stopplacefigure + +\stopsection + \startsection[title={Examples}] On the following pages we show some examples of (experimental) features. For this diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index da96a92a4..bde079a86 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -1033,7 +1033,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true --- original size: 39759, stripped down to: 21371 +-- original size: 40126, stripped down to: 21515 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, @@ -1213,10 +1213,18 @@ function lpeg.instringchecker(p) end end function lpeg.splitter(pattern,action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern,action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) @@ -24614,8 +24622,8 @@ end -- of closure -- used libraries : 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 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 util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 983900 --- stripped bytes : 347756 +-- original bytes : 984267 +-- stripped bytes : 347979 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index da96a92a4..bde079a86 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -1033,7 +1033,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true --- original size: 39759, stripped down to: 21371 +-- original size: 40126, stripped down to: 21515 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, @@ -1213,10 +1213,18 @@ function lpeg.instringchecker(p) end end function lpeg.splitter(pattern,action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern,action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) @@ -24614,8 +24622,8 @@ end -- of closure -- used libraries : 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 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 util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 983900 --- stripped bytes : 347756 +-- original bytes : 984267 +-- stripped bytes : 347979 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index da96a92a4..bde079a86 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -1033,7 +1033,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true --- original size: 39759, stripped down to: 21371 +-- original size: 40126, stripped down to: 21515 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, @@ -1213,10 +1213,18 @@ function lpeg.instringchecker(p) end end function lpeg.splitter(pattern,action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern,action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) @@ -24614,8 +24622,8 @@ end -- of closure -- used libraries : 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 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 util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 983900 --- stripped bytes : 347756 +-- original bytes : 984267 +-- stripped bytes : 347979 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index da96a92a4..bde079a86 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -1033,7 +1033,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true --- original size: 39759, stripped down to: 21371 +-- original size: 40126, stripped down to: 21515 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, @@ -1213,10 +1213,18 @@ function lpeg.instringchecker(p) end end function lpeg.splitter(pattern,action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern,action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) @@ -24614,8 +24622,8 @@ end -- of closure -- used libraries : 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 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 util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 983900 --- stripped bytes : 347756 +-- original bytes : 984267 +-- stripped bytes : 347979 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index e309eca7b..269f053f9 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{2018.10.02 23:17} +\newcontextversion{2018.10.03 16:02} %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 76f4f8d69..5fa5ed7d2 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{2018.10.02 23:17} +\edef\contextversion{2018.10.03 16:02} %D For those who want to use this: diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua index ea9aa330f..1c53d924f 100644 --- a/tex/context/base/mkiv/char-ini.lua +++ b/tex/context/base/mkiv/char-ini.lua @@ -642,14 +642,19 @@ function characters.getrange(name,expression) -- used in font fallback definitio name = gsub(name,'"',"0x") -- goodie: tex hex notation local start, stop if expression then - local first, rest = lpegmatch(splitter2,name) - local range = rawget(blocks,lower(gsub(first,"[^a-zA-Z0-9]",""))) - if range then - local s = loadstring("return 0 " .. rest) - if type(s) == "function" then - local d = s() - if type(d) == "number" then - return range.first + d, range.last + d, nil + local n = tonumber(name) + if n then + return n, n, nil + else + local first, rest = lpegmatch(splitter2,name) + local range = rawget(blocks,lower(gsub(first,"[^a-zA-Z0-9]",""))) + if range then + local s = loadstring("return 0 " .. rest) + if type(s) == "function" then + local d = s() + if type(d) == "number" then + return range.first + d, range.last + d, nil + end end end end diff --git a/tex/context/base/mkiv/cldf-bas.lua b/tex/context/base/mkiv/cldf-bas.lua index b2c4b2623..27bb4f343 100644 --- a/tex/context/base/mkiv/cldf-bas.lua +++ b/tex/context/base/mkiv/cldf-bas.lua @@ -150,13 +150,21 @@ function ctxcore.flushboxregister(n) context(type(n) == "number" and [[\box%s ]] or [[\box\%s]],n) end -function ctxcore.beginhbox() context([[\hbox{]]) end -function ctxcore.beginvbox() context([[\vbox{]]) end -function ctxcore.beginvtop() context([[\vtop{]]) end +-- function ctxcore.beginhbox() context([[\hbox\bgroup]]) end +-- function ctxcore.beginvbox() context([[\vbox\bgroup]]) end +-- function ctxcore.beginvtop() context([[\vtop\bgroup]]) end -ctxcore.endhbox = ctx_egroup -ctxcore.endvbox = ctx_egroup -ctxcore.endvtop = ctx_egroup +local ctx_hbox = context.cs.hbox +local ctx_vbox = context.cs.vbox +local ctx_vtop = context.cs.vtop + +function ctxcore.beginhbox() ctx_hbox() ctx_bgroup() end +function ctxcore.beginvbox() ctx_vbox() ctx_bgroup() end +function ctxcore.beginvtop() ctx_vtop() ctx_bgroup() end + +ctxcore.endhbox = ctx_egroup -- \egroup +ctxcore.endvbox = ctx_egroup -- \egroup +ctxcore.endvtop = ctx_egroup -- \egroup local function allocate(name,what,cmd) local a = format("c_syst_last_allocated_%s",what) diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 733561e8c..3e3ab3bde 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{2018.10.02 23:17} +\newcontextversion{2018.10.03 16:02} %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.mkiv b/tex/context/base/mkiv/context.mkiv index 23a0825ce..5a944df23 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -42,7 +42,7 @@ %D has to match \type {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2018.10.02 23:17} +\edef\contextversion{2018.10.03 16:02} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/mkiv/font-col.lua b/tex/context/base/mkiv/font-col.lua index 0af6f3188..ae6399525 100644 --- a/tex/context/base/mkiv/font-col.lua +++ b/tex/context/base/mkiv/font-col.lua @@ -124,11 +124,16 @@ function collections.define(name,font,ranges,details) -- todo, combine per font start/stop as arrays local offset = details.offset if type(offset) == "string" then - local start = characters.getrange(offset,true) - offset = start or false + offset = characters.getrange(offset,true) or false else offset = tonumber(offset) or false end + local target = details.target + if type(target) == "string" then + target = characters.getrange(target,true) or false + else + target = tonumber(target) or false + end local rscale = tonumber (details.rscale) or 1 local force = toboolean(details.force,true) local check = toboolean(details.check,true) @@ -154,9 +159,11 @@ function collections.define(name,font,ranges,details) stop = stop, gaps = gaps, offset = offset, + target = target, rscale = rscale, force = force, check = check, + method = details.method, factor = factor, features = features, } @@ -177,6 +184,32 @@ end -- check: when true, only set when present in font -- force: when false, then not set when already set +local uccodes = characters.uccodes +local lccodes = characters.lccodes + +local methods = { + lowercase = function(oldchars,newchars,vector,start,stop,cloneid) + for k, v in next, oldchars do + if k >= start and k <= stop then + local lccode = lccodes[k] + if k ~= lccode and newchars[lccode] then + vector[k] = { cloneid, lccode } + end + end + end + end, + uppercase = function(oldchars,newchars,vector,start,stop,cloneid) + for k, v in next, oldchars do + if k >= start and k <= stop then + local uccode = uccodes[k] + if k ~= uccode and newchars[uccode] then + vector[k] = { cloneid, uccode } + end + end + end + end, +} + function collections.clonevector(name) statistics.starttiming(fonts) if trace_collecting then @@ -193,7 +226,9 @@ function collections.clonevector(name) local check = definition.check local force = definition.force local offset = definition.offset or start - local remap = definition.remap + local remap = definition.remap -- not used + local target = definition.target + local method = definition.method local cloneid = list[i] local oldchars = fontdata[current].characters local newchars = fontdata[cloneid].characters @@ -202,28 +237,60 @@ function collections.clonevector(name) vector.factor = factor end if trace_collecting then - report_fonts("remapping font %a to %a for range %U - %U",current,cloneid,start,stop) + if target then + report_fonts("remapping font %a to %a for range %U - %U, offset %X, target %U",current,cloneid,start,stop,offset,target) + else + report_fonts("remapping font %a to %a for range %U - %U, offset %X",current,cloneid,start,stop,offset) + end end - if check then - for unicode = start, stop do - local unic = unicode + offset - start - if not newchars[unicode] then - -- not in font - elseif force or (not vector[unic] and not oldchars[unic]) then - if remap then - vector[unic] = { cloneid, remap[unicode] } - else + if method then + method = methods[method] + end + if method then + method(oldchars,newchars,vector,start,stop,cloneid) + elseif check then + if target then + for unicode = start, stop do + local unic = unicode + offset - start + if not newchars[target] then + -- not in font + elseif force or (not vector[unic] and not oldchars[unic]) then + vector[unic] = { cloneid, target } + end + target = target + 1 + end + elseif remap then + -- not used + else + for unicode = start, stop do + local unic = unicode + offset - start + if not newchars[unicode] then + -- not in font + elseif force or (not vector[unic] and not oldchars[unic]) then vector[unic] = cloneid end end end else - for unicode = start, stop do - local unic = unicode + offset - start - if force or (not vector[unic] and not oldchars[unic]) then - if remap then + if target then + for unicode = start, stop do + local unic = unicode + offset - start + if force or (not vector[unic] and not oldchars[unic]) then + vector[unic] = { cloneid, target } + end + target = target + 1 + end + elseif remap then + for unicode = start, stop do + local unic = unicode + offset - start + if force or (not vector[unic] and not oldchars[unic]) then vector[unic] = { cloneid, remap[unicode] } - else + end + end + else + for unicode = start, stop do + local unic = unicode + offset - start + if force or (not vector[unic] and not oldchars[unic]) then vector[unic] = cloneid end end diff --git a/tex/context/base/mkiv/font-col.mkvi b/tex/context/base/mkiv/font-col.mkvi index a9c461e44..7ba92b526 100644 --- a/tex/context/base/mkiv/font-col.mkvi +++ b/tex/context/base/mkiv/font-col.mkvi @@ -23,6 +23,11 @@ % \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes] % \definefontfallback [whatever] [Bold] [0x0080-0x00FF,0x00A0-0x00AF] [rscale=1.2] % \definefontfallback [whatever] [BoldSlanted] [0x00C0-0x00C7] [check=yes,force=yes] +% +% \definefontfeature [emboldened] [effect={width=0.1,delta=0.4,factor=0.3}] +% \definefontsynonym [SansEmboldened] [Sans] [features=emboldened] +% \definefontfallback[FakeSansCaps] [SansEmboldened] [0x0000-0xFFFF] [rscale=.8,method=uppercase] +% \definefontsynonym [SansCaps] [file:MyriadPro-Regular.otf] [fallbacks=FakeSansCaps] \writestatus{loading}{ConTeXt Font Macros / Collections} diff --git a/tex/context/base/mkiv/l-lpeg.lua b/tex/context/base/mkiv/l-lpeg.lua index 750d5e698..589fa2b0b 100644 --- a/tex/context/base/mkiv/l-lpeg.lua +++ b/tex/context/base/mkiv/l-lpeg.lua @@ -308,12 +308,28 @@ function lpeg.instringchecker(p) end end +-- function lpeg.splitter(pattern, action) +-- return (((1-P(pattern))^1)/action+1)^0 +-- end + +-- function lpeg.tsplitter(pattern, action) +-- return Ct((((1-P(pattern))^1)/action+1)^0) +-- end + function lpeg.splitter(pattern, action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern, action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end -- probleem: separator can be lpeg and that does not hash too well, but diff --git a/tex/context/base/mkiv/pack-com.mkiv b/tex/context/base/mkiv/pack-com.mkiv index c7e613368..b69f812e5 100644 --- a/tex/context/base/mkiv/pack-com.mkiv +++ b/tex/context/base/mkiv/pack-com.mkiv @@ -290,7 +290,7 @@ \alignmark\alignmark \m_pack_combinations_rightfiller \aligntab - \tabskip\zeropoint \s!plus 1fill + \tabskip\zeropoint \s!plus 1fill % \fillskip \alignmark\alignmark \cr \pack_combinations_pickup} diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex 8e33d0576..7d9a44566 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 7ce0ed38d..5a886244b 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/base/mkiv/tabl-xtb.mkvi b/tex/context/base/mkiv/tabl-xtb.mkvi index ec0e9c25b..148304331 100644 --- a/tex/context/base/mkiv/tabl-xtb.mkvi +++ b/tex/context/base/mkiv/tabl-xtb.mkvi @@ -912,7 +912,7 @@ % \tabl_x_stop_cell} \def\tabl_x_flush_swapped - {\dorecurse\c_tabl_x_swapped + {\dorecurse\c_tabl_x_swapped_max {\expandafter \startxrow \the\csname\??xtableswap##1\endcsname\relax @@ -922,31 +922,55 @@ {\expandafter\newtoks\csname\??xtableswap\number\c_tabl_x_swapped\endcsname \expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname} -\unexpanded\def\tabl_x_collect_cell_start#content\stopxcell - {\global\advance\c_tabl_x_swapped\plusone - \ifnum\c_tabl_x_swapped>\c_tabl_x_swapped_max - \global\c_tabl_x_swapped_max\c_tabl_x_swapped - \fi - \expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname - \ifx\t_tabl_x_swapped\relax - \tabl_x_collect_allocate - \fi - \ifx\m_tabl_x_swapped_settings\empty - \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}#content\tabl_x_c_cell_stop} - \else - \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}#content\tabl_x_c_cell_stop}% - \fi} +\def\tabl_x_collect_advance + {\global\advance\c_tabl_x_swapped\plusone + \ifnum\c_tabl_x_swapped>\c_tabl_x_swapped_max + \global\c_tabl_x_swapped_max\c_tabl_x_swapped + \fi + \expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname + \ifx\t_tabl_x_swapped\relax + \tabl_x_collect_allocate + \fi} + +\unexpanded\def\tabl_x_collect_cell_start + {\doifelsenextoptionalcs + \tabl_x_collect_cell_start_yes + \tabl_x_collect_cell_start_nop} + +\def\tabl_x_collect_cell_start_nop#content\stopxcell + {\tabl_x_collect_advance + \ifx\m_tabl_x_swapped_settings\empty + \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}#content\tabl_x_c_cell_stop}% + \else + \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}#content\tabl_x_c_cell_stop}% + \fi} + +\def\tabl_x_collect_cell_start_yes[#settings]#content\stopxcell + {\tabl_x_collect_advance + \ifx\m_tabl_x_swapped_settings\empty + \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}[#settings]#content\tabl_x_c_cell_stop}% + \else + \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}[#settings]#content\tabl_x_c_cell_stop}% + \fi + \getdummyparameters[\c!ny=1,#settings]% + \scratchcounter\numexpr\dummyparameter\c!ny-\plusone\relax + \ifcase\scratchcounter\else + \dorecurse\scratchcounter\tabl_x_collect_advance + \fi} \unexpanded\def\startxcolumn % todo: arguments {\begingroup \global\c_tabl_x_swapped\zerocount \let\startxcell\tabl_x_collect_cell_start \let\stopxcell \relax - \doifelsenextoptionalcs\tabl_x_start_column_yes\relax} + \doifelsenextoptionalcs\tabl_x_start_column_yes\tabl_x_start_column_nop} \def\tabl_x_start_column_yes[#1]% {\xdef\m_tabl_x_swapped_settings{#1}} +\def\tabl_x_start_column_nop + {\glet\m_tabl_x_swapped_settings\empty} + \unexpanded\def\stopxcolumn {\endgroup} diff --git a/tex/context/interface/mkiv/context-en.xml b/tex/context/interface/mkiv/context-en.xml index 9b1cbd0c2..508e2fc7c 100644 --- a/tex/context/interface/mkiv/context-en.xml +++ b/tex/context/interface/mkiv/context-en.xml @@ -11379,12 +11379,20 @@ <cd:constant type="cd:number"/> <cd:constant type="cd:name"/> </cd:parameter> + <cd:parameter name="target"> + <cd:constant type="cd:number"/> + <cd:constant type="cd:name"/> + </cd:parameter> <cd:parameter name="features"> <cd:constant type="cd:name"/> </cd:parameter> <cd:parameter name="factor"> <cd:constant type="cd:number"/> </cd:parameter> + <cd:parameter name="method"> + <cd:constant type="lowercase"/> + <cd:constant type="uppercase"/> + </cd:parameter> </cd:assignments> </cd:arguments> </cd:command> diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf Binary files differindex 7137482f0..f373195d9 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-fonts.xml b/tex/context/interface/mkiv/i-fonts.xml index 9735f8935..03bdb2a7e 100644 --- a/tex/context/interface/mkiv/i-fonts.xml +++ b/tex/context/interface/mkiv/i-fonts.xml @@ -31,12 +31,20 @@ <cd:constant type="cd:number"/> <cd:constant type="cd:name"/> </cd:parameter> + <cd:parameter name="target"> + <cd:constant type="cd:number"/> + <cd:constant type="cd:name"/> + </cd:parameter> <cd:parameter name="features"> <cd:constant type="cd:name"/> </cd:parameter> <cd:parameter name="factor"> <cd:constant type="cd:number"/> </cd:parameter> + <cd:parameter name="method"> + <cd:constant type="lowercase"/> + <cd:constant type="uppercase"/> + </cd:parameter> </cd:assignments> </cd:arguments> </cd:command> diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf Binary files differindex 4b64b52c2..3dcf09ed4 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 ccf6d3a7c..adc2c6202 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 : 10/02/18 23:17:57 +-- merge date : 10/03/18 16:02:19 do -- begin closure to overcome local limits and interference @@ -306,10 +306,18 @@ function lpeg.instringchecker(p) end end function lpeg.splitter(pattern,action) - return (((1-P(pattern))^1)/action+1)^0 + if action then + return (((1-P(pattern))^1)/action+1)^0 + else + return (Cs((1-P(pattern))^1)+1)^0 + end end function lpeg.tsplitter(pattern,action) - return Ct((((1-P(pattern))^1)/action+1)^0) + if action then + return Ct((((1-P(pattern))^1)/action+1)^0) + else + return Ct((Cs((1-P(pattern))^1)+1)^0) + end end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) |