From 2106beefbc854f77a92264c815d3cf2b3460f0b6 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 30 Aug 2018 19:50:57 +0200 Subject: 2018-08-30 18:50:00 --- doc/context/documents/general/qrcs/setup-cs.pdf | Bin 849256 -> 849405 bytes doc/context/documents/general/qrcs/setup-de.pdf | Bin 850172 -> 850309 bytes doc/context/documents/general/qrcs/setup-en.pdf | Bin 853699 -> 853853 bytes doc/context/documents/general/qrcs/setup-fr.pdf | Bin 846661 -> 846813 bytes doc/context/documents/general/qrcs/setup-it.pdf | Bin 852103 -> 852251 bytes .../documents/general/qrcs/setup-mapping-cs.pdf | Bin 346970 -> 347120 bytes .../documents/general/qrcs/setup-mapping-de.pdf | Bin 430976 -> 431122 bytes .../documents/general/qrcs/setup-mapping-en.pdf | Bin 344815 -> 344970 bytes .../documents/general/qrcs/setup-mapping-fr.pdf | Bin 347717 -> 347862 bytes .../documents/general/qrcs/setup-mapping-it.pdf | Bin 346695 -> 346844 bytes .../documents/general/qrcs/setup-mapping-nl.pdf | Bin 345275 -> 345425 bytes .../documents/general/qrcs/setup-mapping-ro.pdf | Bin 508266 -> 508416 bytes doc/context/documents/general/qrcs/setup-nl.pdf | Bin 843664 -> 843807 bytes doc/context/documents/general/qrcs/setup-ro.pdf | Bin 846335 -> 846489 bytes metapost/context/base/mpiv/mp-asnc.mpiv | 216 ++++++---------- metapost/context/base/mpiv/mp-mlib.mpiv | 6 +- metapost/context/base/mpiv/mp-page.mpiv | 1 + scripts/context/lua/mtxrun.lua | 7 +- scripts/context/stubs/mswin/mtxrun.lua | 7 +- scripts/context/stubs/unix/mtxrun | 7 +- scripts/context/stubs/win64/mtxrun.lua | 7 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/anch-pos.lua | 17 +- tex/context/base/mkiv/anch-pos.mkiv | 2 + tex/context/base/mkiv/anch-snc.lua | 271 ++++++++++++++++++++ tex/context/base/mkiv/anch-snc.mkiv | 278 ++++++++------------- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-imp-quality.lua | 4 +- tex/context/base/mkiv/mlib-int.lua | 178 ++++++------- tex/context/base/mkiv/mlib-lua.lua | 165 +++++++----- tex/context/base/mkiv/pack-rul.mkiv | 55 ++-- tex/context/base/mkiv/status-files.pdf | Bin 26302 -> 26301 bytes tex/context/base/mkiv/status-lua.pdf | Bin 267612 -> 267692 bytes tex/context/base/mkiv/util-soc-imp-http.lua | 2 + tex/context/interface/mkiv/i-context.pdf | Bin 853699 -> 853853 bytes tex/context/interface/mkiv/i-readme.pdf | Bin 61221 -> 61222 bytes tex/context/modules/mkiv/s-evohome.mkiv | 16 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 40 files changed, 749 insertions(+), 500 deletions(-) create mode 100644 tex/context/base/mkiv/anch-snc.lua diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf index 47df2ad34..a305590b5 100644 Binary files a/doc/context/documents/general/qrcs/setup-cs.pdf and b/doc/context/documents/general/qrcs/setup-cs.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf index 935db0014..aeddafb4d 100644 Binary files a/doc/context/documents/general/qrcs/setup-de.pdf and b/doc/context/documents/general/qrcs/setup-de.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf index cb68e8fb6..aa9814dbc 100644 Binary files a/doc/context/documents/general/qrcs/setup-en.pdf and b/doc/context/documents/general/qrcs/setup-en.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf index 5daf8fa42..3edc6d13e 100644 Binary files a/doc/context/documents/general/qrcs/setup-fr.pdf and b/doc/context/documents/general/qrcs/setup-fr.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf index ab4406a38..337678187 100644 Binary files a/doc/context/documents/general/qrcs/setup-it.pdf and b/doc/context/documents/general/qrcs/setup-it.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf index 7bc3a22e6..06d55d46e 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf and b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf index 9c12fe1a6..b6b7b270e 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-de.pdf and b/doc/context/documents/general/qrcs/setup-mapping-de.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf index 44aeee439..6052b6038 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-en.pdf and b/doc/context/documents/general/qrcs/setup-mapping-en.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf index 0eb4d6fae..286527d96 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf and b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf index bc5abcef8..89f8654f8 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-it.pdf and b/doc/context/documents/general/qrcs/setup-mapping-it.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf index b90149a88..6136b3572 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf and b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf index a4b56e33b..4c968a809 100644 Binary files a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf and b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf index a7fd5435c..39f030c23 100644 Binary files a/doc/context/documents/general/qrcs/setup-nl.pdf and b/doc/context/documents/general/qrcs/setup-nl.pdf differ diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf index 7d32f4a45..cbed92711 100644 Binary files a/doc/context/documents/general/qrcs/setup-ro.pdf and b/doc/context/documents/general/qrcs/setup-ro.pdf differ diff --git a/metapost/context/base/mpiv/mp-asnc.mpiv b/metapost/context/base/mpiv/mp-asnc.mpiv index fba182a64..2eb409124 100644 --- a/metapost/context/base/mpiv/mp-asnc.mpiv +++ b/metapost/context/base/mpiv/mp-asnc.mpiv @@ -15,163 +15,103 @@ if known context_asnc : endinput ; fi ; boolean context_asnc ; context_asnc := true ; -% will be replaced - -numeric sync_n[], sync_p[][], sync_w[][], sync_h[][], sync_d[][], sync_t[][] ; -pair sync_xy[][] ; color sync_c[][] ; - -def ResetSyncTasks = - path SyncPaths[] ; numeric SyncTasks[], NOfSyncPaths, CurrentSyncClass ; - NOfSyncPaths := CurrentSyncClass := 0 ; - if unknown SyncLeftOffset : numeric SyncLeftOffset ; SyncLeftOffset := 0 ; fi ; - if unknown SyncWidth : numeric SyncWidth ; SyncWidth := 0 ; fi ; - if unknown SyncThreshold : numeric SyncThreshold ; SyncThreshold := LineHeight ; fi ; - if unknown SyncColor : color SyncColor ; SyncColor := .5white ; fi ; - if (SyncLeftOffset = 0) and (SyncWidth = 0) : - SyncWidth := if known TextWidth : TextWidth else : -1cm fi ; +%D This is a rather old mechanism that we once needed in an actually nice +%D design. Those were the times that processing a rather complex xml file +%D with pdftex into a 400 page document took 45 minutes (a few runs) while +%D nowadays with luatex and mkiv we express runtime in seconds. +%D +%D The logic is mostly the same but some work is delegated to Lua so that +%D we save memory and also run faster. As this was not really a used module +%D the interface also was upgraded. As we know the bottlenecks in mp we also +%D work around it a bit. + +numeric mfun_sync_count ; +numeric mfun_sync_page ; + +vardef StartSync(expr n) = + numeric CurrentSyncClass ; CurrentSyncClass := n ; + numeric SyncHOffset ; SyncHOffset := 0 ; + numeric SyncVOffset ; SyncVOffset := 0 ; + numeric SyncWidth ; SyncWidth := 0 ; + path SyncPaths[] ; + numeric SyncTasks[] ; + numeric SyncKinds[] ; + % + mfun_sync_page := RealPageNumber ; + mfun_sync_count := 0 ; +enddef ; + +def StopSync = + % maybe some cleanup +enddef ; + +vardef CollectSyncDataPage = + mfun_sync_count := lua.mp.sync_collect(CurrentSyncClass,mfun_sync_page) ; +enddef ; + +vardef CollectSyncDataRegion(expr region) = + mfun_sync_count := lua.mp.sync_collect(CurrentSyncClass,mfun_sync_page,region) ; +enddef ; + +vardef MakeSyncPaths = + if mfun_sync_count > 0 : + save k, t, b ; + save l ; l := SyncHOffset ; + save r ; r := SyncHOffset + SyncWidth ; + save y ; y := lua.mp.sync_get_y() + SyncVOffset ; + for i=1 upto mfun_sync_count : + k := lua.mp.sync_get_kind(i) ; + t := lua.mp.sync_get_top(i) - y ; + b := lua.mp.sync_get_bottom(i) - y ; + SyncPaths[i] = ((l,t) -- (r,t) -- (r,b) -- (l,b) -- cycle) ; + SyncTasks[i] = lua.mp.sync_get_task(i) ; + SyncKinds[i] = k ; + endfor ; fi ; enddef ; -ResetSyncTasks ; +% Extend to the top of the text area. -vardef SyncBox(expr n, i, leftoffset, width, topoffset, bottomoffset) = - save o ; pair o ; o := (xpart llcorner PlainTextArea,ypart sync_xy[n][i]) ; - o shifted (leftoffset,sync_h[n][i]+topoffset) -- - o shifted (width+leftoffset,sync_h[n][i]+topoffset) -- - o shifted (width+leftoffset,bottomoffset) -- - o shifted (leftoffset,bottomoffset) -- cycle +vardef ExtendSyncPaths = + mfun_sync_count := lua.mp.sync_extend() ; enddef ; -def SetSyncColor(expr n, i, c) = - sync_c[n][i] := c ; +% Clip to the text area. + +vardef PruneSyncPaths = + mfun_sync_count := lua.mp.sync_prune() ; enddef ; -def SetSyncThreshold(expr n, i, th) = - sync_th[n][i] := th ; +% Remove duplicate tasks + +vardef CollapseSyncPaths = + mfun_sync_count := lua.mp.sync_collapse() ; enddef ; -vardef TheSyncColor(expr n, i) = - if known sync_c[n][i] : sync_c[n][i] else : SyncColor fi +def SetSyncColor(expr n, i, c) = + lua.mp.sync_set_color(n,i,c) ; enddef ; -vardef TheSyncThreshold(expr n, i) = - if known sync_th[n][i] : sync_th[n][i] else : SyncThreshold fi +vardef TheSyncColor(expr n, i) = + lua.mp.sync_get_color(n,i) enddef ; -vardef PrepareSyncTasks(expr n, collapse, extendtop, prestartnext) = - ResetSyncTasks ; - if known sync_n[n] : - CurrentSyncClass := n ; - save ok, l, d ; boolean ok ; ok := false ; NOfSyncPaths := l := 0 ; - for i=1 upto sync_n[n] : - if RealPageNumber > sync_p[n][i] : - l := i ; - elseif RealPageNumber = sync_p[n][i] : - NOfSyncPaths := NOfSyncPaths + 1 ; - if not ok : - if i>1 : - if sync_t[n][i-1] = sync_t[n][i] : - SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := i ; - else : - SyncPaths[NOfSyncPaths] := SyncBox(n, i-1, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := i-1 ; - NOfSyncPaths := NOfSyncPaths + 1 ; - SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := i ; - fi ; - else : - SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := i ; - fi ; - else : - SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := i ; - fi ; - ok := true ; - fi ; - endfor ; - if (NOfSyncPaths = 0) and (l > 0) : - NOfSyncPaths := 1 ; - SyncPaths[NOfSyncPaths] := SyncBox(n, l, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; - SyncTasks[NOfSyncPaths] := l ; - fi ; - if NOfSyncPaths > 0 : - for i = 1 upto NOfSyncPaths-1 : - SyncPaths[i] := topboundary SyncPaths[i] -- reverse topboundary SyncPaths[i+1] -- cycle ; - endfor ; - if unknown SyncThresholdMethod : - numeric SyncThresholdMethod ; SyncThresholdMethod := 2 ; - fi ; - if extendtop : - if SyncThresholdMethod = 1 : - if NOfSyncPaths>1 : - d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[2]]) ; - if (SyncTasks[2]>1) and (d > 0pt) and (d <= TheSyncThreshold(n,sync_t[n][SyncTasks[2]])) and (sync_p[n][SyncTasks[2]] = RealPageNumber) : - SyncPaths[2] := SyncPaths[2] topenlarged PaperHeight ; - fi ; - fi ; - else : - for i = 1 upto NOfSyncPaths : - d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[i]]) ; - if (d > 0) and (d <= TheSyncThreshold(n,sync_t[n][SyncTasks[i]])) and (sync_p[n][SyncTasks[i]] = RealPageNumber) : - SyncPaths[i] := SyncPaths[i] topenlarged PaperHeight ; - fi ; - endfor ; - fi ; - fi ; - if prestartnext : - if NOfSyncPaths>1 : - if SyncTasks[NOfSyncPaths] < sync_n[n] : % there is a next one - d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[NOfSyncPaths]+1]) ; - if (d > 0) and (d <= TheSyncThreshold(n, sync_t[n][SyncTasks[i]])) and (sync_p[n][SyncTasks[NOfSyncPaths]+1] = RealPageNumber+1) : - SyncPaths[NOfSyncPaths+1] := - (xpart ulcorner SyncPaths[NOfSyncPaths],ypart llcorner PlainTextArea) -- - (xpart urcorner SyncPaths[NOfSyncPaths],ypart llcorner PlainTextArea) -- - lrcorner SyncPaths[NOfSyncPaths] -- - llcorner SyncPaths[NOfSyncPaths] -- cycle ; - SyncTasks[NOfSyncPaths+1] := SyncTasks[NOfSyncPaths]+1 ; - NOfSyncPaths := NOfSyncPaths + 1 ; - fi ; - fi ; - fi ; - else : - if NOfSyncPaths>1 : - d := ypart (sync_xy[n][SyncTasks[NOfSyncPaths]] - llcorner PlainTextArea) ; - if (d < TheSyncThreshold(n, SyncTasks[NOfSyncPaths])) : - NOfSyncPaths := NOfSyncPaths - 1 ; - SyncPaths[NOfSyncPaths] := SyncPaths[NOfSyncPaths] bottomenlarged PaperHeight ; - fi ; - fi ; - fi ; - if (NOfSyncPaths>1) and collapse : - save j ; numeric j ; j := 1 ; - for i = 2 upto NOfSyncPaths : - if sync_t[n][SyncTasks[i]] = sync_t[n][SyncTasks[j]] : - SyncPaths[j] := boundingbox image (draw SyncPaths[i] ; draw SyncPaths[j] ; ) ; - SyncTasks[j] := SyncTasks[i] ; - else : - j := j + 1 ; - SyncPaths[j] := SyncPaths[i] ; - SyncTasks[j] := SyncTasks[i] ; - fi ; - endfor ; - NOfSyncPaths := j ; - fi ; - fi ; - fi ; +vardef SyncPathColor(expr i) = + lua.mp.sync_get_color(CurrentSyncClass,SyncTasks[i]) enddef ; -def SyncTask(expr n) = - if known SyncTasks[n] : SyncTasks[n] else : 0 fi +def DrawSyncPaths = + for i=1 upto NOfSyncPaths : + draw SyncPaths[i] withcolor SyncPathColor(i) ; + endfor ; enddef ; -def FlushSyncTasks = - for i = 1 upto NOfSyncPaths : - ProcessSyncTask(SyncPaths[i], TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]])) ; +def FillSyncPaths = + for i=1 upto NOfSyncPaths : + fill SyncPaths[i] withcolor SyncPathColor(i) ; endfor ; enddef ; -def ProcessSyncTask(expr p, c) = - fill p withcolor c ; +vardef NOfSyncPaths = + mfun_sync_count enddef ; diff --git a/metapost/context/base/mpiv/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv index b80d2b564..be061a71f 100644 --- a/metapost/context/base/mpiv/mp-mlib.mpiv +++ b/metapost/context/base/mpiv/mp-mlib.mpiv @@ -1528,14 +1528,14 @@ vardef mfun_path_to_table(expr p) = "{" & mfun_point_to_table(p,0) for i=1 upto length(p) : & "," & mfun_point_to_table(p,i) endfor & "}" enddef ; -vardef mfun_rgbcolor_to_table(expr c) = +vardef mfun_rgb_to_table(expr c) = "{" & decimal redpart c & "," & decimal greenpart c & "," & decimal bluepart c & "}" enddef ; -vardef mfun_cmykcolor_to_table(expr c) = +vardef mfun_cmyk_to_table(expr c) = "{" & decimal cyanpart c & "," & decimal magentapart c & "," & decimal yellowpart c & @@ -1543,7 +1543,7 @@ vardef mfun_cmykcolor_to_table(expr c) = "}" enddef ; -vardef mfun_greycolor_to_string(expr n) = +vardef mfun_grey_to_string(expr n) = decimal n enddef ; diff --git a/metapost/context/base/mpiv/mp-page.mpiv b/metapost/context/base/mpiv/mp-page.mpiv index 0571bcc92..eba66a005 100644 --- a/metapost/context/base/mpiv/mp-page.mpiv +++ b/metapost/context/base/mpiv/mp-page.mpiv @@ -321,6 +321,7 @@ vardef OverlayHeight = lua.mp.OverlayHeight () enddef ; vardef OverlayDepth = lua.mp.OverlayDepth () enddef ; vardef OverlayLineWidth = lua.mp.OverlayLineWidth() enddef ; vardef OverlayOffset = lua.mp.OverlayOffset () enddef ; +vardef OverlayRegion = lua.mp.OverlayRegion () enddef ; vardef defaultcolormodel = lua.mp.mf_default_color_model() enddef ; diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 8619ceb1d..a85963429 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -11069,7 +11069,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-soc-imp-http"] = package.loaded["util-soc-imp-http"] or true --- original size: 12537, stripped down to: 10036 +-- original size: 12577, stripped down to: 10069 local tostring,tonumber,setmetatable,next,type=tostring,tonumber,setmetatable,next,type @@ -11099,6 +11099,7 @@ local pumpstep=ltn12.pump.step local pumpall=ltn12.pump.all local sinknull=ltn12.sink.null local sinktable=ltn12.sink.table +local lowerheaders=headers.lower local mimeb64=mime.b64 local http={ TIMEOUT=60, @@ -24582,8 +24583,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 : 982404 --- stripped bytes : 347112 +-- original bytes : 982444 +-- stripped bytes : 347119 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 8619ceb1d..a85963429 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -11069,7 +11069,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-soc-imp-http"] = package.loaded["util-soc-imp-http"] or true --- original size: 12537, stripped down to: 10036 +-- original size: 12577, stripped down to: 10069 local tostring,tonumber,setmetatable,next,type=tostring,tonumber,setmetatable,next,type @@ -11099,6 +11099,7 @@ local pumpstep=ltn12.pump.step local pumpall=ltn12.pump.all local sinknull=ltn12.sink.null local sinktable=ltn12.sink.table +local lowerheaders=headers.lower local mimeb64=mime.b64 local http={ TIMEOUT=60, @@ -24582,8 +24583,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 : 982404 --- stripped bytes : 347112 +-- original bytes : 982444 +-- stripped bytes : 347119 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 8619ceb1d..a85963429 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -11069,7 +11069,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-soc-imp-http"] = package.loaded["util-soc-imp-http"] or true --- original size: 12537, stripped down to: 10036 +-- original size: 12577, stripped down to: 10069 local tostring,tonumber,setmetatable,next,type=tostring,tonumber,setmetatable,next,type @@ -11099,6 +11099,7 @@ local pumpstep=ltn12.pump.step local pumpall=ltn12.pump.all local sinknull=ltn12.sink.null local sinktable=ltn12.sink.table +local lowerheaders=headers.lower local mimeb64=mime.b64 local http={ TIMEOUT=60, @@ -24582,8 +24583,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 : 982404 --- stripped bytes : 347112 +-- original bytes : 982444 +-- stripped bytes : 347119 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 8619ceb1d..a85963429 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -11069,7 +11069,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-soc-imp-http"] = package.loaded["util-soc-imp-http"] or true --- original size: 12537, stripped down to: 10036 +-- original size: 12577, stripped down to: 10069 local tostring,tonumber,setmetatable,next,type=tostring,tonumber,setmetatable,next,type @@ -11099,6 +11099,7 @@ local pumpstep=ltn12.pump.step local pumpall=ltn12.pump.all local sinknull=ltn12.sink.null local sinktable=ltn12.sink.table +local lowerheaders=headers.lower local mimeb64=mime.b64 local http={ TIMEOUT=60, @@ -24582,8 +24583,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 : 982404 --- stripped bytes : 347112 +-- original bytes : 982444 +-- stripped bytes : 347119 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 364702cad..9fc06651d 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.08.28 17:21} +\newcontextversion{2018.08.30 18:41} %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 956cd702b..d07e196e7 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.08.28 17:21} +\edef\contextversion{2018.08.30 18:41} %D For those who want to use this: diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua index 11883ba59..4767aa259 100644 --- a/tex/context/base/mkiv/anch-pos.lua +++ b/tex/context/base/mkiv/anch-pos.lua @@ -535,6 +535,8 @@ end jobpositions.b_region = b_region jobpositions.e_region = e_region +local lastregion + local function setregionbox(n,tag,k,lo,ro,to,bo) -- kind if not tag or tag == "" then nofregions = nofregions + 1 @@ -556,6 +558,7 @@ local function setregionbox(n,tag,k,lo,ro,to,bo) -- kind to = to ~= 0 and to or nil, bo = bo ~= 0 and bo or nil, } + lastregion = tag return tag, box end @@ -566,10 +569,11 @@ local function markregionbox(n,tag,correct,...) -- correct needs checking local pop = new_latelua(function() e_region(correct) end) -- maybe we should construct a hbox first (needs experimenting) so that we can avoid some at the tex end local head = getlist(box) - if getid(box) ~= hlist_code then - -- report("mark region box assumes a hlist, fix this for %a",tag) - head = hpack(head) - end + -- no, this fails with \framed[region=...] .. needs thinking + -- if getid(box) ~= hlist_code then + -- -- report("mark region box assumes a hlist, fix this for %a",tag) + -- head = hpack(head) + -- end if head then local tail = find_tail(head) setlink(push,head) @@ -1398,6 +1402,11 @@ scanners.markregionboxtaggedkind = function() -- box tag kind scaninteger(),scandimen(),scandimen(),scandimen(),scandimen()) end +scanners.reservedautoregiontag = function() + nofregions = nofregions + 1 + context(f_region(nofregions)) +end + -- statistics (at least for the moment, when testing) -- statistics.register("positions", function() diff --git a/tex/context/base/mkiv/anch-pos.mkiv b/tex/context/base/mkiv/anch-pos.mkiv index dd24bdb08..fbebb5f17 100644 --- a/tex/context/base/mkiv/anch-pos.mkiv +++ b/tex/context/base/mkiv/anch-pos.mkiv @@ -330,6 +330,8 @@ #6\relax % bottomoffset \fi} +\def\reservedautoregiontag{\clf_reservedautoregiontag} + %D We can copy a position with: %D %D \starttyping diff --git a/tex/context/base/mkiv/anch-snc.lua b/tex/context/base/mkiv/anch-snc.lua new file mode 100644 index 000000000..8006f3bd6 --- /dev/null +++ b/tex/context/base/mkiv/anch-snc.lua @@ -0,0 +1,271 @@ +if not modules then modules = { } end modules ['anch-snc'] = { + version = 1.001, + comment = "companion to anch-snc.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + + +function mp.xxOverlayRegion() + local r = tokens.getters.macro("m_overlay_region") + mp.quoted('"'.. r .. '"') +-- mp.print('"'.. r .. '"') +end + +-- use factors as in mlib-int.lua + +local tonumber, next, setmetatable = tonumber, next, setmetatable +local concat, sort, remove, copy = table.concat, table.sort, table.remove, table.copy +local match, find = string.match, string.find +local lpegmatch = lpeg.match + +local setmetatableindex = table.setmetatableindex + +local factor = number.dimenfactors.bp +local mpprint = mp.print +local mpnumeric = mp.numeric +local mppoints = mp.points +local texgetdimen = tex.getdimen + +local p_number = lpeg.patterns.cardinal/tonumber +local p_space = lpeg.patterns.whitespace^0 +local p_tag = lpeg.P("syncpos:") * p_number * lpeg.P(":") * p_number +local p_option = p_number -- for now + * ((lpeg.P(",") * p_space * lpeg.P("reset") * lpeg.Cc(true)) + lpeg.Cc(false)) + +local list = { } +local colors = setmetatableindex("table") + +local kinds = { + above = 1, + continue = 2, + nothing = 3, + normal = 4, + below = 5, +} + +local allentries = setmetatableindex(function(t,category) + setmetatable(t,nil) + for tag, pos in next, job.positions.collected do + local c, n = lpegmatch(p_tag,tag) + if c then + local tc = t[c] + if tc then + tc[n] = pos + else + t[c] = { [n] = pos } + end + end + end + for k, list in next, t do + sort(list,function(a,b) + local ap = a.p + local bp = b.p + if ap == bp then + return b.y < a.y + else + return ap < bp + end + end) + list.start = 1 + end + setmetatableindex(t,"table") + return t[category] +end) + +local lastdone = { } + +function mp.sync_collect(category,realpage,useregion) + local all = allentries[category] + local m = 0 + local n = #all + list = { } + if useregion then + -- successive can be optimized when we sort by region + local start = 1 + local done = false + local last, rtop, rbot + for i=start,n do + local pos = all[i] + local p = pos.p + local r = pos.r + if r == useregion then + if not done then + local region = job.positions.collected[r] + list.region = region + list.page = region + rtop = (region.y or 0) + (region.h or 0) + rbot = (region.y or 0) - (region.d or 0) + last = { kind = "nothing", top = rtop, bottom = 0, task = 0 } + m = m + 1 ; list[m] = last + done = true + end + local top = pos.y + pos.h + last.bottom = top + local task, reset = lpegmatch(p_option,pos.e) + last = { kind = "normal", top = top, bottom = 0, task = task } + m = m + 1 ; list[m] = last + end + end + if done then + last.bottom = rbot + end + else + local start = all.start or 1 + local done = false + local last, rtop, rbot, ptop, pbot + for i=start,n do + local pos = all[i] + local p = pos.p + if p == realpage then + if not done then + local region = job.positions.collected[pos.r] + local page = job.positions.collected["page:"..realpage] or region + list.region = region + list.page = page + rtop = (region.y or 0) + (region.h or 0) + rbot = (region.y or 0) - (region.d or 0) + ptop = (page .y or 0) + (page .h or 0) + pbot = (page .y or 0) - (page .d or 0) + last = { kind = "above", top = ptop, bottom = rtop, task = 0 } + m = m + 1 ; list[m] = last + if i > 1 then + local task, reset = lpegmatch(p_option,all[i-1].e) + last = { kind = "continue", top = rtop, bottom = 0, task = task } + m = m + 1 ; list[m] = last + else + last = { kind = "nothing", top = rtop, bottom = 0, task = 0 } + m = m + 1 ; list[m] = last + end + done = true + end + local top = pos.y + pos.h + last.bottom = top + local task, reset = lpegmatch(p_option,pos.e) + if reset then + local l = list[2] + l.kind = "nothing" + l.task = 0 + end + last = { kind = "normal", top = top, bottom = 0, task = task } + m = m + 1 ; list[m] = last + elseif p > realpage then + all.start = i -- tricky, only for page + break + end + end + if done then + last.bottom = rbot + last = { kind = "below", top = rbot, bottom = pbot, task = 0 } + m = m + 1 ; list[m] = last + lastdone[category] = { + { kind = "above", top = ptop, bottom = rtop, task = 0 }, + { kind = "continue", top = rtop, bottom = rbot, task = list[#list-1].task }, -- lasttask + { kind = "below", top = rbot, bottom = pbot, task = 0 }, + region = list.region, + page = list.page, + } + else + local l = lastdone[category] + if l then + list = copy(l) -- inefficient, mayb emetatable for region/page + m = 3 + end + end + end + mpnumeric(m) +end + +function mp.sync_extend() + local n = #list + if n > 0 then + for i=1,n do + local l = list[i] + local k = l.kind + if k == "nothing" then + local ll = list[i+1] + if ll and ll.kind == "normal" then + ll.top = l.top + remove(list,i) + n = #list + break + end + end + end + end + mpnumeric(n) +end + +function mp.sync_prune() + local n = #list + if n > 0 then + if list[1].kind == "above" then + remove(list,1) + end + if list[1].kind == "nothing" then + remove(list,1) + end + if list[#list].kind == "below" then + remove(list,#list) + end + n = #list + end + mpnumeric(n) +end + +function mp.sync_collapse() + local n = #list + if n > 0 then + local m = 0 + local p = nil + for i=1,n do + local l = list[i] + local t = l.task + if p == t then + list[m].bottom = l.bottom + else + m = m + 1 + list[m] = l + end + p = t + end + for i=n,m+1,-1 do + list[i] = nil + end + n = m + end + mpnumeric(n) +end + +function mp.sync_set_color(category,n,v) + colors[category][n] = v +end + +function mp.sync_get_color(category,n) + mpprint(colors[category][n]) +end + +-- function mp.sync_get_size () mpnumeric(#list) end +-- function mp.sync_get_top (n) mppoints (list[n].top) end +-- function mp.sync_get_bottom(n) mppoints (list[n].bottom) end +-- function mp.sync_get_kind (n) mpnumeric(kinds[list[n].kind]) end +-- function mp.sync_get_task (n) mpnumeric(list[n].task) end + +-- function mp.sync_get_x() mppoints(list.page.x or 0) end +-- function mp.sync_get_y() mppoints(list.page.y or 0) end +-- function mp.sync_get_w() mppoints(list.page.w or 0) end +-- function mp.sync_get_h() mppoints(list.page.h or 0) end +-- function mp.sync_get_d() mppoints(list.page.d or 0) end + +function mp.sync_get_size () mpnumeric(#list) end +function mp.sync_get_top (n) mpnumeric(list[n].top * factor) end +function mp.sync_get_bottom(n) mpnumeric(list[n].bottom * factor) end +function mp.sync_get_kind (n) mpnumeric(kinds[list[n].kind]) end +function mp.sync_get_task (n) mpnumeric(list[n].task) end + +function mp.sync_get_x() mpnumeric((list.page.x or 0)*factor) end +function mp.sync_get_y() mpnumeric((list.page.y or 0)*factor) end +function mp.sync_get_w() mpnumeric((list.page.w or 0)*factor) end +function mp.sync_get_h() mpnumeric((list.page.h or 0)*factor) end +function mp.sync_get_d() mpnumeric((list.page.d or 0)*factor) end diff --git a/tex/context/base/mkiv/anch-snc.mkiv b/tex/context/base/mkiv/anch-snc.mkiv index fd6179bc4..5f0246155 100644 --- a/tex/context/base/mkiv/anch-snc.mkiv +++ b/tex/context/base/mkiv/anch-snc.mkiv @@ -1,6 +1,6 @@ %D \module %D [ file=anch-snc, -%D version=2003.12.01, +%D version=2003.12.01, % actually 1999 so real old %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Synchronization, %D author=Hans Hagen, @@ -11,152 +11,42 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -% this can be optimized (will do when used again) +%D The original is in the mkii file. It does more at the \TEX\ end and +%D has some more magic. If we really need that I'll add it. After all, +%D in mkiv we can do things different. + +%D TODO: bleed : + left , minus right oro check if it touches page ... autobleed \writestatus{loading}{ConTeXt Anchoring Macros / Synchronization} +\registerctxluafile{anch-snc}{} + \unprotect -\ifx\s!num \undefined \def\s!num {num} \fi -\ifx\s!set \undefined \def\s!set {set} \fi -\ifx\s!reset \undefined \def\s!reset {reset} \fi -\ifx\s!preset \undefined \def\s!preset {preset} \fi -\ifx\s!syncpos\undefined \def\s!syncpos{syncpos} \fi +\ifx\??syncposcounter\undefined \installcorenamespace{syncposcounter} \fi +\ifx\s!syncpos \undefined \def\s!syncpos {syncpos} \fi + +\let\c_sync_n\relax \unexpanded\def\definesyncpositions[#1]% - {\ifcsname\s!num:\s!syncpos:#1\endcsname \else - \glet\flushsyncpositions\doflushsyncpositions % only when used - \glet\flushsyncresets \doflushsyncresets - \glet\flushsyncpresets \doflushsyncpresets - \expandafter\newcount\csname\s!num:\s!syncpos:#1\endcsname - \doglobal\appendtoksonce\csname\s!reset :\s!syncpos:#1\endcsname\to\resetsyncpositions - \doglobal\appendtoksonce\csname\s!preset:\s!syncpos:#1\endcsname\to\presetsyncpositions -% to be tested: -% \doglobal\expandafter\appendtoksonce\csname\s!reset :\s!syncpos:#1\endcsname\to\resetsyncpositions -% \doglobal\expandafter\appendtoksonce\csname\s!preset:\s!syncpos:#1\endcsname\to\presetsyncpositions - \setgvalue{\s!syncpos:#1}{sync_n[#1] := 0 ;}% - \setgvalue{\s!set:\s!syncpos:#1}{\dosetsyncpositions{#1}}% + {\ifcsname\??syncposcounter:#1\endcsname \else + \expandafter\newcount\csname\??syncposcounter:#1\endcsname \fi} -\def\syncposition - {\dodoubleempty\dosyncposition} - -\def\dosyncposition[#1][#2]% - {\letgvalue{\s!reset :\s!syncpos:#1}\relax - \letgvalue{\s!preset:\s!syncpos:#1}\relax - \dontleavehmode - \dodosyncposition{#1}{#2}\s!set - \ignorespaces} - -\def\doifelselastsyncposition#1#2% - {\doifelse{\lastsyncclass\lastsyncposition}{#1#2}} - -\let\doiflastsyncpositionelse\doifelselastsyncposition +\unexpanded\def\syncposition + {\dodoubleempty\anch_sync_position} -\def\dodosyncposition#1#2#3% - {\letgvalue{\s!reset:\s!syncpos:#1}\relax - \letgvalue{\s!preset:\s!syncpos:#1}\relax - \ifcsname\s!syncpos:#1\endcsname - \global\advance\csname\s!num:\s!syncpos:#1\endcsname\plusone - \setsyncpositions{#1}% - % option: geen w/h, alleen p 0 0 0 data - \setpositionplus{\s!syncpos:#1:\the\csname\s!num:\s!syncpos:#1\endcsname}{#2}\hpack{\strut}% +\def\anch_sync_position[#1][#2]% we could actually use par positions + {\dontleavehmode + \ifcsname\??syncposcounter:#1\endcsname + \let\c_sync_n\lastnamedcs + \global\advance\c_sync_n\plusone + \enabletextarearegistration + \setpositionplus{\s!syncpos:#1:\the\c_sync_n}{#2}\hpack{\strut}% \else \strut - \fi} - -\def\setsyncpositions#1% - {\enabletextarearegistration - \getvalue {\s!set:\s!syncpos:#1}% - \letgvalue{\s!set:\s!syncpos:#1}\relax} - -\def\dosetsyncpositions#1% - {\startnointerference % removing out of sync can best be done in mp - \scratchdimenone\maxdimen - \scratchcounterone\zerocount - \scratchcounterthree\zerocount - \doloop - {\doifelseposition{\s!syncpos:#1:\recurselevel} - {\scratchdimentwo\MPy{\s!syncpos:#1:\recurselevel}\relax - \scratchcountertwo\MPp{\s!syncpos:#1:\recurselevel}\relax - \ifnum\scratchcountertwo=\scratchcounterone % same page - \ifdim\scratchdimentwo>\scratchdimenone - \donefalse % out of order nodes - \else - \donetrue % nodes in order - \fi - \else - \donetrue % different page - \fi - \ifdone - \scratchcounterone\scratchcountertwo - \scratchdimenone\scratchdimentwo - \advance\scratchcounterthree\plusone - \edef\!!stringa{[#1][\the\scratchcounterthree]:=}% - \edef\!!stringc{\s!syncpos:#1:\the\scratchcounterthree}% - \edef\!!stringd{\MPplus\!!stringc{1}{0}}% - \setxvalue{\s!syncpos:#1}% - {\getsyncpositions{#1}% - sync_p \!!stringa \MPp \!!stringc ; - sync_xy\!!stringa \MPxy\!!stringc ; - sync_w \!!stringa \MPw \!!stringc ; - sync_h \!!stringa \MPh \!!stringc ; - sync_d \!!stringa \MPd \!!stringc ; - \ifx\!!stringd\empty \else - sync_t \!!stringa \!!stringd; - \fi}% - \fi} - {\setxvalue{\s!syncpos:#1}% - {\getsyncpositions{#1}% - sync_n[#1] := \the\scratchcounterthree ;} - \exitloop}}% - \stopnointerference} - -\def\getsyncpositions#1% - {\getvalue{\s!syncpos:#1}} - -\newtoks\resetsyncpositions -\newtoks\presetsyncpositions - -\def\resyncposition {\dodoubleargument\doresyncposition} -\def\presyncposition{\dodoubleargument\dopresyncposition} - -\def\dodoresyncposition #1#2{\dodosyncposition{#1}{#2}\s!reset} -\def\dodopresyncposition#1#2{\dodosyncposition{#1}{#2}\s!preset} - -\def\doresyncposition [#1][#2]{\setxvalue{\s!reset :\s!syncpos:#1}{\noexpand\dodoresyncposition{#1}{#2}}} -\def\dopresyncposition[#1][#2]{\setxvalue{\s!preset:\s!syncpos:#1}{\noexpand\dodopresyncposition{#1}{#2}}} - -\let\flushsyncpositions\relax - -\def\doflushsyncpositions % this order ! - {\begingroup - \the\presetsyncpositions - \the\resetsyncpositions - \endgroup} - -\def\flushsyncxxsets#1% - {\begingroup - \setbox\scratchbox\hbox{\the#1}% - \ifvoid\scratchbox\else - \prewordbreak - \smashbox\scratchbox - \box\scratchbox \fi - \endgroup} - -\let\flushsyncresets \relax -\let\flushsyncpresets\relax - -\def\doflushsyncresets {\flushsyncxxsets\resetsyncpositions } -\def\doflushsyncpresets{\flushsyncxxsets\presetsyncpositions} - -% \appendtoks \flushsyncpositions \to \everypar -% \appendtoks \flushsyncpositions \to \everyheadstart - -% \explicitneverypar -> in grid snapper, eerst testen -% -% \appendtoks \flushsyncpositions \to \neverypar + \ignorespaces} \protect @@ -171,47 +61,99 @@ \setupbodyfont[dejavu] \definesyncpositions[1] +\definesyncpositions[2] + +% \enabletrackers[metapost.lua] + +\startMPdefinitions + input "mp-asnc.mpiv" ; + + SetSyncColor(1,0,"magenta") ; + SetSyncColor(1,1,"red") ; + SetSyncColor(1,2,"green") ; + SetSyncColor(1,3,"blue") ; + SetSyncColor(1,4,"yellow") ; + + SetSyncColor(2,0,"magenta") ; + SetSyncColor(2,1,"red") ; + SetSyncColor(2,2,"green") ; + SetSyncColor(2,3,"blue") ; + SetSyncColor(2,4,"yellow") ; +\stopMPdefinitions + +\startuseMPgraphic{sync1} + StartPage ; + StartSync(1) ; + SyncHOffset := 0 ; + SyncWidth := BackSpace - LeftMarginDistance; + CollectSyncDataPage ; + % ExtendSyncPaths ; % to top of text area + PruneSyncPaths ; % clip top / bottom + CollapseSyncPaths ; + MakeSyncPaths ; + % DrawSyncPaths ; + FillSyncPaths ; + StopSync ; + clip currentpicture to Page ; + setbounds currentpicture to Page ; + StopPage ; +\stopuseMPgraphic -\startMPinclusions -% input "mp-core.mpiv"; - input "mp-asnc.mpiv"; -\stopMPinclusions - -\startuseMPgraphic{sync} - StartPage ; -vardef PlainTextArea = Field[Text][Text] enddef ; - \getsyncpositions{1} ; - SyncThreshold := 2LineHeight ; - SyncLeftOffset := -.5LeftMarginDistance ; - SetSyncThreshold(1,3,3LineHeight) ; - SyncWidth := - (BackSpace + SyncLeftOffset) ; - SetSyncColor(1,1,\MPcolor{red}) ; - SetSyncColor(1,2,\MPcolor{green}) ; - SetSyncColor(1,3,\MPcolor{blue}) ; - SetSyncColor(1,4,\MPcolor{yellow}) ; - PrepareSyncTasks(1,true,true,false) ; -% PrepareSyncTasks(1,true,true,true) ; - for i = 1 upto NOfSyncPaths : - fill SyncPaths[i] - withcolor TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]]) ; - endfor ; - clip - currentpicture to Page ; - setbounds currentpicture to Page ; - StopPage ; +\startuseMPgraphic{sync2} + StartSync(2) ; + SyncHOffset := -1cm ; + SyncWidth := 1cm ; + CollectSyncDataRegion(OverlayRegion) ; + ExtendSyncPaths ; % to top of text area + MakeSyncPaths ; + FillSyncPaths ; + StopSync ; + clip currentpicture to OverlayBox leftenlarged 1cm; + setbounds currentpicture to OverlayBox ; \stopuseMPgraphic -\defineoverlay[tempoverlay][\useMPgraphic{sync}] +\defineoverlay[tempoverlay1][\useMPgraphic{sync1}] +\defineoverlay[tempoverlay2][\useMPgraphic{sync2}] -\setupbackgrounds[page][background=tempoverlay] +\setupbackgrounds[page][background=tempoverlay1] + +\framed[region=yes,background=tempoverlay2,width=14cm,align=normal]{ + \syncposition[2][1]\samplefile{ward}\endgraf + \syncposition[2][2]\samplefile{ward}\endgraf + \syncposition[2][3]\samplefile{ward}\endgraf +} + + +\vskip1cm \hskip1cm \framed[region=yes,background=tempoverlay2,width=16cm,align=normal]{ + \syncposition[2][1]\samplefile{ward}\endgraf + \syncposition[2][2]\samplefile{ward}\endgraf + \syncposition[2][3]\samplefile{ward}\endgraf +} -\dorecurse {10} { +\vskip1cm \hskip1cm \framed[region=yes,background=tempoverlay2,width=10cm,align=normal]{ + \syncposition[2][1]\samplefile{ward}\endgraf + \syncposition[2][2]\samplefile{ward}\endgraf + \syncposition[2][3]\samplefile{ward}\endgraf +} + + +\dorecurse {100} { +% \dorecurse {1} { + \startchapter[title={Test #1}] + \syncposition[1][1,reset]\dorecurse{20}{\samplefile{ward}\endgraf} + \syncposition[1][2]\dorecurse {4}{\samplefile{ward}\endgraf} + \syncposition[1][3]\dorecurse {7}{\samplefile{ward}\endgraf} + \syncposition[1][4]\dorecurse {3}{\samplefile{ward}\endgraf} + \stopchapter +} +\dorecurse {100} { +% \dorecurse {1} { \startchapter[title={Test #1}] - \syncposition[1][1] \dorecurse{10}{\samplefile{ward}\endgraf} - \syncposition[1][2] \dorecurse {4}{\samplefile{ward}\endgraf} - \syncposition[1][3] \dorecurse {7}{\samplefile{ward}\endgraf} - \syncposition[1][4] \dorecurse {3}{\samplefile{ward}\endgraf} + \syncposition[1][1]\dorecurse{1}{\samplefile{ward}\endgraf} + \syncposition[1][2]\dorecurse{1}{\samplefile{ward}\endgraf} + \syncposition[1][3]\dorecurse{1}{\samplefile{ward}\endgraf} + \syncposition[1][4]\dorecurse{1}{\samplefile{ward}\endgraf} \stopchapter } diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 9c6151011..ae85906d2 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.08.28 17:21} +\newcontextversion{2018.08.30 18:41} %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 ea4327a95..51a644104 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.08.28 17:21} +\edef\contextversion{2018.08.30 18:41} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/mkiv/font-imp-quality.lua b/tex/context/base/mkiv/font-imp-quality.lua index dc063f28a..8da011cd7 100644 --- a/tex/context/base/mkiv/font-imp-quality.lua +++ b/tex/context/base/mkiv/font-imp-quality.lua @@ -212,9 +212,9 @@ vectors['pure'] = { vectors['punctuation'] = { [0x003F] = { 0, 0.20 }, -- ? - [0x00BF] = { 0, 0.20 }, -- ¿ + [0x00BF] = { 0.20, 0 }, -- ¿ [0x0021] = { 0, 0.20 }, -- ! - [0x00A1] = { 0, 0.20 }, -- ¡ + [0x00A1] = { 0.20, 0, }, -- ¡ [0x0028] = { 0.05, 0 }, -- ( [0x0029] = { 0, 0.05 }, -- ) [0x005B] = { 0.05, 0 }, -- [ diff --git a/tex/context/base/mkiv/mlib-int.lua b/tex/context/base/mkiv/mlib-int.lua index 5abc49a52..63e7278da 100644 --- a/tex/context/base/mkiv/mlib-int.lua +++ b/tex/context/base/mkiv/mlib-int.lua @@ -7,11 +7,14 @@ if not modules then modules = { } end modules ['mlib-int'] = { } local factor = number.dimenfactors.bp -local mpprint = mp.print ------ mpboolean = mp.boolean ------ mpquoted = mp.quoted +----- mpprint = mp.print +local mpnumeric = mp.numeric +local mpboolean = mp.boolean +local mpstring = mp.string +local mpquoted = mp.quoted local getdimen = tex.getdimen local getcount = tex.getcount +local getmacro = tokens.getters.macro local get = tex.get local mpcolor = attributes.colors.mpcolor local emwidths = fonts.hashes.emwidths @@ -19,79 +22,79 @@ local exheights = fonts.hashes.exheights local mpgetdimen = mp.getdimen -function mp.PaperHeight () mpprint(getdimen("paperheight") *factor) end -function mp.PaperWidth () mpprint(getdimen("paperwidth") *factor) end -function mp.PrintPaperHeight () mpprint(getdimen("printpaperheight") *factor) end -function mp.PrintPaperWidth () mpprint(getdimen("printpaperwidth") *factor) end -function mp.TopSpace () mpprint(getdimen("topspace") *factor) end -function mp.BottomSpace () mpprint(getdimen("bottomspace") *factor) end -function mp.BackSpace () mpprint(getdimen("backspace") *factor) end -function mp.CutSpace () mpprint(getdimen("cutspace") *factor) end -function mp.MakeupHeight () mpprint(getdimen("makeupheight") *factor) end -function mp.MakeupWidth () mpprint(getdimen("makeupwidth") *factor) end -function mp.TopHeight () mpprint(getdimen("topheight") *factor) end -function mp.TopDistance () mpprint(getdimen("topdistance") *factor) end -function mp.HeaderHeight () mpprint(getdimen("headerheight") *factor) end -function mp.HeaderDistance () mpprint(getdimen("headerdistance") *factor) end -function mp.TextHeight () mpprint(getdimen("textheight") *factor) end -function mp.FooterDistance () mpprint(getdimen("footerdistance") *factor) end -function mp.FooterHeight () mpprint(getdimen("footerheight") *factor) end -function mp.BottomDistance () mpprint(getdimen("bottomdistance") *factor) end -function mp.BottomHeight () mpprint(getdimen("bottomheight") *factor) end -function mp.LeftEdgeWidth () mpprint(getdimen("leftedgewidth") *factor) end -function mp.LeftEdgeDistance () mpprint(getdimen("leftedgedistance") *factor) end -function mp.LeftMarginWidth () mpprint(getdimen("leftmarginwidth") *factor) end -function mp.LeftMarginDistance () mpprint(getdimen("leftmargindistance") *factor) end -function mp.TextWidth () mpprint(getdimen("textwidth") *factor) end -function mp.RightMarginDistance () mpprint(getdimen("rightmargindistance") *factor) end -function mp.RightMarginWidth () mpprint(getdimen("rightmarginwidth") *factor) end -function mp.RightEdgeDistance () mpprint(getdimen("rightedgedistance") *factor) end -function mp.RightEdgeWidth () mpprint(getdimen("rightedgewidth") *factor) end -function mp.InnerMarginDistance () mpprint(getdimen("innermargindistance") *factor) end -function mp.InnerMarginWidth () mpprint(getdimen("innermarginwidth") *factor) end -function mp.OuterMarginDistance () mpprint(getdimen("outermargindistance") *factor) end -function mp.OuterMarginWidth () mpprint(getdimen("outermarginwidth") *factor) end -function mp.InnerEdgeDistance () mpprint(getdimen("inneredgedistance") *factor) end -function mp.InnerEdgeWidth () mpprint(getdimen("inneredgewidth") *factor) end -function mp.OuterEdgeDistance () mpprint(getdimen("outeredgedistance") *factor) end -function mp.OuterEdgeWidth () mpprint(getdimen("outeredgewidth") *factor) end -function mp.PageOffset () mpprint(getdimen("pagebackgroundoffset")*factor) end -function mp.PageDepth () mpprint(getdimen("pagebackgrounddepth") *factor) end -function mp.LayoutColumns () mpprint(getcount("layoutcolumns")) end -function mp.LayoutColumnDistance() mpprint(getdimen("layoutcolumndistance")*factor) end -function mp.LayoutColumnWidth () mpprint(getdimen("layoutcolumnwidth") *factor) end -function mp.SpineWidth () mpprint(getdimen("spinewidth") *factor) end -function mp.PaperBleed () mpprint(getdimen("paperbleed") *factor) end - -function mp.RealPageNumber () mpprint(getcount("realpageno")) end -function mp.LastPageNumber () mpprint(getcount("lastpageno")) end - -function mp.PageNumber () mpprint(getcount("pageno")) end -function mp.NOfPages () mpprint(getcount("lastpageno")) end - -function mp.SubPageNumber () mpprint(getcount("subpageno")) end -function mp.NOfSubPages () mpprint(getcount("lastsubpageno")) end - -function mp.CurrentColumn () mpprint(getcount("mofcolumns")) end -function mp.NOfColumns () mpprint(getcount("nofcolumns")) end - -function mp.BaseLineSkip () mpprint(get ("baselineskip",true) *factor) end -function mp.LineHeight () mpprint(getdimen("lineheight") *factor) end -function mp.BodyFontSize () mpprint(getdimen("bodyfontsize") *factor) end - -function mp.TopSkip () mpprint(get ("topskip",true) *factor) end -function mp.StrutHeight () mpprint(getdimen("strutht") *factor) end -function mp.StrutDepth () mpprint(getdimen("strutdp") *factor) end - -function mp.PageNumber () mpprint(getcount("pageno")) end -function mp.RealPageNumber () mpprint(getcount("realpageno")) end -function mp.NOfPages () mpprint(getcount("lastpageno")) end - -function mp.CurrentWidth () mpprint(get ("hsize") *factor) end -function mp.CurrentHeight () mpprint(get ("vsize") *factor) end - -function mp.EmWidth () mpprint(emwidths [false]*factor) end -function mp.ExHeight () mpprint(exheights[false]*factor) end +function mp.PaperHeight () mpnumeric(getdimen("paperheight") *factor) end +function mp.PaperWidth () mpnumeric(getdimen("paperwidth") *factor) end +function mp.PrintPaperHeight () mpnumeric(getdimen("printpaperheight") *factor) end +function mp.PrintPaperWidth () mpnumeric(getdimen("printpaperwidth") *factor) end +function mp.TopSpace () mpnumeric(getdimen("topspace") *factor) end +function mp.BottomSpace () mpnumeric(getdimen("bottomspace") *factor) end +function mp.BackSpace () mpnumeric(getdimen("backspace") *factor) end +function mp.CutSpace () mpnumeric(getdimen("cutspace") *factor) end +function mp.MakeupHeight () mpnumeric(getdimen("makeupheight") *factor) end +function mp.MakeupWidth () mpnumeric(getdimen("makeupwidth") *factor) end +function mp.TopHeight () mpnumeric(getdimen("topheight") *factor) end +function mp.TopDistance () mpnumeric(getdimen("topdistance") *factor) end +function mp.HeaderHeight () mpnumeric(getdimen("headerheight") *factor) end +function mp.HeaderDistance () mpnumeric(getdimen("headerdistance") *factor) end +function mp.TextHeight () mpnumeric(getdimen("textheight") *factor) end +function mp.FooterDistance () mpnumeric(getdimen("footerdistance") *factor) end +function mp.FooterHeight () mpnumeric(getdimen("footerheight") *factor) end +function mp.BottomDistance () mpnumeric(getdimen("bottomdistance") *factor) end +function mp.BottomHeight () mpnumeric(getdimen("bottomheight") *factor) end +function mp.LeftEdgeWidth () mpnumeric(getdimen("leftedgewidth") *factor) end +function mp.LeftEdgeDistance () mpnumeric(getdimen("leftedgedistance") *factor) end +function mp.LeftMarginWidth () mpnumeric(getdimen("leftmarginwidth") *factor) end +function mp.LeftMarginDistance () mpnumeric(getdimen("leftmargindistance") *factor) end +function mp.TextWidth () mpnumeric(getdimen("textwidth") *factor) end +function mp.RightMarginDistance () mpnumeric(getdimen("rightmargindistance") *factor) end +function mp.RightMarginWidth () mpnumeric(getdimen("rightmarginwidth") *factor) end +function mp.RightEdgeDistance () mpnumeric(getdimen("rightedgedistance") *factor) end +function mp.RightEdgeWidth () mpnumeric(getdimen("rightedgewidth") *factor) end +function mp.InnerMarginDistance () mpnumeric(getdimen("innermargindistance") *factor) end +function mp.InnerMarginWidth () mpnumeric(getdimen("innermarginwidth") *factor) end +function mp.OuterMarginDistance () mpnumeric(getdimen("outermargindistance") *factor) end +function mp.OuterMarginWidth () mpnumeric(getdimen("outermarginwidth") *factor) end +function mp.InnerEdgeDistance () mpnumeric(getdimen("inneredgedistance") *factor) end +function mp.InnerEdgeWidth () mpnumeric(getdimen("inneredgewidth") *factor) end +function mp.OuterEdgeDistance () mpnumeric(getdimen("outeredgedistance") *factor) end +function mp.OuterEdgeWidth () mpnumeric(getdimen("outeredgewidth") *factor) end +function mp.PageOffset () mpnumeric(getdimen("pagebackgroundoffset")*factor) end +function mp.PageDepth () mpnumeric(getdimen("pagebackgrounddepth") *factor) end +function mp.LayoutColumns () mpnumeric(getcount("layoutcolumns")) end +function mp.LayoutColumnDistance() mpnumeric(getdimen("layoutcolumndistance")*factor) end +function mp.LayoutColumnWidth () mpnumeric(getdimen("layoutcolumnwidth") *factor) end +function mp.SpineWidth () mpnumeric(getdimen("spinewidth") *factor) end +function mp.PaperBleed () mpnumeric(getdimen("paperbleed") *factor) end + +function mp.RealPageNumber () mpnumeric(getcount("realpageno")) end +function mp.LastPageNumber () mpnumeric(getcount("lastpageno")) end + +function mp.PageNumber () mpnumeric(getcount("pageno")) end +function mp.NOfPages () mpnumeric(getcount("lastpageno")) end + +function mp.SubPageNumber () mpnumeric(getcount("subpageno")) end +function mp.NOfSubPages () mpnumeric(getcount("lastsubpageno")) end + +function mp.CurrentColumn () mpnumeric(getcount("mofcolumns")) end +function mp.NOfColumns () mpnumeric(getcount("nofcolumns")) end + +function mp.BaseLineSkip () mpnumeric(get ("baselineskip",true) *factor) end +function mp.LineHeight () mpnumeric(getdimen("lineheight") *factor) end +function mp.BodyFontSize () mpnumeric(getdimen("bodyfontsize") *factor) end + +function mp.TopSkip () mpnumeric(get ("topskip",true) *factor) end +function mp.StrutHeight () mpnumeric(getdimen("strutht") *factor) end +function mp.StrutDepth () mpnumeric(getdimen("strutdp") *factor) end + +function mp.PageNumber () mpnumeric(getcount("pageno")) end +function mp.RealPageNumber () mpnumeric(getcount("realpageno")) end +function mp.NOfPages () mpnumeric(getcount("lastpageno")) end + +function mp.CurrentWidth () mpnumeric(get ("hsize") *factor) end +function mp.CurrentHeight () mpnumeric(get ("vsize") *factor) end + +function mp.EmWidth () mpnumeric(emwidths [false]*factor) end +function mp.ExHeight () mpnumeric(exheights[false]*factor) end mp.HSize = mp.CurrentWidth mp.VSize = mp.CurrentHeight @@ -100,9 +103,9 @@ mp.LastPageNumber = mp.NOfPages function mp.PageFraction() local lastpage = getcount("lastpageno") if lastpage > 1 then - mpprint((getcount("realpageno")-1)/(lastpage-1)) + mpnumeric((getcount("realpageno")-1)/(lastpage-1)) else - mpprint(1) + mpnumeric(1) end end @@ -112,21 +115,22 @@ local on_right = structures.pages.on_right local is_odd = structures.pages.is_odd local in_body = structures.pages.in_body -mp.OnRightPage = function() mpprint(on_right()) end -- needs checking -mp.OnOddPage = function() mpprint(is_odd ()) end -- needs checking -mp.InPageBody = function() mpprint(in_body ()) end -- needs checking +mp.OnRightPage = function() mpboolean(on_right()) end -- needs checking +mp.OnOddPage = function() mpboolean(is_odd ()) end -- needs checking +mp.InPageBody = function() mpboolean(in_body ()) end -- needs checking -- mp.CurrentLayout : \currentlayout -function mp.OverlayWidth () mpprint(getdimen("d_overlay_width") *factor) end -function mp.OverlayHeight () mpprint(getdimen("d_overlay_height") *factor) end -function mp.OverlayDepth () mpprint(getdimen("d_overlay_depth") *factor) end -function mp.OverlayLineWidth () mpprint(getdimen("d_overlay_linewidth")*factor) end -function mp.OverlayOffset () mpprint(getdimen("d_overlay_offset") *factor) end +function mp.OverlayWidth () mpnumeric(getdimen("d_overlay_width") * factor) end +function mp.OverlayHeight () mpnumeric(getdimen("d_overlay_height") * factor) end +function mp.OverlayDepth () mpnumeric(getdimen("d_overlay_depth") * factor) end +function mp.OverlayLineWidth() mpnumeric(getdimen("d_overlay_linewidth") * factor) end +function mp.OverlayOffset () mpnumeric(getdimen("d_overlay_offset") * factor) end +function mp.OverlayRegion () mpstring(getmacro("m_overlay_region")) end function mp.mf_default_color_model() local colormethod = getcount("MPcolormethod") - return mpprint((colormethod == 0 or colormethod == 1) and 1 or 3) + return mpnumeric((colormethod == 0 or colormethod == 1) and 1 or 3) end -- not much difference (10000 calls in a graphic neither as expansion seems to win diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua index 9a6a284d8..09169e155 100644 --- a/tex/context/base/mkiv/mlib-lua.lua +++ b/tex/context/base/mkiv/mlib-lua.lua @@ -148,53 +148,92 @@ do mp.cleaned = function(s) return lpegmatch(p,s) or s end - local function mpprint(...) -- we can optimize for n=1 - for i=1,select("#",...) do - local value = select(i,...) - if value ~= nil then - n = n + 1 - local t = type(value) - if t == "number" then - buffer[n] = f_numeric(value) - elseif t == "string" then - buffer[n] = value - elseif t == "table" then - buffer[n] = "(" .. concat(value,",") .. ")" - else -- boolean or whatever - buffer[n] = tostring(value) + -- local function mpprint(...) -- we can optimize for n=1 + -- for i=1,select("#",...) do + -- local value = (select(i,...)) + -- if value ~= nil then + -- n = n + 1 + -- local t = type(value) + -- if t == "number" then + -- buffer[n] = f_numeric(value) + -- elseif t == "string" then + -- buffer[n] = value + -- elseif t == "table" then + -- buffer[n] = "(" .. concat(value,",") .. ")" + -- else -- boolean or whatever + -- buffer[n] = tostring(value) + -- end + -- end + -- end + -- end + + local function mpp(value) + n = n + 1 + local t = type(value) + if t == "number" then + buffer[n] = f_numeric(value) + elseif t == "string" then + buffer[n] = value + elseif t == "table" then + buffer[n] = "(" .. concat(value,",") .. ")" + else -- boolean or whatever + buffer[n] = tostring(value) + end + end + + local function mpprint(first,second,...) + if second == nil then + if first ~= nil then + mpp(first) + end + else + for i=1,select("#",first,second,...) do + local value = (select(i,first,second,...)) + if value ~= nil then + mpp(value) end end end end - local function mpvprint(...) -- variable print - for i=1,select("#",...) do - local value = select(i,...) - if value ~= nil then - n = n + 1 - local t = type(value) - if t == "number" then - buffer[n] = f_numeric(value) - elseif t == "string" then - buffer[n] = lpegmatch(p,value) - elseif t == "table" then - local m = #t - if m == 2 then - buffer[n] = f_pair(unpack(t)) - elseif m == 3 then - buffer[n] = f_triplet(unpack(t)) - elseif m == 4 then - buffer[n] = f_quadruple(unpack(t)) - else -- error - buffer[n] = "" - end - else -- boolean or whatever - buffer[n] = tostring(value) + local function mpp(value) + n = n + 1 + local t = type(value) + if t == "number" then + buffer[n] = f_numeric(value) + elseif t == "string" then + buffer[n] = lpegmatch(p,value) + elseif t == "table" then + if #t > 4 then + buffer[n] = "" + else + buffer[n] = "(" .. concat(value,",") .. ")" + end + else -- boolean or whatever + buffer[n] = tostring(value) + end + end + + local function mpvprint(first,second,...) -- variable print + if second == nil then + if first ~= nil then + mpp(first) + end + else + for i=1,select("#",first,second,...) do + local value = (select(i,first,second,...)) + if value ~= nil then + mpp(value) end end end end + local function mpstring(value) + n = n + 1 + buffer[n] = lpegmatch(p,value) + end + local function mpboolean(b) n = n + 1 buffer[n] = b and "true" or "false" @@ -202,7 +241,11 @@ do local function mpnumeric(f) n = n + 1 - buffer[n] = f and f_numeric(f) or "0" + if not f or f == 0 then + buffer[n] = "0" + else + buffer[n] = f_numeric(f) + end end local function mpinteger(i) @@ -213,7 +256,11 @@ do local function mppoints(i) n = n + 1 - buffer[n] = i and f_points(i) or "0pt" + if not i or i == 0 then + buffer[n] = "0pt" + else + buffer[n] = f_points(i) + end end local function mppair(x,y) @@ -366,14 +413,15 @@ do end local function mpquoted(fmt,s,...) - n = n + 1 if s then + n = n + 1 if not find(fmt,"%",1,true) then fmt = lpegmatch(replacer,fmt) end -- buffer[n] = '"' .. formatters[fmt](s,...) .. '"' buffer[n] = lpegmatch(p,formatters[fmt](s,...)) elseif fmt then + n = n + 1 -- buffer[n] = '"' .. fmt .. '"' buffer[n] = lpegmatch(p,fmt) else @@ -384,6 +432,7 @@ do aux.print = mpprint aux.vprint = mpvprint aux.boolean = mpboolean + aux.string = mpstring aux.numeric = mpnumeric aux.number = mpnumeric aux.integer = mpinteger @@ -406,23 +455,9 @@ do return runs end - -- there is no gain in: - -- - -- local cache = table.makeweak() - -- - -- f = cache[code] - -- if not f then - -- -- f = loadstring(f_code(code)) - -- f = loadstring(code .. " return mp._f_()") - -- if f then - -- cache[code] = f - -- elseif be_tolerant then - -- f = loadstring(code) - -- if f then - -- cache[code] = f - -- end - -- end - -- end + -- sometimes we gain (e.g. .5 sec on the sync test) + + local cache = table.makeweak() function metapost.runscript(code) nesting = nesting + 1 @@ -431,10 +466,18 @@ do report_luarun("%i: code: %s",nesting,code) end runs = runs + 1 - ----- f = loadstring(f_code(code)) - local f = loadstring(code .. " return mp._f_()") - if not f and be_tolerant then - f = loadstring(code) + local f = cache[code] + if not f then + -- f = loadstring(f_code(code)) + f = loadstring(code .. " return mp._f_()") + if f then + cache[code] = f + elseif be_tolerant then + f = loadstring(code) + if f then + cache[code] = f + end + end end if f then local _buffer_, _n_ = buffer, n diff --git a/tex/context/base/mkiv/pack-rul.mkiv b/tex/context/base/mkiv/pack-rul.mkiv index 86edf7ed1..af93ac41d 100644 --- a/tex/context/base/mkiv/pack-rul.mkiv +++ b/tex/context/base/mkiv/pack-rul.mkiv @@ -239,7 +239,6 @@ \let\p_framed_backgroundcolor \empty \let\p_framed_framecolor \empty \let\p_framed_component \empty -\let\p_framed_region \empty \let\p_framed_background \empty \let\p_framed_rulethickness \empty \let\p_framed_foregroundcolor \empty @@ -443,6 +442,8 @@ \newdimen\d_overlay_offset \newdimen\d_overlay_linewidth +\let\m_overlay_region\empty + % expandable ... in a future version the space will go (in my one can use Overlay*) \def\overlaywidth {\the\d_overlay_width \space} % We preset the variables @@ -450,6 +451,7 @@ \def\overlaydepth {\the\d_overlay_depth \space} % values. \def\overlayoffset {\the\d_overlay_offset \space} % of the frame can be (are) \def\overlaylinewidth {\the\d_overlay_linewidth\space} % set somewhere else. +\def\overlayregion {\m_overlay_region} % public but kind of protected @@ -602,13 +604,21 @@ \def\pack_framed_background_box_content% fuzzy but needed hack, this \vss, otherwise {\vpack to \framedbackgroundheight{\vss\box\b_framed_normal\vss}} % vertical shift \backgroundheight -\def\pack_framed_add_region % experiment - {\ifx\p_framed_region\v!yes - \anch_mark_region_box\b_framed_normal - \else - \anch_mark_tagged_box\b_framed_normal\p_framed_region +\def\pack_framed_set_region % experiment + {\ifx\m_overlay_region\v!yes + \edef\m_overlay_region{\reservedautoregiontag}% \fi} +% \def\pack_framed_add_region % experiment +% {\ifx\m_overlay_region\v!yes +% \anch_mark_region_box\b_framed_normal +% \else +% \anch_mark_tagged_box\b_framed_normal\m_overlay_region +% \fi} + +\def\pack_framed_add_region % experiment + {\anch_mark_tagged_box\b_framed_normal\m_overlay_region} + \def\pack_framed_add_background {\setbox\b_framed_normal\hpack % was vbox % see also *1* {%\pack_framed_forgetall % can be relaxed @@ -995,9 +1005,11 @@ \edef\currentframed{#1}% \pack_framed_initialize \setbox\b_framed_normal\hbox{#4}% - \edef\p_framed_region{\framedparameter\c!region}% - \ifx\p_framed_region\v!yes % maybe later named - \pack_framed_add_region + \iftrialtypesetting \else + \edef\m_overlay_region{\framedparameter\c!region}% + \ifx\m_overlay_region\empty\else + \pack_framed_set_region + \fi \fi \setupcurrentframed[#3]% \edef\p_framed_rulethickness{\framedparameter\c!rulethickness}% also used in backgrounds @@ -1024,6 +1036,11 @@ \pack_framed_add_background \fi \pack_framed_restore_depth + \iftrialtypesetting \else + \ifx\m_overlay_region\empty\else + \pack_framed_add_region + \fi + \fi \box\b_framed_normal \egroup} @@ -1032,9 +1049,9 @@ \unexpanded\def\pack_framed_process_box_indeed#1#2% component box (assumes parameters set and grouped usage) {\setbox\b_framed_normal\box#2% could actually be \let\b_framed_normal#2 - \edef\p_framed_region{\framedparameter\c!region}% - \ifx\p_framed_region\empty\else - \pack_framed_add_region + \edef\m_overlay_region{\framedparameter\c!region}% + \ifx\m_overlay_region\empty\else + \pack_framed_set_region \fi \edef\p_framed_rulethickness{\framedparameter\c!rulethickness}% also used in backgrounds \d_framed_frameoffset\framedparameter\c!frameoffset\relax % also used in backgrounds @@ -1057,6 +1074,9 @@ \edef\p_framed_component{#1}% \pack_framed_add_background \fi + \ifx\m_overlay_region\empty\else + \pack_framed_add_region + \fi \box\b_framed_normal \egroup} @@ -1605,9 +1625,9 @@ \fi \pack_framed_stop_orientation % moved here at 2014-05-25 \iftrialtypesetting \else - \edef\p_framed_region{\framedparameter\c!region}% - \ifx\p_framed_region\empty\else - \pack_framed_add_region + \edef\m_overlay_region{\framedparameter\c!region}% + \ifx\m_overlay_region\empty\else + \pack_framed_set_region \fi \fi \d_framed_applied_offset @@ -1645,6 +1665,11 @@ \fi \fi \pack_framed_locator_after\p_framed_location + \iftrialtypesetting \else + \ifx\m_overlay_region\empty\else + \pack_framed_add_region + \fi + \fi \box\b_framed_normal \global\frameddimensionstate % global so to be used directly afterwards ! \ifconditional\c_framed_has_width diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 53d29f6f6..329abcef6 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 6e81fe864..b109d4155 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/mkiv/util-soc-imp-http.lua b/tex/context/base/mkiv/util-soc-imp-http.lua index 19259321f..c3a28be82 100644 --- a/tex/context/base/mkiv/util-soc-imp-http.lua +++ b/tex/context/base/mkiv/util-soc-imp-http.lua @@ -34,6 +34,8 @@ local pumpall = ltn12.pump.all local sinknull = ltn12.sink.null local sinktable = ltn12.sink.table +local lowerheaders = headers.lower + local mimeb64 = mime.b64 -- todo: localize ltn12 diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf index cb68e8fb6..aa9814dbc 100644 Binary files a/tex/context/interface/mkiv/i-context.pdf and b/tex/context/interface/mkiv/i-context.pdf differ diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf index 9eb8ec988..771aa2c6e 100644 Binary files a/tex/context/interface/mkiv/i-readme.pdf and b/tex/context/interface/mkiv/i-readme.pdf differ diff --git a/tex/context/modules/mkiv/s-evohome.mkiv b/tex/context/modules/mkiv/s-evohome.mkiv index 1577517e5..06fd6fb76 100644 --- a/tex/context/modules/mkiv/s-evohome.mkiv +++ b/tex/context/modules/mkiv/s-evohome.mkiv @@ -198,13 +198,19 @@ function moduledata.evohome.history(specification) local m = 0 for minute, d in next, hour do local v = d[where] - a = a + v - n = n + 1 - if v > m then - m = v + if v then + a = a + v + n = n + 1 + if v > m then + m = v + end end end - a = a / n + if n > 0 then + a = a / n + else + a = 0 + end local dx = xoffset + h local dy = a/scale local dm = m/scale diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 88e30479f..b9f8a6db9 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 : 08/28/18 17:21:11 +-- merge date : 08/30/18 18:41:24 do -- begin closure to overcome local limits and interference -- cgit v1.2.3