From a0ae246b7e860a70cf01c9412c19d2128504d709 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 29 Jul 2020 14:33:33 +0200 Subject: 2020-07-29 14:05:00 --- scripts/context/lua/mtxrun.lua | 29 +- scripts/context/stubs/mswin/mtxrun.lua | 29 +- scripts/context/stubs/unix/mtxrun | 29 +- scripts/context/stubs/win64/mtxrun.lua | 29 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/context.mkxl | 2 +- tex/context/base/mkiv/l-package.lua | 25 +- tex/context/base/mkiv/luat-cnf.lua | 4 +- tex/context/base/mkiv/luat-cod.lua | 4 +- tex/context/base/mkiv/page-mcl.mkxl | 536 +++++++++++++++++++++ tex/context/base/mkiv/status-files.pdf | Bin 27832 -> 27921 bytes tex/context/base/mkiv/status-lua.pdf | Bin 254906 -> 254910 bytes tex/context/base/mkiv/typo-drp.lua | 9 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 17 files changed, 631 insertions(+), 75 deletions(-) create mode 100644 tex/context/base/mkiv/page-mcl.mkxl diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 4f5a11f7e..9a6812697 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -852,7 +852,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true --- original size: 11605, stripped down to: 8299 +-- original size: 11793, stripped down to: 8387 if not modules then modules={} end modules ['l-package']={ version=1.001, @@ -1122,19 +1122,22 @@ function helpers.loaded(name) level=level+1 for i=1,#sequence do local method=sequence[i] - if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) - end - local result,rest=methods[method](name) - if type(result)=="function" then + local lookup=method and methods[method] + if type(lookup)=="function" then if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - if helpers.traceused then - used[#used+1]={ level=level,name=name } + local result,rest=lookup(name) + if type(result)=="function" then + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + end + if helpers.traceused then + used[#used+1]={ level=level,name=name } + end + level=level-1 + return result,rest end - level=level-1 - return result,rest end end level=level-1 @@ -26228,8 +26231,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1042226 --- stripped bytes : 411343 +-- original bytes : 1042414 +-- stripped bytes : 411443 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 4f5a11f7e..9a6812697 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -852,7 +852,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true --- original size: 11605, stripped down to: 8299 +-- original size: 11793, stripped down to: 8387 if not modules then modules={} end modules ['l-package']={ version=1.001, @@ -1122,19 +1122,22 @@ function helpers.loaded(name) level=level+1 for i=1,#sequence do local method=sequence[i] - if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) - end - local result,rest=methods[method](name) - if type(result)=="function" then + local lookup=method and methods[method] + if type(lookup)=="function" then if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - if helpers.traceused then - used[#used+1]={ level=level,name=name } + local result,rest=lookup(name) + if type(result)=="function" then + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + end + if helpers.traceused then + used[#used+1]={ level=level,name=name } + end + level=level-1 + return result,rest end - level=level-1 - return result,rest end end level=level-1 @@ -26228,8 +26231,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1042226 --- stripped bytes : 411343 +-- original bytes : 1042414 +-- stripped bytes : 411443 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 4f5a11f7e..9a6812697 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -852,7 +852,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true --- original size: 11605, stripped down to: 8299 +-- original size: 11793, stripped down to: 8387 if not modules then modules={} end modules ['l-package']={ version=1.001, @@ -1122,19 +1122,22 @@ function helpers.loaded(name) level=level+1 for i=1,#sequence do local method=sequence[i] - if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) - end - local result,rest=methods[method](name) - if type(result)=="function" then + local lookup=method and methods[method] + if type(lookup)=="function" then if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - if helpers.traceused then - used[#used+1]={ level=level,name=name } + local result,rest=lookup(name) + if type(result)=="function" then + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + end + if helpers.traceused then + used[#used+1]={ level=level,name=name } + end + level=level-1 + return result,rest end - level=level-1 - return result,rest end end level=level-1 @@ -26228,8 +26231,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1042226 --- stripped bytes : 411343 +-- original bytes : 1042414 +-- stripped bytes : 411443 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 4f5a11f7e..9a6812697 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -852,7 +852,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true --- original size: 11605, stripped down to: 8299 +-- original size: 11793, stripped down to: 8387 if not modules then modules={} end modules ['l-package']={ version=1.001, @@ -1122,19 +1122,22 @@ function helpers.loaded(name) level=level+1 for i=1,#sequence do local method=sequence[i] - if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) - end - local result,rest=methods[method](name) - if type(result)=="function" then + local lookup=method and methods[method] + if type(lookup)=="function" then if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - if helpers.traceused then - used[#used+1]={ level=level,name=name } + local result,rest=lookup(name) + if type(result)=="function" then + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + end + if helpers.traceused then + used[#used+1]={ level=level,name=name } + end + level=level-1 + return result,rest end - level=level-1 - return result,rest end end level=level-1 @@ -26228,8 +26231,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1042226 --- stripped bytes : 411343 +-- original bytes : 1042414 +-- stripped bytes : 411443 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index fc33cbde7..6221f5318 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{2020.07.28 23:01} +\newcontextversion{2020.07.29 14: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 2b963931e..ca3e68987 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{2020.07.28 23:01} +\edef\contextversion{2020.07.29 14:02} %D For those who want to use this: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index fe3e63829..70e1cfc10 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2020.07.28 23:01} +\newcontextversion{2020.07.29 14:02} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index ff3cb96b0..3417d8041 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2020.07.28 23:01} +\edef\contextversion{2020.07.29 14:02} %D Kind of special: diff --git a/tex/context/base/mkiv/context.mkxl b/tex/context/base/mkiv/context.mkxl index 5fb5c4024..fbd38ef99 100644 --- a/tex/context/base/mkiv/context.mkxl +++ b/tex/context/base/mkiv/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2020.07.28 23:01} +\edef\contextversion{2020.07.29 14:02} %D Kind of special: diff --git a/tex/context/base/mkiv/l-package.lua b/tex/context/base/mkiv/l-package.lua index 0dd71e5ec..94607d436 100644 --- a/tex/context/base/mkiv/l-package.lua +++ b/tex/context/base/mkiv/l-package.lua @@ -54,7 +54,7 @@ local function lualibfile(name) return lpegmatch(pattern,name) or name end -local offset = luarocks and 1 or 0 -- todo: also check other extras +local offset = luarocks and 1 or 0 -- todo: also check other extras ... we'll drop this luarocks anyway local helpers = package.helpers or { cleanpath = cleanpath, @@ -346,19 +346,22 @@ function helpers.loaded(name) level = level + 1 for i=1,#sequence do local method = sequence[i] - if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) - end - local result, rest = methods[method](name) - if type(result) == "function" then + local lookup = method and methods[method] + if type(lookup) == "function" then if helpers.trace then - helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - if helpers.traceused then - used[#used+1] = { level = level, name = name } + local result, rest = lookup(name) + if type(result) == "function" then + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) + end + if helpers.traceused then + used[#used+1] = { level = level, name = name } + end + level = level - 1 + return result, rest end - level = level - 1 - return result, rest end end -- safeguard, we never come here diff --git a/tex/context/base/mkiv/luat-cnf.lua b/tex/context/base/mkiv/luat-cnf.lua index 4939b05c3..c9ccc1b90 100644 --- a/tex/context/base/mkiv/luat-cnf.lua +++ b/tex/context/base/mkiv/luat-cnf.lua @@ -19,9 +19,9 @@ texconfig.shell_escape = 't' luatex = luatex or { } local luatex = luatex -texconfig.error_line = 79 -- frozen / large values can crash +texconfig.error_line = 250 -- 79 -- frozen / large values can crash texconfig.expand_depth = 10000 -texconfig.half_error_line = 50 -- frozen +texconfig.half_error_line = 125 -- 50 -- frozen texconfig.hash_extra = 100000 texconfig.max_in_open = 1000 -- frozen texconfig.max_print_line = 100000 -- frozen diff --git a/tex/context/base/mkiv/luat-cod.lua b/tex/context/base/mkiv/luat-cod.lua index 76a4ceb34..a2a261866 100644 --- a/tex/context/base/mkiv/luat-cod.lua +++ b/tex/context/base/mkiv/luat-cod.lua @@ -20,9 +20,9 @@ local texconfig, lua = texconfig, lua texconfig.kpse_init = false texconfig.shell_escape = 't' -texconfig.error_line = 79 -- frozen / large values can crash +texconfig.error_line = 250 -- 79 -- frozen / large values can crash texconfig.expand_depth = 10000 -texconfig.half_error_line = 50 -- frozen +texconfig.half_error_line = 125 -- 50 -- frozen texconfig.max_in_open = 1000 texconfig.max_print_line = 100000 texconfig.max_strings = 500000 diff --git a/tex/context/base/mkiv/page-mcl.mkxl b/tex/context/base/mkiv/page-mcl.mkxl new file mode 100644 index 000000000..f90576cf6 --- /dev/null +++ b/tex/context/base/mkiv/page-mcl.mkxl @@ -0,0 +1,536 @@ +%D \module +%D [ file=page-mcl, +%D version=2020.07.26, % stripped down redone page-mul +%D title=\CONTEXT\ Page Macros, +%D subtitle=Multicolumns Limited, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Page Macros / Multicolumns Limited} + +\unprotect + +%D Columns are kind of hairy in \TEX\ and we would be better if no one needed them. +%D Anyway, we do need some support and no mechanism can serve all. The original +%D multicolumn mechanism of \MKII\ was never fully adapted to \MKIV, where mixed +%D columns and page columns showed up instead. However, for some cases a dumb +%D mechanism makes sense, so again we introduce multi columns, but without float +%D hacks. This one will be optimized for mixed usage as for instance itemize needs. +%D Their main advantage is that they can better deal with notes, which are hairy in +%D themselves. This will (for now) only happen in \LMTX. +%D +%D The code is stripped down ancient \MKII\ code and might become cleaner as it +%D evolves. Macros keep similar names but take a different namespace. The code is +%D not yet perfect wrt spacing! + +% \enableexperiments[itemize.columns] +% +% \starttext +% +% \startmulticolumns +% \dorecurse{10}{\samplefile{ward}\footnote{note #1}\par} +% \stopmulticolumns +% +% \dorecurse{4}{\samplefile{ward}\par} +% +% \startitemize[packed,columns,two] +% \dorecurse{100}{\startitem test #1 \footnote{this is a footnote #1}\stopitem} +% \stopitemize +% +% \stoptext + +\ifdefined \startmulticolumns + + % we're testing and don't want to remake the format + +\else + +\installcorenamespace {multicolumns} + +\installframedcommandhandler \??multicolumns {multicolumns} \??multicolumns + +\newdimen \d_page_mcl_available_width +\newdimen \d_page_mcl_distance +\newdimen \d_page_mcl_leftskip +\newdimen \d_page_mcl_rightskip +\newdimen \d_page_mcl_used_width +\newdimen \d_page_mcl_temp +\newdimen \d_page_mcl_saved_pagetotal % brrr, still needed ? + +\newcount \c_page_mcl_balance_minimum +\newcount \c_page_mcl_n_of_lines + +\newbox \b_page_mcl_preceding +\newdimen \d_page_mcl_preceding_height +\newconditional\c_page_mcl_preceding_present + +\newbox \b_page_mcl_rest_of_page +\newbox \b_page_mcl_page + +\newconditional\c_page_mcl_reverse +\newconditional\c_page_mcl_balance + +\newconstant \c_page_mcl_routine + +\setnewconstant\c_page_mcl_routine_regular \zerocount +\setnewconstant\c_page_mcl_routine_intercept \plusone +\setnewconstant\c_page_mcl_routine_continue \plustwo +\setnewconstant\c_page_mcl_routine_balance \plusthree +\setnewconstant\c_page_mcl_routine_error \plusfour + +\newbox \b_page_mcl_balance_content +\newconstant \c_page_mcl_balance_tries_max +\newcount \c_page_mcl_balance_tries +\newdimen \d_page_mcl_balance_target +\newdimen \d_page_mcl_balance_natural_height +\newdimen \d_page_mcl_balance_step +\newconditional\c_page_mcl_balance_possible + +\c_page_mcl_balance_tries_max 250 % 100 is too small when floats are involved + +%def\m_page_mcl_overshoot_ratio{\ifgridsnapping0\else.5\fi} +\def\m_page_mcl_overshoot_ratio{.5} + +\fi + +\unexpanded\def\page_mcl_command_set_hsize + {\d_page_mcl_available_width\dimexpr + \makeupwidth + -\d_page_mcl_leftskip + -\d_page_mcl_rightskip + -\nofcolumns\d_page_mcl_distance + +\d_page_mcl_distance + \relax + \d_page_mcl_used_width\dimexpr + \d_page_mcl_available_width/\nofcolumns + \relax + \textwidth\d_page_mcl_used_width + \hsize\d_page_mcl_used_width} + +\unexpanded\def\page_mcl_set_n_of_lines#1% + {\d_page_mcl_temp\dimexpr + +\textheight + \ifdim\d_page_mcl_preceding_height>\zeropoint -\d_page_mcl_preceding_height \fi +% \ifdim\ht\b_page_mcl_preceding>\zeropoint -\ht\b_page_mcl_preceding \fi + -#1% + \relax + \getnoflines\d_page_mcl_temp + \ifnum\layoutlines>\zerocount \ifnum\noflines>\layoutlines + \noflines\layoutlines + \fi \fi + \c_page_mcl_n_of_lines\noflines} + +\unexpanded\def\page_mcl_command_set_vsize + {%%\page_one_command_set_vsize % indeed? + \page_mcl_set_n_of_lines\zeropoint + \d_page_mcl_temp\nofcolumns\dimexpr + \c_page_mcl_n_of_lines\openlineheight +% +\m_page_mcl_overshoot_ratio\openlineheight % collect enough data + \relax + \global\vsize \d_page_mcl_temp + \global\pagegoal\d_page_mcl_temp} % let's do it only here, reports maxdimen anyway + +\unexpanded\def\page_mcl_command_routine + {\ifcase\c_page_mcl_routine + \page_one_command_routine + \or + \page_mcl_routine_intercept + \or + \page_mcl_routine_continue + \or + \page_mcl_routine_balance + \or + \page_mcl_routine_error + \fi} + +\let\page_mcl_command_package_contents\page_one_command_package_contents + +\def\page_mcl_routine_intercept + {\global\setbox\b_page_mcl_preceding\vbox + {\page_otr_command_flush_top_insertions + \unvbox\normalpagebox}} + +\def\page_mcl_routine_error + {\showmessage\m!columns3\empty + \page_otr_construct_and_shipout\unvbox\normalpagebox\zerocount} % three arguments + +\unexpanded\def\page_mcl_initialize_variables + {\reseteverypar % maybe still freeze .... + \dontcomplain + \settopskip + \setmaxdepth + \topskip 1\topskip + \splittopskip \topskip + \splitmaxdepth \maxdepth + \boxmaxdepth \maxdepth % dangerous + \emergencystretch\zeropoint + \relax} + +\def\page_mcl_flush_preceding_normal + {\unvbox\b_page_mcl_preceding} + +\def\page_mcl_flush_preceding_ongrid + {\scratchdimen\dimexpr + \d_page_mcl_saved_pagetotal + -\d_page_mcl_preceding_height + -\topskip + \relax + \box\b_page_mcl_preceding + \kern\scratchdimen} + +\def\page_mcl_flush_packaged_columns_continued + {\page_mcl_flush_packaged_columns_indeed + \box\b_page_mcl_page} + +\def\page_mcl_flush_packaged_columns_balanced + {\bgroup + \page_mcl_flush_packaged_columns_indeed + \getnoflines{\htdp\b_page_mcl_page}% + \ht\b_page_mcl_page\dimexpr + \noflines\openlineheight + -\openstrutdepth + \ifgridsnapping + % quick hack (at least it works with itemize) + \else + -\openlineheight + +\topskip + \fi + \relax + \dp\b_page_mcl_page\openstrutdepth + \box\b_page_mcl_page + \egroup} + +\def\page_mcl_synchronize_marks + {\dohandleallcolumns{\page_marks_synchronize_column\plusone\nofcolumns\mofcolumns\currentcolumnbox}} + +\def\page_mcl_flush_packaged_columns_indeed + {\ifvoid\b_page_mcl_preceding + \setfalse\c_page_mcl_preceding_present % will be set elsewhere + \else + \settrue\c_page_mcl_preceding_present + \page_apply_postprocessors_box\b_page_mcl_preceding + \fi + \forgetall + \page_mcl_initialize_variables + \page_mcl_synchronize_marks + \setbox\b_page_mcl_page\vpack + {\ifconditional\c_page_mcl_reverse\reversehpack\else\naturalhpack\fi to \makeupwidth + {\hskip\ifconditional\c_page_mcl_reverse\d_page_mcl_rightskip\else\d_page_mcl_leftskip\fi\relax + \dohandleallcolumns + {\wd\currentcolumnbox\d_page_mcl_used_width + \setbox\scratchbox\hpack{\strut\box\currentcolumnbox}% hm, why strut + \anch_mark_column_box\scratchbox\currentcolumn + \box\scratchbox + \hfil}% + \unskip + \hskip\ifconditional\c_page_mcl_reverse\d_page_mcl_leftskip\else\d_page_mcl_rightskip\fi}}% + \ifconditional\c_page_mcl_preceding_present + \settrue\c_page_mcl_preceding_present + \ifgridsnapping + \page_mcl_flush_preceding_ongrid % obey grid settings, force on grid + \else + \page_mcl_flush_preceding_normal % ignore grid settings, not on grid + \fi + \fi + \global\d_page_mcl_preceding_height\zeropoint + \page_otr_command_set_vsize + \dosomebreak\nobreak % hm, only needed when topstuff + \ifgridsnapping \else + \ifconditional\c_page_mcl_preceding_present + \nointerlineskip + \vskip\dimexpr\openstrutheight-\topskip\relax + \fi + \fi + \prevdepth\openstrutdepth + \nointerlineskip + \dp\b_page_mcl_page\zeropoint} + +\def\page_mcl_split_column#1#2% copy or box + {\global\setbox\currentcolumnbox\vsplit#1 upto #2} + +\def\page_mcl_routine_continue + {\bgroup + \forgetall + \page_mcl_initialize_variables + \settotalinsertionheight + \page_mcl_set_n_of_lines\totalinsertionheight + \d_page_mcl_balance_target\c_page_mcl_n_of_lines\openlineheight + \dohandleallcolumns{\page_mcl_split_column\normalpagebox\d_page_mcl_balance_target}% + \setbox\b_page_mcl_rest_of_page\vpack{\unvbox\normalpagebox}% + \dohandleallcolumns + {\global\setbox\currentcolumnbox\vpack to \d_page_mcl_balance_target + {\unvbox\currentcolumnbox % wel of niet \unvbox ? + \vfill}}% + \setbox\b_page_mcl_preceding\vpack{\page_mcl_flush_packaged_columns_continued}% + \page_otr_construct_and_shipout\box\b_page_mcl_preceding\zerocount % three arguments + \page_otr_command_set_hsize + \page_otr_command_set_vsize + \unvbox\b_page_mcl_rest_of_page + \egroup} + +\def\page_mcl_routine_balance + {\bgroup + % why no \forgetall here + \page_mcl_initialize_variables + \widowpenalty\zerocount + \setbox\b_page_mcl_balance_content\vpack{\unvbox\normalpagebox}% + \ifdim\ht\b_page_mcl_balance_content>\openlineheight % at least one line + \ifnum\c_page_mcl_balance_minimum<\plustwo % balance anyway + \settrue\c_page_mcl_balance_possible + \else % check criterium to available lines + \getnoflines{\ht\b_page_mcl_balance_content}% + \divide\noflines \nofcolumns \relax + \ifnum\noflines<\c_page_mcl_balance_minimum \relax + \ifdim\dimexpr\ht\b_page_mcl_balance_content+\openlineheight\relax>\makeupheight + \settrue\c_page_mcl_balance_possible % column exceeding text height + \else + \setfalse\c_page_mcl_balance_possible % it seems to fit + \fi + \else + \settrue\c_page_mcl_balance_possible % balance indeed + \fi + \fi + \else + \setfalse\c_page_mcl_balance_possible % balancing does not make sense + \fi + \ifconditional\c_page_mcl_balance_possible % start balancing, was: \ifdim\ht\b_page_mcl_balance_content>\openlineheight + \page_mcl_balance_try_one + \page_mcl_balance_try_two + \else + % a one liner is not properly handled here, so best rewrite the text then + \showmessage\m!columns{10}\empty + \global\setbox\firstcolumnbox\vpack{\unvbox\b_page_mcl_balance_content}% + \fi + \c_page_mcl_routine\c_page_mcl_routine_error + %\baselinebottom % forces depth in separation rule + \page_mcl_flush_packaged_columns_balanced + %\allowbreak + \egroup} + +% \showmakeup + +\def\page_mcl_balance_try_one + {\d_page_mcl_balance_target\dimexpr\ht\b_page_mcl_balance_content+\topskip-\baselineskip\relax + \divide\d_page_mcl_balance_target \nofcolumns + \vbadness\plustenthousand + \c_page_mcl_balance_tries\zerocount + \bgroup + \ifgridsnapping + \d_page_mcl_balance_step\lineheight + \else + \d_page_mcl_balance_step\spacingfactor\onepoint % rubish + \fi + \doloop\page_mcl_balance_try_one_attempt + \global\setbox\b_page_mcl_rest_of_page\box\voidbox + \ifnum\c_page_mcl_balance_tries>\c_page_mcl_balance_tries_max\relax + \showmessage\m!columns7\empty + \else + \showmessage\m!columns8{\the\c_page_mcl_balance_tries}% + \fi + \egroup} + +\def\page_mcl_balance_try_one_attempt + {\advance\c_page_mcl_balance_tries \plusone + \global\setbox\b_page_mcl_rest_of_page\copy\b_page_mcl_balance_content\relax + \dohandleallcolumns{\page_mcl_split_column\b_page_mcl_rest_of_page\d_page_mcl_balance_target}% + \d_page_mcl_balance_natural_height\zeropoint + \dohandleallcolumns\page_mcl_balance_try_one_attempt_step +\advance\d_page_mcl_balance_natural_height-33\scaledpoint % some slack + \ifnum\c_page_mcl_balance_tries>\c_page_mcl_balance_tries_max\relax + \exitloop + \orelse\ifdim\ht\b_page_mcl_rest_of_page>\zeropoint + \advance\d_page_mcl_balance_target\d_page_mcl_balance_step\relax + \orelse\ifdim\d_page_mcl_balance_natural_height>\ht\firstcolumnbox\relax + \advance\d_page_mcl_balance_target\d_page_mcl_balance_step\relax + \else + \exitloop + \fi} + +\def\page_mcl_balance_try_one_attempt_step + {\ifcase\currentcolumn\or\else + \ifdim\ht\currentcolumnbox>\d_page_mcl_balance_natural_height\relax + \d_page_mcl_balance_natural_height\ht\currentcolumnbox + \fi + \fi} + +\def\page_mcl_balance_try_two % hm ... can probably go + {\dohandleallcolumnscs\page_mcl_balance_try_two_step} + +% \def\page_mcl_balance_try_two_step +% {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox +% {\box\currentcolumnbox +% \vfill}} + +\def\page_mcl_balance_try_two_step + {%\global\setbox\currentcolumnbox\box\currentcolumnbox + \ht\currentcolumnbox\ht\firstcolumnbox} + +\unexpanded\def\startmulticolumns + {\dosingleempty\page_mcl_start} + +\def\page_mcl_start[#1]% + {\bgroup + \ifinsidecolumns + \page_mcl_start_nop + \else + \iffirstargument + \setupmulticolumns[#1]% + \fi + \nofcolumns\multicolumnsparameter\c!n\relax + \ifnum\nofcolumns>\plusone + \page_mcl_start_yes + \nofmulticolumns\nofcolumns + \else + \page_mcl_start_nop + \fi + \fi} + +\unexpanded\def\page_mcl_start_nop + {\let\stopmulticolumns\page_mcl_stop_nop} + +\unexpanded\def\page_mcl_stop_nop + {\egroup} + +\unexpanded\def\page_mcl_start_yes + {\whitespace + \begingroup + \let\stopmulticolumns\page_mcl_stop_indeed + \global\insidecolumnstrue + \global\insidemulticolumnstrue + % + \d_page_mcl_distance\multicolumnsparameter\c!distance\relax + % + \edef\p_direction{\multicolumnsparameter\c!direction}% + \ifx\p_direction\v!right + \setfalse\c_page_mcl_reverse + \else + \settrue\c_page_mcl_reverse + \fi + % + \edef\p_balance{\multicolumnsparameter\c!balance}% + \ifx\p_balance\v!yes + \settrue\c_page_mcl_balance + \else + \setfalse\c_page_mcl_balance + \fi + % + \usealignparameter\multicolumnsparameter + % + \edef\p_blank{\multicolumnsparameter\c!blank}% + \ifx\p_blank\empty \else + \setupblank[\p_blank]% + \fi + % + \ifdim\s_spac_whitespace_parskip>\zeropoint\relax + \setupwhitespace[\p_blank]% + \fi + \c_page_mcl_balance_minimum\multicolumnsparameter\c!ntop\relax + % + \begingroup + % + \d_page_mcl_leftskip \leftskip + \d_page_mcl_rightskip\rightskip + \leftskip \zeropoint + \rightskip \zeropoint + \hangafter \zerocount + \hangindent \zeropoint + % + \widowpenalty \zerocount % will become option + \clubpenalty \zerocount % will become option + % + \ifdim\dimexpr\pagetotal+\parskip+\openlineheight\relax<\pagegoal + \allowbreak + \else + \break % sometimes fails + \fi + \appendtoks + \topskip1\topskip % best a switch + \to \everybodyfont + \the\everybodyfont % ugly here + \saveinterlinespace % ugly here + % + \initializecolumns\nofcolumns + % + \reseteverypar % todo + % + \ifdim\pagetotal=\zeropoint \else + \verticalstrut + \vskip-\struttotal + \fi + \global\d_page_mcl_saved_pagetotal\pagetotal + \setupoutputroutine[\s!multicolumn]% + \c_page_mcl_routine\c_page_mcl_routine_intercept + \page_otr_trigger_output_routine + \global\d_page_mcl_preceding_height\ht\b_page_mcl_preceding + \c_page_mcl_routine\c_page_mcl_routine_continue + \page_otr_command_set_hsize + \page_otr_command_set_vsize} + +\unexpanded\def\page_mcl_stop_indeed + {\relax + \synchronizeoutput + \par + \ifconditional\c_page_mcl_balance + \c_page_mcl_routine\c_page_mcl_routine_continue + \goodbreak + \c_page_mcl_routine\c_page_mcl_routine_balance + \else + \goodbreak + \fi + % still the multi column routine + \page_otr_trigger_output_routine % the prevdepth is important, try e.g. toclist in + \prevdepth\zeropoint % columns before some noncolumned text text + % + \c_page_mcl_routine\c_page_mcl_routine_regular + % + \ifvoid\b_page_mcl_preceding\else + \unvbox\b_page_mcl_preceding + \fi + \global\d_page_mcl_preceding_height\zeropoint + \endgroup % here + \nofcolumns\plusone + \nofmulticolumns\plusone + \page_otr_command_set_vsize + \dosomebreak\allowbreak + \page_floats_column_pop_saved + % + \global\insidemulticolumnsfalse + \global\insidecolumnsfalse + \endgroup + \egroup}% + +\setupmulticolumns + [\c!n=2, + \c!ntop=1, + \c!direction=\v!right, + \c!distance=1.5\bodyfontsize, % influenced by switching + \c!balance=\v!yes, + \c!align={\v!text,\v!tolerant}, + \c!blank={\v!line,\v!fixed}] + +\defineoutputroutine + [\s!multicolumn] + [\s!page_otr_command_routine =\page_mcl_command_routine, + \s!page_otr_command_package_contents=\page_mcl_command_package_contents, + \s!page_otr_command_set_vsize =\page_mcl_command_set_vsize, + \s!page_otr_command_set_hsize =\page_mcl_command_set_hsize] + +\let\strc_itemgroups_start_columns_old\strc_itemgroups_start_columns +\let\strc_itemgroups_stop_columns_old \strc_itemgroups_stop_columns + +\def\strc_itemgroups_start_columns_new{\startmulticolumns\relax} +\def\strc_itemgroups_stop_columns_new {\stopmulticolumns} + +\installtexexperiment + {itemize.columns} + {\let\strc_itemgroups_start_columns\strc_itemgroups_start_columns_new + \let\strc_itemgroups_stop_columns \strc_itemgroups_stop_columns_new} + {\let\strc_itemgroups_start_columns\strc_itemgroups_start_columns_old + \let\strc_itemgroups_stop_columns \strc_itemgroups_stop_columns_old} + +\protect \endinput diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 125cb7966..fa3d89df4 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 0abbf34eb..9b57349bb 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/typo-drp.lua b/tex/context/base/mkiv/typo-drp.lua index 50eb765f2..ad4a80a57 100644 --- a/tex/context/base/mkiv/typo-drp.lua +++ b/tex/context/base/mkiv/typo-drp.lua @@ -321,8 +321,13 @@ actions[v_default] = function(head,setting) if trace_initials then report_initials("setting hangafter to %i and hangindent to %p",hangafter,hangindent) end - texset("hangafter",hangafter) - texset("hangindent",hangindent) + if CONTEXTLMTXMODE > 0 then + texset("hangafter",hangafter,true) + texset("hangindent",hangindent,true) + else + texset("hangafter",hangafter) + texset("hangindent",hangindent) + end end if indent then insert_after(first,first,new_kern(-parindent)) diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index cd5f82135..af32e9c95 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 : 2020-07-28 23:01 +-- merge date : 2020-07-29 14:02 do -- begin closure to overcome local limits and interference -- cgit v1.2.3