diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-01-08 16:15:06 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-01-08 16:15:06 +0100 |
commit | ff41ab499cdc24b83e84ecad95e4756fc74681c4 (patch) | |
tree | e22674cfd78fb458a07de86af87c652f54938a62 /tex | |
parent | 62fc7b991bcce5ebe33d93e7bb067bc77f4683e3 (diff) | |
download | context-ff41ab499cdc24b83e84ecad95e4756fc74681c4.tar.gz |
2016-01-08 16:05:00
Diffstat (limited to 'tex')
-rw-r--r-- | tex/context/base/cont-new.mkiv | 2 | ||||
-rw-r--r-- | tex/context/base/context-version.pdf | bin | 4171 -> 4166 bytes | |||
-rw-r--r-- | tex/context/base/context.mkiv | 2 | ||||
-rw-r--r-- | tex/context/base/file-mod.mkvi | 10 | ||||
-rw-r--r-- | tex/context/base/font-gds.lua | 29 | ||||
-rw-r--r-- | tex/context/base/font-otc.lua | 120 | ||||
-rw-r--r-- | tex/context/base/pack-mrl.mkiv | 6 | ||||
-rw-r--r-- | tex/context/base/status-files.pdf | bin | 24361 -> 24390 bytes | |||
-rw-r--r-- | tex/context/base/status-lua.pdf | bin | 257830 -> 258601 bytes | |||
-rw-r--r-- | tex/context/base/tabl-ltb.mkiv | 780 | ||||
-rw-r--r-- | tex/context/base/toks-scn.lua | 8 | ||||
-rw-r--r-- | tex/context/base/type-imp-cambria.mkiv | 8 | ||||
-rw-r--r-- | tex/context/base/typo-inj.lua | 32 | ||||
-rw-r--r-- | tex/context/base/typo-inj.mkiv | 21 | ||||
-rw-r--r-- | tex/context/fonts/cambria.lfg | 16 | ||||
-rw-r--r-- | tex/generic/context/luatex/luatex-fonts-merged.lua | 2 |
16 files changed, 589 insertions, 447 deletions
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index bef916274..eb7dd28f6 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2016.01.07 13:38} +\newcontextversion{2016.01.08 16:02} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex 5f938ae29..e310bb563 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 2a44f12ea..852561092 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -39,7 +39,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2016.01.07 13:38} +\edef\contextversion{2016.01.08 16:02} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/file-mod.mkvi b/tex/context/base/file-mod.mkvi index 8025da6ea..ebd741d42 100644 --- a/tex/context/base/file-mod.mkvi +++ b/tex/context/base/file-mod.mkvi @@ -93,14 +93,14 @@ \unexpanded\def\setupmodule {\dodoubleempty\syst_modules_setup} -\def\syst_modules_setup_indeed +\def\syst_modules_setup {\ifx\currentmoduleparameters\empty - \expandafter\syst_modules_setup_indeed_nop + \expandafter\syst_modules_setup_nop \else - \expandafter\syst_modules_setup_indeed_yes + \expandafter\syst_modules_setup_yes \fi} -\def\syst_modules_setup_indeed_nop[#name][#parameters]% +\def\syst_modules_setup_nop[#name][#parameters]% {\ifsecondargument \getparameters[\??module#name:][#parameters]% internal (defaults) \else\iffirstargument @@ -108,7 +108,7 @@ \fi\fi \the\everysetupmodule} -\def\syst_modules_setup_indeed_yes[#name][#parameters]% +\def\syst_modules_setup_yes[#name][#parameters]% {\scratchtoks\expandafter{\currentmoduleparameters}% \ifsecondargument \getparameters[\??module#name:][#parameters]% internal (defaults) diff --git a/tex/context/base/font-gds.lua b/tex/context/base/font-gds.lua index 9fbe1e844..23bbad42f 100644 --- a/tex/context/base/font-gds.lua +++ b/tex/context/base/font-gds.lua @@ -447,6 +447,24 @@ local function setextrafeatures(tfmdata) end end +local function setextensions(tfmdata) + local goodies = tfmdata.goodies + if goodies then + for i=1,#goodies do + local g = goodies[i] + local e = g.extensions + if e then + local goodie = g.name or "unknown" + for i=1,#e do + local name = "extension-" .. i + -- report_goodies("adding extension %s from %s",name,goodie) + otf.enhancers.addfeature(tfmdata.shared.rawdata,name,e[i]) + end + end + end + end +end + -- installation (collected to keep the overview) -- also for type 1 registerotffeature { @@ -471,6 +489,17 @@ registerotffeature { } registerotffeature { + name = "extensions", + description = "extensions to features", + default = true, + initializers = { + position = 2, + base = setextensions, + node = setextensions, + } +} + +registerotffeature { name = "featureset", description = "goodie feature set", initializers = { diff --git a/tex/context/base/font-otc.lua b/tex/context/base/font-otc.lua index 393dbbe87..0cc7b58b0 100644 --- a/tex/context/base/font-otc.lua +++ b/tex/context/base/font-otc.lua @@ -28,6 +28,7 @@ local normalized = { alternate = "alternate", multiple = "multiple", kern = "kern", + pair = "pair", chainsubstitution = "chainsubstitution", chainposition = "chainposition", } @@ -38,6 +39,7 @@ local types = { alternate = "gsub_alternate", multiple = "gsub_multiple", kern = "gpos_pair", + pair = "gpos_pair", chainsubstitution = "gsub_contextchain", chainposition = "gpos_contextchain", } @@ -57,10 +59,15 @@ local function addfeature(data,feature,specifications) if not features or not sequences then return end - local gsubfeatures = features.gsub - if gsubfeatures and gsubfeatures[feature] then - return -- already present - end + -- feature has to be unique but the name entry wins eventually + -- local gsubfeatures = features.gsub + -- if gsubfeatures and gsubfeatures[feature] then + -- return -- already present + -- end + -- local gposfeatures = features.gpos + -- if gposfeatures and gposfeatures[feature] then + -- return -- already present + -- end -- todo alse gpos @@ -236,7 +243,34 @@ local function addfeature(data,feature,specifications) skip = skip + 1 end end - return coverage, "kern" + return coverage + end + + local function prepare_pair(list,featuretype) + local coverage = { } + local cover = coveractions[featuretype] + for code, replacement in next, list do + local unicode = tounicode(code) + local description = descriptions[unicode] + if description and type(replacement) == "table" then + local r = { } + for k, v in next, replacement do + local u = tounicode(k) + if u then + r[u] = v + end + end + if next(r) then + cover(coverage,unicode,r) + done = done + 1 + else + skip = skip + 1 + end + else + skip = skip + 1 + end + end + return coverage end local function prepare_chain(list,featuretype,sublookups) @@ -332,6 +366,7 @@ local function addfeature(data,feature,specifications) for s=1,#specifications do local specification = specifications[s] local valid = specification.valid + local feature = specification.name or feature if not valid or valid(data,specification,feature) then local initialize = specification.initialize if initialize then @@ -347,6 +382,7 @@ local function addfeature(data,feature,specifications) local nofsteps = 0 local steps = { } local sublookups = specification.lookups + local category = nil if sublookups then local s = { } for i=1,#sublookups do @@ -361,15 +397,19 @@ local function addfeature(data,feature,specifications) local coverage = nil local format = nil if featuretype == "substitution" then - coverage, format = prepare_substitution(list,featuretype) + coverage = prepare_substitution(list,featuretype) elseif featuretype == "ligature" then - coverage, format = prepare_ligature(list,featuretype) + coverage = prepare_ligature(list,featuretype) elseif featuretype == "alternate" then - coverage, format = prepare_alternate(list,featuretype) + coverage = prepare_alternate(list,featuretype) elseif featuretype == "multiple" then - coverage, format = prepare_multiple(list,featuretype) + coverage = prepare_multiple(list,featuretype) elseif featuretype == "kern" then - coverage, format = prepare_kern(list,featuretype) + format = "kern" + coverage = prepare_kern(list,featuretype) + elseif featuretype == "pair" then + format = "pair" + coverage = prepare_pair(list,featuretype) end if coverage and next(coverage) then nofsteps = nofsteps + 1 @@ -389,17 +429,31 @@ local function addfeature(data,feature,specifications) local coverage = nil local format = nil if featuretype == "substitution" then - coverage, format = prepare_substitution(list,featuretype) + category = "gsub" + coverage = prepare_substitution(list,featuretype) elseif featuretype == "ligature" then - coverage, format = prepare_ligature(list,featuretype) + category = "gsub" + coverage = prepare_ligature(list,featuretype) elseif featuretype == "alternate" then - coverage, format = prepare_alternate(list,featuretype) + category = "gsub" + coverage = prepare_alternate(list,featuretype) elseif featuretype == "multiple" then - coverage, format = prepare_multiple(list,featuretype) + category = "gsub" + coverage = prepare_multiple(list,featuretype) elseif featuretype == "kern" then - coverage, format = prepare_kern(list,featuretype) - elseif featuretype == "chainsubstitution" or featuretype == "chainposition" then - coverage, format = prepare_chain(list,featuretype,sublookups) + category = "gpos" + format = kern + coverage = prepare_kern(list,featuretype) + elseif featuretype == "pair" then + category = "gpos" + format = "pair" + coverage = prepare_pair(list,featuretype) + elseif featuretype == "chainsubstitution" then + category = "gsub" + coverage = prepare_chain(list,featuretype,sublookups) + elseif featuretype == "chainposition" then + category = "gpos" + coverage = prepare_chain(list,featuretype,sublookups) end if coverage and next(coverage) then nofsteps = nofsteps + 1 @@ -420,26 +474,40 @@ local function addfeature(data,feature,specifications) chain = featurechain, features = { [feature] = askedfeatures }, flags = featureflags, - name = feature, -- not needed + name = feature, -- redundant order = featureorder, [stepkey] = steps, nofsteps = nofsteps, type = types[featuretype], } + -- todo : before|after|index if specification.prepend then insert(sequences,1,sequence) else insert(sequences,sequence) end -- register in metadata (merge as there can be a few) - if not gsubfeatures then - gsubfeatures = { } - fontfeatures.gsub = gsubfeatures - end - local k = gsubfeatures[feature] - if not k then - k = { } - gsubfeatures[feature] = k + local k = nil + if category == "gpos" then + if not gposfeatures then + gposfeatures = { } + fontfeatures.gpos = gposfeatures + end + k = gposfeatures[feature] + if not k then + k = { } + gposfeatures[feature] = k + end + else + if not gsubfeatures then + gsubfeatures = { } + fontfeatures.gsub = gsubfeatures + end + k = gsubfeatures[feature] + if not k then + k = { } + gsubfeatures[feature] = k + end end for script, languages in next, askedfeatures do local kk = k[script] diff --git a/tex/context/base/pack-mrl.mkiv b/tex/context/base/pack-mrl.mkiv index a97c9e6f8..e8f89da8e 100644 --- a/tex/context/base/pack-mrl.mkiv +++ b/tex/context/base/pack-mrl.mkiv @@ -57,9 +57,9 @@ \fi\fi \useblackrulesstyleandcolor\c!style\c!color \vrule - \s!width \ifx\p_width \v!max\emwidth\else\p_width \fi - \s!height\ifx\p_height\v!max\strutht\else\p_height\fi - \s!depth \ifx\p_depth \v!max\strutdp\else\p_depth \fi + \ifx\p_width \v!max\s!width \emwidth\else\ifx\p_width \empty\else\s!width \p_width \fi\fi + \ifx\p_height\v!max\s!height\strutht\else\ifx\p_height\empty\else\s!height\p_height\fi\fi + \ifx\p_depth \v!max\s!depth \strutdp\else\ifx\p_depth \empty\else\s!depth \p_depth \fi\fi \egroup} \setupblackrules diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex 4bab1ac7f..bc59d9a12 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex 871897ac1..d1b7f4877 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/tabl-ltb.mkiv b/tex/context/base/tabl-ltb.mkiv index 4c892138e..b0e3f52e4 100644 --- a/tex/context/base/tabl-ltb.mkiv +++ b/tex/context/base/tabl-ltb.mkiv @@ -1,6 +1,6 @@ %D \module %D [ file=tabl-ltb, -%D version=2002.10.31, +%D version=2002.10.31, % updated 2016.01.08 %D title=\CONTEXT\ Table Macros, %D subtitle=Line Tables, %D author=Hans Hagen, @@ -11,17 +11,13 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -% testfile: tfmetrics.tex - -% todo: als nx>1, dan in geval van rek tussenruimte berekenen en optellen -% bij breedte, dus: nx nog niet gebruiken in combinatie met rek ! ! ! ! ! - -% This module is experimental, undocumented, and currently only set up -% eTeX. It provides a mechanism for typesetting very large tables, -% spanning many pages horizontally and vertically, with repeated -% header lines and (entry) columns, tab tracking, color, etc. In does -% two passes over a table, which is why the table goes into a -% buffer or file. As said, tables can be real huge. +%D This module was made for some special project where we needed to typeset tables +%D spanning spanning many pages horizontally and vertically, with repeated header +%D lines and (entry) columns, tab tracking, color, etc. We do two passes over a +%D table, which is why the table can go into a buffer or file. As said, tables can +%D be real huge but performance is still quite okay (there is room for some speed +%D up). The code has been adapted to \MKIV\ but the functionality is the same as in +%D \MKII. % \BH \BC .. \EC \BC .. \EC \EH % append % \BR \BC .. \EC \BC .. \EC \ER @@ -59,171 +55,183 @@ \unprotect -\newconstant\linetablesplitstate -\newconstant\linetableheadstate -\newconstant\linetablemode +\installcorenamespace{linetable} +\installcorenamespace{linetablepart} +\installcorenamespace{linetablewidth} +\installcorenamespace{linetableheight} +\installcorenamespace{linetabledepth} + +\newconditional \c_tabl_lines_preroll +\newconditional \c_tabl_lines_in_table -\definesystemvariable {le} % LinetablE +\newdimen \d_tabl_lines_width +\newdimen \d_tabl_lines_height +%newdimen \d_tabl_lines_depth -\edef\??ler{\??le:r:} -\edef\??lec{\??le:c:} -\edef\??lew{\??le:w:} -\edef\??leh{\??le:h:} -\edef\??led{\??le:d:} +\newbox \b_tabl_lines_cell -\newif\iflinetablepreroll -\newif\ifinlinetable +\newcount \c_tabl_lines_n_of_columns +\newcount \c_tabl_lines_n_of_rows +\newcount \c_tabl_lines_n_of_lines +\newcount \c_tabl_lines_n_of_parts +\newcount \c_tabl_lines_part \c_tabl_lines_part\plusone +\newcount \c_tabl_lines_step \c_tabl_lines_step\plusone +\newcount \c_tabl_lines_line +\newcount \c_tabl_lines_row +\newcount \c_tabl_lines_rows +\newcount \c_tabl_lines_column +\newcount \c_tabl_lines_subcol -\newcount\linetablecolumn -\newcount\linetablesubcol -\newdimen\linetablewidth -\newdimen\linetableheight -\newbox \linetablecell +\newconstant \c_tabl_lines_hmode +\newconstant \c_tabl_lines_page +\newconstant \c_tabl_lines_repeat +\newconstant \c_tabl_lines_split_state +\newconstant \c_tabl_lines_head_state +\newconstant \c_tabl_lines_mode -\let\noflinetablecolumns\!!zerocount -\let\noflinetablerows \!!zerocount -\let\noflinetablelines \!!zerocount -\let\noflinetableparts \!!zerocount -\let\linetablepart \!!plusone -\let\linetablestep \!!plusone -\let\linetableline \!!zerocount -\let\linetablerow \!!zerocount -\let\linetablerows \!!zerocount +\newtoks \t_tabl_lines_head -\initializetablebox \zerocount % holds repeater +\newconditional \linetableautoheight \settrue\linetableautoheight -\newconstant\linetablehmode -\newconstant\linetablepage -\newconstant\linetablerepeat +\initializetablebox\zerocount % holds repeater \unexpanded\def\setuplinetable - {\dotripleempty\dosetuplinetable} + {\dotripleempty\tabl_lines_setup} -\def\dosetuplinetable[#1][#2][#3]% +\def\tabl_lines_setup[#1][#2][#3]% {\ifthirdargument - \getparameters[\??le:#1:#2][#3]% + \getparameters[\??linetable#1:#2][#3]% \else\ifsecondargument - \getparameters[\??lec#1][#2]% + \getparameters[\??linetable#1:][#2]% \else - \getparameters[\??le][#1]% + \getparameters[\??linetable][#1]% \fi\fi} \setuplinetable - [\c!n=\!!maxcard, - \c!lines=\!!maxcard, + [\c!n=\maxcard, + \c!lines=\maxcard, \c!nx=\plusone, - \c!nleft=0, - \c!repeat=\v!yes, % when \c!nleft>0, repeat on both pages + \c!nleft=\zerocount, + \c!repeat=\v!yes, % when nleft > 0, repeat on both pages \c!before=, \c!after=, \c!inbetween=\page, \c!distance=\zeropoint, \c!stretch=\v!no, \c!align=\c!right, - \c!leftoffset=.25ex, + \c!leftoffset=.25\exheight, \c!rightoffset=\linetableparameter\c!leftoffset, \c!maxwidth=\zeropoint, - \c!width=5em, + \c!width=5\emwidth, \c!height=\v!fit, % \v!line = faster \c!background=, \c!backgroundcolor=] - + \def\linetableparameter#1% - {\csname\??le#1\endcsname} + {\begincsname\??linetable#1\endcsname} -\def\doifelselinetablecparameter#1% - {\ifcsname\??lec\number\linetablecolumn#1\endcsname +\unexpanded\def\doifelselinetablecparameter#1% + {\ifcsname\??linetable c:\number\c_tabl_lines_column#1\endcsname \expandafter\firstoftwoarguments + \else\ifcsname\??linetable c:#1\endcsname + \doubleexpandafter\firstoftwoarguments \else - \expandafter\secondoftwoarguments - \fi} + \doubleexpandafter\secondoftwoarguments + \fi\fi} \let\doiflinetablecparameterelse\doifelselinetablecparameter \def\linetablecparameter#1% - {\csname - \ifcsname\??lec\number\linetablecolumn#1\endcsname - \??lec\number\linetablecolumn - \else - \??le - \fi - #1\endcsname} + {\begincsname + \??linetable + \ifcsname\??linetable c:\number\c_tabl_lines_column#1\endcsname + c:\number\c_tabl_lines_column + \else\ifcsname\??linetable c:#1\endcsname + c:% + \fi\fi + #1% + \endcsname} \def\linetablerparameter#1% faster, leaner and meaner - {\csname - \ifnum\linetablerow=\zerocount % geen ifcase - \ifcsname\??ler\v!header#1\endcsname - \??ler\v!header#1% - \else\ifcsname\??ler0#1\endcsname - \??ler0#1% - \else - \s!empty + {\begincsname + \??linetable + \ifnum\c_tabl_lines_row=\zerocount % geen ifcase + \ifcsname\??linetable r:\v!header#1\endcsname + r:\v!header + \else\ifcsname\??linetable r:0#1\endcsname + r:0% \fi\fi \else - \ifcsname\??ler\number\linetablerow#1\endcsname - \??ler\number\linetablerow#1% - \else\ifcsname\??ler\v!oddeven\linetablerow#1\endcsname - \??ler\v!oddeven\linetablerow#1% - \else - \s!empty + \ifcsname\??linetable r:\number\c_tabl_lines_row#1\endcsname + r:\number\c_tabl_lines_row + \else\ifcsname\??linetable r:\v!oddeven\c_tabl_lines_row#1\endcsname + r:\v!oddeven\c_tabl_lines_row \fi\fi \fi + #1% \endcsname} - -\def\setnoftableslines - {\doifelse{\linetableparameter\c!lines}\v!fit - {% whitespace already added by vertical strut - \ifdim\pagegoal<\maxdimen - \scratchdimen\pagegoal - \advance\scratchdimen -\pagetotal - \else - \scratchdimen\textheight - \fi - \getrawnoflines\scratchdimen - \xdef\noflinetablelines{\the\noflines} -\iflinetablepreroll \else \ifnum\noflinetablelines<\plustwo - \page \setnoftableslines -\fi \fi -} - {\xdef\noflinetablelines{\linetableparameter\c!lines}}} - + +\unexpanded\def\tabl_lines_set + {\edef\p_lines{\linetableparameter\c!lines}% + \ifx\p_lines\v!fit + \tabl_lines_set_indeed + \else + \global\c_tabl_lines_n_of_lines\p_lines + \fi} + +\unexpanded\def\tabl_lines_set_indeed + {% whitespace already added by vertical strut + %\triggerpagebuilder + \scratchdimen + \ifdim\pagegoal<\maxdimen + \dimexpr\pagegoal-\pagetotal\relax + \else + \textheight + \fi + \getrawnoflines\scratchdimen + \global\c_tabl_lines_n_of_lines\noflines + \ifconditional\c_tabl_lines_preroll \else \ifnum\c_tabl_lines_n_of_lines<\plustwo + \page + \tabl_lines_set + \fi \fi} + \unexpanded\def\startlinetablecell - {\dosingleempty\dostartlinetablecell} + {\dosingleempty\tabl_lines_start_cell} -\def\dostartlinetablecell[#1]% - {\global\setbox\linetablecell\hbox\bgroup +\def\tabl_lines_step_cell + {\advance\scratchdimen\linetablecparameter\c!width + \global\advance \c_tabl_lines_column\plusone + \advance\scratchskip \linetablecparameter\c!distance} + +\def\tabl_lines_start_cell[#1]% + {\global\setbox\b_tabl_lines_cell\hbox\bgroup \iffirstargument - \getparameters[\??lec\number\linetablecolumn][#1]% + \getparameters[\??linetable c:\number\c_tabl_lines_column][#1]% \fi - \xdef\linetablestep{\linetablecparameter\c!nx}% - \ifcase\linetablestep\or + \global\c_tabl_lines_step\linetablecparameter\c!nx\relax + \ifcase\c_tabl_lines_step\or \scratchdimen\linetablecparameter\c!width \scratchskip \linetablecparameter\c!distance \else \scratchdimen \zeropoint \scratchskip \zeropoint - \scratchcounter\linetablecolumn - \dorecurse\linetablestep - {\advance\scratchdimen\linetablecparameter\c!width - %\advance\scratchskip \linetablecparameter\c!distance - \global\advance \linetablecolumn\plusone - \advance\scratchskip \linetablecparameter\c!distance - }% - \global\linetablecolumn\scratchcounter + \scratchcounter\c_tabl_lines_column + \dorecurse\c_tabl_lines_step\tabl_lines_step_cell + \global\c_tabl_lines_column\scratchcounter \fi - \linetablemode - \iflinetablepreroll + \c_tabl_lines_mode + \ifconditional\c_tabl_lines_preroll \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi \else \zerocount \fi - \ifcase\linetablemode - \ifcase\linetablehmode + \ifcase\c_tabl_lines_mode + \ifcase\c_tabl_lines_hmode % nothing \or % fit, keep it simple \or - \linetablemode\plusone % line + \c_tabl_lines_mode\plusone % line \else % some already calculated height \fi @@ -235,29 +243,27 @@ % 0 = width, unknown height % 1 = width, fixed height % 2 = no width, auto hsize - \ifnum\linetablemode<\plustwo + \ifnum\c_tabl_lines_mode<\plustwo \advance\scratchdimen-\linetablecparameter\c!leftoffset \advance\scratchdimen-\linetablecparameter\c!rightoffset \fi - \ifcase\linetablemode + \ifcase\c_tabl_lines_mode \dosetraggedcommand{\linetablecparameter\c!align}% - \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup + \vtop \ifdim\d_tabl_lines_height>\zeropoint to\d_tabl_lines_height \fi \bgroup \hsize\scratchdimen \raggedcommand \else \setalignmentswitch{\linetablecparameter\c!align}% - \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup + \hbox \ifcase\c_tabl_lines_mode \or to\scratchdimen \fi \bgroup \ifcase\alignmentswitch\hss\or\hss\fi \fi - \dousestylehashparameter{\??lec\number\linetablecolumn}\c!style - \dousecolorhashparameter{\??lec\number\linetablecolumn}\c!color + \dousestyleparameter{\linetablecparameter\c!style}% + \dousecolorparameter{\linetablecparameter\c!color}% \begstrut \ignorespaces} -\newconditional\linetableautoheight \settrue\linetableautoheight - \unexpanded\def\stoplinetablecell {\unskip \endstrut - \ifcase\linetablemode + \ifcase\c_tabl_lines_mode \endgraf \else \ifcase\alignmentswitch\else\hss\fi @@ -265,31 +271,46 @@ \egroup \hskip\linetablecparameter\c!rightoffset \egroup - \iflinetablepreroll + \ifconditional\c_tabl_lines_preroll \box\scratchbox \else - \doifelse{\linetablecparameter\c!background}\v!color - {\ifconditional\linetableautoheight - \hbox{\blackrule - [ \c!color=\linetablecparameter\c!backgroundcolor, - \c!height=\linetablerparameter{x\c!height}, - \c!depth=\linetablerparameter{x\c!depth}, - \c!width=\wd\scratchbox]% - \hskip-\wd\scratchbox\box\scratchbox}% - \else - \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}% - \fi}% - {\box\scratchbox}% + \tabl_lines_wrap_up \fi \egroup} -\def\savelinetablepart - {\global\setbox\tablebox\linetablepart - \ifnum\linetablepart=\zerocount +\def\tabl_lines_wrap_up + {\edef\p_background{\linetablecparameter\c!background}% + \ifx\p_background\v!color + \ifconditional\linetableautoheight + \tabl_lines_wrap_up_auto + \else + \tabl_lines_wrap_up_line + \fi + \else + \box\scratchbox + \fi} + +\def\tabl_lines_wrap_up_auto + {\edef\p_height{\linetablerparameter{x\c!height}}% + \edef\p_depth {\linetablerparameter{x\c!depth }}% + \hbox + {\blackrule + [ \c!color=\linetablecparameter\c!backgroundcolor, + \c!height=\ifx\p_height\empty\ht\scratchbox\else\p_height\fi, + \c!depth=\ifx\p_depth \empty\dp\scratchbox\else\p_depth \fi, + \c!width=\wd\scratchbox]% + \hskip-\wd\scratchbox\box\scratchbox}} + +\def\tabl_lines_wrap_up_line + {\backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}} + +\def\tabl_lines_save_part + {\global\setbox\tablebox\c_tabl_lines_part + \ifnum\c_tabl_lines_part=\zerocount \box\scratchbox % just storing \else \vbox - {\ifvoid\tablebox\linetablepart\else\unvbox\tablebox\linetablepart\fi + {\ifvoid\tablebox\c_tabl_lines_part\else\unvbox\tablebox\c_tabl_lines_part\fi \doif{\linetablerparameter\c!background}\v!color {\backgroundline[\linetablerparameter\c!backgroundcolor]}% {\box\scratchbox}% is also arg to \backgroundline @@ -297,86 +318,90 @@ \linetablerparameter\c!after}% \fi} -\def\flushlinetableparts - {\doglobal\increment\linetableline - \ifnum\linetableline<\noflinetablelines +\def\tabl_lines_flush_parts + {\global\advance\c_tabl_lines_line\plusone + \ifnum\c_tabl_lines_line<\c_tabl_lines_n_of_lines % keep collecting \else - \iflinetablepreroll + \ifconditional\c_tabl_lines_preroll % forget about them \else - \dorecurse\noflinetableparts - {\let\linetablepart\recurselevel - \dp\tablebox\linetablepart\strutdepth + \dorecurse\c_tabl_lines_n_of_parts + {\c_tabl_lines_part\recurselevel + \dp\tablebox\c_tabl_lines_part\strutdepth % noindent en endgraf needed else whitespace mess-up! \whitespace % here not after verticalstrut \ifdim\topskipgap=\zeropoint\else - \verticalstrut\nobreak\kern-\struttotal\kern-\parskip\nobreak\nointerlineskip % fix topskip + \verticalstrut + \nobreak + \kern-\struttotal + \kern-\parskip + \nobreak + \nointerlineskip % fix topskip \fi - \noindent\strut\hbox to \hsize{\box\tablebox\linetablepart\hss}\endgraf - \ifnum\linetablepart<\noflinetableparts\relax + \noindent\strut + \hbox to \hsize{\box\tablebox\c_tabl_lines_part\hss}% + \endgraf + \ifnum\c_tabl_lines_part<\c_tabl_lines_n_of_parts\relax \linetableparameter\c!inbetween \fi}% - \ifnum\linetablerows<\noflinetablerows\relax + \ifnum\c_tabl_lines_rows<\c_tabl_lines_n_of_rows \linetableparameter\c!inbetween \else % after, later \fi - \linetableheadstate\plusthree + \c_tabl_lines_head_state\plusthree \global\setbox\tablebox\zerocount\emptybox % here \fi - % reset \linetablerow will be an option, currently + % reset \c_tabl_lines_row will be an option, currently % starts at zero after split - \globallet\linetablerow\!!zerocount - \globallet\linetableline\!!zerocount - \global\linetablepage\zerocount - \global\linetablewidth\zeropoint - \setnoftableslines + \global\c_tabl_lines_row\zerocount + \global\c_tabl_lines_line\zerocount + \global\c_tabl_lines_page\zerocount + \global\d_tabl_lines_width\zeropoint + \tabl_lines_set \fi} - -\unexpanded\def\startlinetablepart - {\global\linetablesubcol\zerocount + +\def\tabl_lines_start_part + {\global\c_tabl_lines_subcol\zerocount \setbox\scratchbox\hbox\bgroup \dousestyleparameter{\linetablerparameter\c!style}% \dousecolorparameter{\linetablerparameter\c!color}% \ignorespaces} -\unexpanded\def\stoplinetablepart - {\ifnum\linetablepart>\zerocount +\def\tabl_lines_stop_part + {\ifnum\c_tabl_lines_part>\zerocount \unskip \unskip % remove last intercolumn skip (distance+fill) \fi \egroup - \iflinetablepreroll \else - \ifcase\linetablepart + \ifconditional\c_tabl_lines_preroll \else + \ifcase\c_tabl_lines_part % we're collecting the repeater \else - \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax - \ifdim\scratchdimen>\linetableparameter\c!stretch\else - \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% + \ifdim\dimexpr\hsize-\wd\scratchbox\relax>\linetableparameter\c!stretch\else + \setbox\scratchbox\hpack to \hsize{\unhbox\scratchbox}% \fi \fi \fi} -\def\checklinetablepart - {\global\advance\linetablewidth\wd\linetablecell - \global\advance\linetablecolumn\linetablestep - \global\advance\linetablesubcol\linetablestep +\def\tabl_lines_check_part + {\global\advance\d_tabl_lines_width\wd\b_tabl_lines_cell + \global\advance\c_tabl_lines_column\c_tabl_lines_step + \global\advance\c_tabl_lines_subcol\c_tabl_lines_step \relax - %\message{\the\linetablecolumn,\the\linetablesubcol}\wait + %\message{\the\c_tabl_lines_column,\the\c_tabl_lines_subcol}\wait % from now on the column counter is already incremented - \ifcase\linetablesplitstate - \iflinetablepreroll \else - \box\linetablecell + \ifcase\c_tabl_lines_split_state + \ifconditional\c_tabl_lines_preroll \else + \box\b_tabl_lines_cell % the columncounter is one ahead ! -% \hskip\linetablecparameter\c!afstand \hskip\scratchskip \fi %%% \donefalse - \ifcase\linetablerepeat\else - % van te voren berekenen - \scratchcounter\linetablecolumn\advance\scratchcounter-\plustwo - \ifnum\linetablerepeat=\scratchcounter + \ifcase\c_tabl_lines_repeat\else + % calculate ahead + \ifnum\c_tabl_lines_repeat=\numexpr\c_tabl_lines_column-\plustwo\relax \donetrue % collecting repeater \fi \fi @@ -384,85 +409,79 @@ \ifdone % collecting repeater \else - \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax + \ifnum\c_tabl_lines_column>\csname\??linetablepart\number\c_tabl_lines_part\endcsname\relax \donetrue \fi \fi \ifdone - \stoplinetablepart - \iflinetablepreroll \else - \savelinetablepart + \tabl_lines_stop_part + \ifconditional\c_tabl_lines_preroll \else + \tabl_lines_save_part \fi - \ifcase\linetablepage \or - \global\linetablepage \plustwo + \ifcase\c_tabl_lines_page \or + \global\c_tabl_lines_page \plustwo \else - \global\linetablepage \plusone + \global\c_tabl_lines_page \plusone \fi - \doglobal\increment\linetablepart - \global\linetablewidth\wd\tablebox\zerocount - \startlinetablepart + \global\advance\c_tabl_lines_part\plusone + \global\d_tabl_lines_width\wd\tablebox\zerocount + \tabl_lines_start_part \fi \else \donefalse \!!doneafalse - \ifcase\linetablerepeat\else - % van te voren berekenen - \scratchcounter\linetablecolumn \advance\scratchcounter-\plustwo - \ifnum\linetablerepeat=\scratchcounter + \ifcase\c_tabl_lines_repeat\else + % calculate ahead + \ifnum\c_tabl_lines_repeat=\numexpr\c_tabl_lines_column-\plustwo\relax \donetrue % collecting repeater \fi \fi \ifdone \!!doneatrue % collecting repeater - \else\ifdim\linetablewidth>\hsize + \else\ifdim\d_tabl_lines_width>\hsize \donetrue \else -% \global\advance\linetablewidth\linetablecparameter\c!afstand\relax - \global\advance\linetablewidth\scratchskip - \ifdim\linetablewidth>\hsize % ? + \global\advance\d_tabl_lines_width\scratchskip + \ifdim\d_tabl_lines_width>\hsize % ? \donetrue \fi \fi\fi \ifdone - \stoplinetablepart - \savelinetablepart - \ifcase\linetablepage \or - \global\linetablepage \plustwo + \tabl_lines_stop_part + \tabl_lines_save_part + \ifcase\c_tabl_lines_page \or + \global\c_tabl_lines_page \plustwo \else - \global\linetablepage \plusone + \global\c_tabl_lines_page \plusone \fi - \doglobal\increment\linetablepart - \ifnum\linetablepart>\noflinetableparts - \globallet\noflinetableparts\linetablepart - \initializetablebox\linetablepart + \global\advance\c_tabl_lines_part\plusone + \ifnum\c_tabl_lines_part>\c_tabl_lines_n_of_parts + \global\c_tabl_lines_n_of_parts\c_tabl_lines_part + \initializetablebox\c_tabl_lines_part \fi - \global\linetablewidth\wd\linetablecell - \startlinetablepart - \if!!doneb \else \ifcase\linetablerepeat \else + \global\d_tabl_lines_width\wd\b_tabl_lines_cell + \tabl_lines_start_part + \if!!doneb \else \ifcase\c_tabl_lines_repeat \else % check for left/right page - \ifcase\linetablepage\donetrue\or\donetrue\or\donefalse\fi\ifdone + \ifcase\c_tabl_lines_page\donetrue\or\donetrue\or\donefalse\fi\ifdone % insert repeater - \global\advance\linetablewidth\wd\tablebox\zerocount - \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount + \global\advance\d_tabl_lines_width\wd\tablebox\zerocount + \ifconditional\c_tabl_lines_preroll\kern\wd\else\unhcopy\fi\tablebox\zerocount \fi \fi \fi \fi - \iflinetablepreroll \else - \box\linetablecell + \ifconditional\c_tabl_lines_preroll \else + \box\b_tabl_lines_cell % the columncounter is one ahead ! -% \hskip\linetablecparameter\c!afstand -% \hskip\scratchskip -\dorecurse\linetablestep{\strut\hfil}% + \dorecurse\c_tabl_lines_step{\strut\hfil}% \hskip\scratchskip \fi \fi} - -% \linetableparameter\c!var -> \@@levar (when no classes) \unexpanded\def\startlinetablerun % to do: quit when nested {\bgroup - \inlinetabletrue + \settrue\c_tabl_lines_in_table % autowidth \doif{\linetableparameter\c!maxwidth}\v!fit {\setuplinetable[\c!maxwidth=\zeropoint]}% @@ -470,157 +489,138 @@ [\linetableparameter\c!stretch] [ \v!no=>{\setuplinetable[\c!stretch=\maxdimen]},% no stretch \v!yes=>{\setuplinetable[\c!stretch=\zeropoint]}]% max stretch - \linetablerepeat\linetableparameter\c!nleft - \linetablesplitstate % = + \c_tabl_lines_repeat\linetableparameter\c!nleft + \c_tabl_lines_split_state % = \ifdim\linetableparameter\c!maxwidth>\zeropoint \zerocount \else \plusone \fi % optional prevdepth correction - \iflinetablepreroll - \globallet\noflinetablerows\!!zerocount + \ifconditional\c_tabl_lines_preroll + \global\c_tabl_lines_n_of_rows\zerocount \else \linetableparameter\c!before \fi - \globallet\linetablerows\!!zerocount - \globallet\noflinetablecolumns\!!zerocount - \globallet\noflinetableparts\!!zerocount - \!!counta\zerocount + \global\c_tabl_lines_rows\zerocount + \global\c_tabl_lines_n_of_columns\zerocount + \global\c_tabl_lines_n_of_parts\zerocount + \scratchcounter\zerocount \def\docommand##1% - {\doglobal\increment\noflinetableparts - \advance\!!counta##1% - \setxvalue{\??le::\noflinetableparts}{\the\!!counta}}% + {\global\advance\c_tabl_lines_n_of_parts\plusone + \advance\scratchcounter##1% + \setxvalue{\??linetablepart\number\c_tabl_lines_n_of_parts}{\the\scratchcounter}}% \processcommacommand[\linetableparameter\c!n]\docommand - \initializetableboxes\noflinetableparts - \ifcase\linetablerepeat - \globallet\linetablepart\!!plusone - \else - \globallet\linetablepart\!!zerocount % repeater - \fi - \globallet\linetablestep\!!plusone - \globallet\linetableline\!!zerocount - \globallet\linetablerow \!!zerocount - \global\linetablecolumn \zerocount - \global\linetablesubcol \zerocount - \global\linetablewidth \zeropoint -\iflinetablepreroll \else \ifdim\pagetotal>\zeropoint - \verticalstrut\kern-\struttotal -\fi \fi - \setnoftableslines - \checklinetablepage - \let\BR\linetableBR - \let\ER\linetableER - \let\BH\linetableBR - \let\EH\linetableER - \let\BC\linetableBC - \let\EC\linetableEC - \let\NC\linetableNC - \let\NR\linetableNR - \flushlinetablehead} + \initializetableboxes\c_tabl_lines_n_of_parts + \global\c_tabl_lines_part\ifcase\c_tabl_lines_repeat\plusone\else\zerocount\fi % repeater + \global\c_tabl_lines_step\plusone + \global\c_tabl_lines_line\zerocount + \global\c_tabl_lines_row \zerocount + \global\c_tabl_lines_column\zerocount + \global\c_tabl_lines_subcol\zerocount + \global\d_tabl_lines_width\zeropoint + \ifconditional\c_tabl_lines_preroll \else \ifdim\pagetotal>\zeropoint + \verticalstrut\kern-\struttotal + \fi \fi + \tabl_lines_set + \tabl_lines_check_page + \let\BR\tabl_lines_BR + \let\ER\tabl_lines_ER + \let\BH\tabl_lines_BR + \let\EH\tabl_lines_ER + \let\BC\tabl_lines_BC + \let\EC\tabl_lines_EC + \let\NC\tabl_lines_NC + \let\NR\tabl_lines_NR + \tabl_lines_flush_head} \unexpanded\def\stoplinetablerun - {\globallet\linetableline\!!maxcard - \linetableheadstate\zerocount % blocked - \flushlinetableparts - \iflinetablepreroll \else + {\global\c_tabl_lines_line\maxcard + \c_tabl_lines_head_state\zerocount % blocked + \tabl_lines_flush_parts + \ifconditional\c_tabl_lines_preroll \else \linetableparameter\c!after \fi - \globallet\linetablepart \!!zerocount - \globallet\noflinetableparts\!!zerocount + \global\c_tabl_lines_part\zerocount + \global\c_tabl_lines_n_of_parts\zerocount \egroup} \def\checklinecolumndimension#1#2#3% {\expandafter\xdef\csname#1\number#3\endcsname {\expandafter\ifx\csname#1\number#3\endcsname\relax - \the#2\linetablecell - \else\ifdim\csname#1\number#3\endcsname<#2\linetablecell - \the#2\linetablecell + \the#2\b_tabl_lines_cell + \else\ifdim\csname#1\number#3\endcsname<#2\b_tabl_lines_cell + \the#2\b_tabl_lines_cell \else \csname#1\number#3\endcsname \fi\fi}} -\def\checklinecolumnwidth {\checklinecolumndimension\??lew\wd\linetablecolumn} -\def\checklinecolumnheight{\checklinecolumndimension\??leh\ht\linetablerow} -\def\checklinecolumndepth {\checklinecolumndimension\??led\dp\linetablerow} - -\def\linetableBR - {\dosingleempty\dolinetableBR} - -\def\dolinetableBR[#1]% #1 not yet implemented - {\ifnum\linetableheadstate=1\else - \doglobal\increment\linetablerow - \doglobal\increment\linetablerows +\def\tabl_lines_check_width {\checklinecolumndimension\??linetablewidth \wd\c_tabl_lines_column} +\def\tabl_lines_check_height{\checklinecolumndimension\??linetableheight\ht\c_tabl_lines_row} +\def\tabl_lines_check_depth {\checklinecolumndimension\??linetabledepth \dp\c_tabl_lines_row} + +\unexpanded\def\tabl_lines_BR + {\dosingleempty\tabl_lines_BR_indeed} + +\def\tabl_lines_BR_indeed[#1]% #1 not yet implemented + {\ifnum\c_tabl_lines_head_state=1\else + \global\advance\c_tabl_lines_row\plusone + \global\advance\c_tabl_lines_rows\plusone \fi - \global\linetablecolumn\plusone - \global\linetablesubcol\plusone -% \linetableheight\linetablerparameter\c!height -% -% \ifx\linetableheight\empty -% % nothing -% \else\ifx\linetableheight\v!fit -% % keep it simple -% \else\ifx\linetableheight\v!line -% \linetablemode\plusone -% \else -% \!!heighta\linetableheight -% \advance\!!heighta-\strutdepth -% \fi\fi\fi -% - \linetableheight\zeropoint - \edef\!!stringa{\linetablerparameter\c!height}% - \ifx\!!stringa\empty - \linetablehmode\zerocount - \else\ifx\!!stringa\v!fit - \linetablehmode\plusone - \else\ifx\!!stringa\v!line - \linetablehmode\plustwo + \global\c_tabl_lines_column\plusone + \global\c_tabl_lines_subcol\plusone + \d_tabl_lines_height\zeropoint + \edef\p_height{\linetablerparameter\c!height}% + \ifx\p_height\empty + \c_tabl_lines_hmode \zerocount + \else\ifx\p_height\v!fit + \c_tabl_lines_hmode \plusone + \else\ifx\p_height\v!line + \c_tabl_lines_hmode \plustwo \else - \linetableheight\!!stringa - \advance\linetableheight-\strutdepth + \d_tabl_lines_height\dimexpr\p_height-\strutdepth\relax \fi\fi\fi -% - \startlinetablepart} + \tabl_lines_start_part} -\def\linetableBC +\unexpanded\def\tabl_lines_BC {\startlinetablecell} -\def\linetableEC +\unexpanded\def\tabl_lines_EC {\stoplinetablecell - \iflinetablepreroll - \checklinecolumnwidth - \checklinecolumnheight - \checklinecolumndepth + \ifconditional\c_tabl_lines_preroll + \tabl_lines_check_width + \tabl_lines_check_height + \tabl_lines_check_depth \fi - \checklinetablepart} + \tabl_lines_check_part} -\def\linetableER +\unexpanded\def\tabl_lines_ER {% \stoplinetablecell - % no \box\linetablecell, i.e. dummy columnn, last \NC \NR - \stoplinetablepart - \savelinetablepart - \advance\linetablecolumn \minusone - \ifnum\linetablecolumn>\noflinetablecolumns - \xdef\noflinetablecolumns{\number\linetablecolumn}% + % no \box\b_tabl_lines_cell, i.e. dummy columnn, last \NC \NR + \tabl_lines_stop_part + \tabl_lines_save_part + \advance\c_tabl_lines_column \minusone + \ifnum\c_tabl_lines_column>\c_tabl_lines_n_of_columns + \global\c_tabl_lines_n_of_columns\c_tabl_lines_column \fi - \flushlinetableparts - \global\linetablecolumn\zerocount - \global\linetablewidth \zeropoint - \ifcase\linetablerepeat - \globallet\linetablepart\!!plusone + \tabl_lines_flush_parts + \global\c_tabl_lines_column\zerocount + \global\d_tabl_lines_width \zeropoint + \ifcase\c_tabl_lines_repeat + \global\c_tabl_lines_part\plusone \else - \globallet\linetablepart\!!zerocount % repeater + \global\c_tabl_lines_part\zerocount % repeater \fi - \checklinetablepage - \flushlinetablehead} + \tabl_lines_check_page + \tabl_lines_flush_head} -\def\checklinetablepage - {\global\linetablepage\zerocount - \ifcase\linetablerepeat \else \ifcase\linetablepage +\def\tabl_lines_check_page + {\global\c_tabl_lines_page\zerocount + \ifcase\c_tabl_lines_repeat \else \ifcase\c_tabl_lines_page \doif{\linetableparameter\c!repeat}\v!no - {\global\linetablepage\doifelseoddpage\plusone\plustwo}% + {\global\c_tabl_lines_page\doifelseoddpage\plusone\plustwo}% \fi \fi} -\def\flushlinetablehead - {\ifcase\linetableheadstate +\def\tabl_lines_flush_head + {\ifcase\c_tabl_lines_head_state % 0 blocked \or % 1 doing head @@ -628,24 +628,24 @@ % 2 head done \or % 3 trigger flush - \linetableheadstate\plusone - \the\@@linetablehead\relax - \linetableheadstate\plustwo + \c_tabl_lines_head_state\plusone + \the\t_tabl_lines_head\relax + \c_tabl_lines_head_state\plustwo \fi} -\def\linetableNC % first time special treatment +\unexpanded\def\tabl_lines_NC % first time special treatment {\relax - \ifcase\linetablecolumn - \linetableBR + \ifcase\c_tabl_lines_column + \tabl_lines_BR \else - \linetableEC + \tabl_lines_EC \fi - \linetableBC} % beware, this will result in BR BC EC BC NR + \tabl_lines_BC} % beware, this will result in BR BC EC BC NR -\def\linetableNR +\unexpanded\def\tabl_lines_NR {\stoplinetablecell % dummy - \linetableER} - + \tabl_lines_ER} + \unexpanded\def\startlinetable {\startlinetablerun} @@ -654,73 +654,87 @@ \unexpanded\def\startlinetableanalysis {\bgroup - \linetableprerolltrue + \settrue\c_tabl_lines_preroll \settrialtypesetting \startlinetablerun} +% \unexpanded\def\stoplinetableanalysis +% {\stoplinetablerun +% \egroup +% \global\c_tabl_lines_n_of_rows\c_tabl_lines_rows +% \dorecurse\c_tabl_lines_n_of_rows % global, from last run {\linetableparameter\c!n} +% {\setevalue{\??linetable r:\recurselevel x\c!height}{\getvalue{\??linetableheight\recurselevel}}% +% \setevalue{\??linetable r:\recurselevel x\c!depth }{\getvalue{\??linetabledepth \recurselevel}}% +% \letgvalue{\??linetableheight\recurselevel}\!!zeropoint +% \letgvalue{\??linetabledepth \recurselevel}\!!zeropoint} +% \dorecurse\c_tabl_lines_n_of_columns % global, from last run {\linetableparameter\c!n} +% {\setevalue{\??linetable c:\recurselevel\c!width}{\getvalue{\??linetablewidth\recurselevel}}% +% \letgvalue{\??linetablewidth\recurselevel}\!!zeropoint}} % init next table + \unexpanded\def\stoplinetableanalysis {\stoplinetablerun \egroup - \globallet\noflinetablerows\linetablerows - \dorecurse\noflinetablerows % global, from last run {\linetableparameter\c!n} - {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% - \setevalue{\??ler\recurselevel x\c!height}{\getvalue{\??leh\recurselevel}}% - \setevalue{\??ler\recurselevel x\c!depth }{\getvalue{\??led\recurselevel}}% - \letgvalue{\??leh\recurselevel}\!!zeropoint - \letgvalue{\??led\recurselevel}\!!zeropoint} - \dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n} - {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% - \setevalue{\??lec\recurselevel\c!width}{\getvalue{\??lew\recurselevel}}% - \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table - + \global\c_tabl_lines_n_of_rows\c_tabl_lines_rows + \dorecurse\c_tabl_lines_n_of_rows % global, from last run {\linetableparameter\c!n} + {\setevalue{\??linetable r:##1x\c!height}{\csname\??linetableheight##1\endcsname}% + \setevalue{\??linetable r:##1x\c!depth }{\csname\??linetabledepth ##1\endcsname}% + \letgvalue{\??linetableheight##1}\zeropoint + \letgvalue{\??linetabledepth ##1}\zeropoint} + \dorecurse\c_tabl_lines_n_of_columns % global, from last run {\linetableparameter\c!n} + {\setevalue{\??linetable c:##1\c!width}{\csname\??linetablewidth##1\endcsname}% + \letgvalue{\??linetablewidth##1}\zeropoint}} % init next table + % todo: store in box instead of macro -\newtoks \@@linetablehead +\let\stoplinetablehead\relax \unexpanded\def\startlinetablehead#1\stoplinetablehead - {\ifinlinetable - \@@linetablehead\emptytoks + {\ifconditional\c_tabl_lines_in_table + \t_tabl_lines_head\emptytoks \fi - \linetableheadstate\plusthree % full - \@@linetablehead{#1}% - \ifinlinetable - \flushlinetablehead + \c_tabl_lines_head_state\plusthree % full + \t_tabl_lines_head{#1}% + \ifconditional\c_tabl_lines_in_table + \tabl_lines_flush_head \fi} -\def\linetableBH +\unexpanded\def\tabl_lines_BH {\ifx\EC\relax % signal, grabbing lines \else - \@@linetablehead\emptytoks + \t_tabl_lines_head\emptytoks \fi \pushmacro\BC \pushmacro\EC - \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}% + \def\BC##1\EC{\appendtoks##1\to\t_tabl_lines_head}% \let\EC\relax} % signal -\def\linetableEH +\unexpanded\def\tabl_lines_EH {\popmacro\EC \popmacro\BC - \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead} - -\let\startlinetablebody\donothing -\let\stoplinetablebody \donothing + \expandafter\startlinetablehead\the\t_tabl_lines_head\stoplinetablehead} -\def\processlinetablebuffer - {\dosingleempty\doprocesslinetablebuffer} +\let\startlinetablebody\relax +\let\stoplinetablebody \relax -\def\doprocesslinetablebuffer[#1]% +\unexpanded\def\processlinetablebuffer + {\dosingleempty\tabl_lines_process_buffer} + +\def\tabl_lines_process_buffer[#1]% {\bgroup - \let\startlinetable\donothing - \let\stoplinetable \donothing + \let\startlinetable\relax + \let\stoplinetable \relax \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis \startlinetablerun \getbuffer[#1]\stoplinetablerun \egroup} -\def\processlinetablefile#1% +\unexpanded\def\processlinetablefile + {\dosingleempty\tabl_lines_process_file} + +\def\tabl_lines_process_file#1% maybe accept #1 as well as [#1] {\bgroup - \let\startlinetable\donothing - \let\stoplinetable \donothing + \let\startlinetable\relax + \let\stoplinetable \relax \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun \egroup} diff --git a/tex/context/base/toks-scn.lua b/tex/context/base/toks-scn.lua index c51912024..5c8dee8f3 100644 --- a/tex/context/base/toks-scn.lua +++ b/tex/context/base/toks-scn.lua @@ -437,3 +437,11 @@ function tokens.scantable(t,data) end return data end + +function tokens.constant(s) + if type(s) == "string" then + return "'" .. s .. "'" + else + return s + end +end diff --git a/tex/context/base/type-imp-cambria.mkiv b/tex/context/base/type-imp-cambria.mkiv index 9bfa2ee5c..8154817bd 100644 --- a/tex/context/base/type-imp-cambria.mkiv +++ b/tex/context/base/type-imp-cambria.mkiv @@ -55,10 +55,10 @@ \starttypescript [\s!serif] [cambria,cambria-m,cambria-a] [\s!name] \setups[\s!font:\s!fallback:\s!serif] - \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default] - \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default] - \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default] + \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default,\s!goodies=cambria] + \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default,\s!goodies=cambria] + \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default,\s!goodies=cambria] + \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default,\s!goodies=cambria] \stoptypescript \starttypescript [cambria,cambria-m,cambria-a] diff --git a/tex/context/base/typo-inj.lua b/tex/context/base/typo-inj.lua index b5d9e1c51..786c3c287 100644 --- a/tex/context/base/typo-inj.lua +++ b/tex/context/base/typo-inj.lua @@ -8,16 +8,20 @@ if not modules then modules = { } end modules ['typo-inj'] = { -- was node-par local tonumber = tonumber -local context = context -local implement = interfaces.implement +local context = context +local implement = interfaces.implement -local injectors = { } -typesetters.injectors = injectors -local list = { } -injectors.list = list -local showall = false +local injectors = { } +typesetters.injectors = injectors +local list = { } +injectors.list = list +local showall = false -local settings_to_array = utilities.parsers.settings_to_array +local settings_to_array = utilities.parsers.settings_to_array + +local variables = interfaces.variables +local v_next = variables.next +local v_previous = variables.previous local ctx_domarkinjector = context.domarkinjector local ctx_doactivateinjector = context.doactivateinjector @@ -72,10 +76,10 @@ end function injectors.check(name,n) -- we could also accent n = number : +/- 2 local injector = list[name] - if n == false then + if not n or n == "" or n == v_next then + n = injector.counter + 1 + elseif n == v_previous then n = injector.counter - elseif n == nil then - n = injector.counter + 1 -- next (upcoming) else n = tonumber(n) or 0 end @@ -89,6 +93,6 @@ implement { name = "resetinjector", actions = injectors.reset, arguments implement { name = "showinjector", actions = injectors.show, arguments = "string" } implement { name = "setinjector", actions = injectors.set, arguments = { "string", "string", "string" } } implement { name = "markinjector", actions = injectors.mark, arguments = "string" } -implement { name = "checkinjector", actions = injectors.check, arguments = "string" } -implement { name = "checkpreviousinjector", actions = injectors.check, arguments = { "string", true } } -implement { name = "checknextinjector", actions = injectors.check } +implement { name = "checkinjector", actions = injectors.check, arguments = { "string", "string" } } +--------- { name = "checkpreviousinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_previous) } } +--------- { name = "checknextinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_next) } } diff --git a/tex/context/base/typo-inj.mkiv b/tex/context/base/typo-inj.mkiv index 46cd9fe45..59f35378f 100644 --- a/tex/context/base/typo-inj.mkiv +++ b/tex/context/base/typo-inj.mkiv @@ -44,16 +44,19 @@ %D \startsection[title=Delta] fourth \index{fourth} \stopsection %D \stoptext -\unexpanded\def\resetinjector [#1]{\clf_resetinjector{#1}} -\unexpanded\def\markinjector [#1]{\dontleavehmode\clf_markinjector{#1}} -\unexpanded\def\checkinjector [#1]{\clf_checkinjector{#1}} -\unexpanded\def\checknextinjector {\clf_checknextinjector} -\unexpanded\def\checkpreviousinjector {\clf_checkpreviousinjector} -\unexpanded\def\dosetinjector [#1][#2][#3]{\clf_setinjector{#1}{#2}{#3}} -\unexpanded\def\doshowinjector [#1]{\clf_showinjector{#1}} +\unexpanded\def\resetinjector [#1]{\clf_resetinjector{#1}} +\unexpanded\def\markinjector [#1]{\dontleavehmode\clf_markinjector{#1}} +\unexpanded\def\docheckinjector [#1][#2]{\clf_checkinjector{#1}{#2}} +\unexpanded\def\checknextinjector [#1]{\clf_checkinjector{#1}{\v!next}} +\unexpanded\def\checkpreviousinjector [#1]{\clf_checkinjector{#1}{\v!previous}} +%unexpanded\def\checknextinjector [#1]{\clf_checknextinjector{#1}} +%unexpanded\def\checkpreviousinjector [#1]{\clf_checkpreviousinjector{#1}} +\unexpanded\def\dosetinjector [#1][#2][#3]{\clf_setinjector{#1}{#2}{#3}} +\unexpanded\def\doshowinjector [#1]{\clf_showinjector{#1}} -\unexpanded\def\setinjector {\dotripleargument\dosetinjector} -\unexpanded\def\showinjector{\dosingleempty\doshowinjector} +\unexpanded\def\checkinjector{\dodoubleempty \docheckinjector} +\unexpanded\def\setinjector {\dotripleargument\dosetinjector} +\unexpanded\def\showinjector {\dosingleempty \doshowinjector} \unexpanded\def\domarkinjector#1#2% called at the lua end {\dontleavehmode\llap{\infofont\ifcase#1\else\red\fi<#2>\quad}} diff --git a/tex/context/fonts/cambria.lfg b/tex/context/fonts/cambria.lfg new file mode 100644 index 000000000..04211009b --- /dev/null +++ b/tex/context/fonts/cambria.lfg @@ -0,0 +1,16 @@ +return { + name = "cambria", + version = "1.00", + comment = "Goodies that complement cambria.", + author = "Hans Hagen", + copyright = "ConTeXt development team", + extensions = { + { + name = "kern", -- adds to kerns + type = "pair", + data = { + [0x0153] = { [0x0301] = { false, { -500, 0, 0, 0 } } }, + } + } + } +} diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index bdb8b9651..ca3f1adbd 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 : 01/07/16 13:38:03 +-- merge date : 01/08/16 16:02:22 do -- begin closure to overcome local limits and interference |