From 65d3870ed9f83b3962404512e668f54559789a1b Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Tue, 10 Jul 2012 00:14:00 +0200 Subject: beta 2012.07.10 00:14 --- tex/context/base/cont-new.mkii | 2 +- tex/context/base/cont-new.mkiv | 2 +- tex/context/base/context-version.pdf | Bin 4140 -> 4143 bytes tex/context/base/context-version.png | Bin 105441 -> 105722 bytes tex/context/base/context.mkii | 2 +- tex/context/base/context.mkiv | 2 +- tex/context/base/font-ctx.lua | 3 ++- tex/context/base/node-rul.lua | 32 +++++++++++++++++++++++------- tex/context/base/node-rul.mkiv | 37 ++++++++++++++++++++++------------- tex/context/base/status-files.pdf | Bin 24481 -> 24472 bytes tex/context/base/status-lua.pdf | Bin 179530 -> 179535 bytes tex/context/base/strc-num.mkiv | 14 ------------- tex/context/base/strc-sec.mkiv | 33 +++++++++++++++++++++++++------ tex/context/base/util-dim.lua | 8 +++++++- 14 files changed, 88 insertions(+), 47 deletions(-) (limited to 'tex/context') diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index b589b1eb6..226a859f2 100644 --- a/tex/context/base/cont-new.mkii +++ b/tex/context/base/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2012.07.09 23:06} +\newcontextversion{2012.07.10 00:14} %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/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 3895ea717..f4d55037b 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{2012.07.09 23:06} +\newcontextversion{2012.07.10 00:14} %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/context-version.pdf b/tex/context/base/context-version.pdf index a36bc4c60..655d9263c 100644 Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png index 4b3cf9635..124e0cc4d 100644 Binary files a/tex/context/base/context-version.png and b/tex/context/base/context-version.png differ diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index c186c4a71..2b5608204 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2012.07.09 23:06} +\edef\contextversion{2012.07.10 00:14} %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 962bb4314..e5e07c4d4 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -25,7 +25,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2012.07.09 23:06} +\edef\contextversion{2012.07.10 00:14} %D For those who want to use this: diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua index fa6708d0c..a7dcd6edd 100644 --- a/tex/context/base/font-ctx.lua +++ b/tex/context/base/font-ctx.lua @@ -1428,7 +1428,8 @@ function helpers.dimenfactor(unit,tfmdata) -- could be a method of a font instan elseif unit == "em" then return (tfmdata and tfmdata.parameters.em_width) or 655360 else - return dimenfactors[unit] or unit + local du = dimenfactors[unit] + return du and 1/du or tonumber(unit) or 1 end end diff --git a/tex/context/base/node-rul.lua b/tex/context/base/node-rul.lua index 7f49edffc..d81016af0 100644 --- a/tex/context/base/node-rul.lua +++ b/tex/context/base/node-rul.lua @@ -86,6 +86,7 @@ local hpack_nodes = node.hpack local fontdata = fonts.hashes.identifiers local variables = interfaces.variables local dimenfactor = fonts.helpers.dimenfactor +local splitdimen = number.splitdimen local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes @@ -258,26 +259,43 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a return head end local w = list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,f,l.next) - local method, offset, continue, dy, rulethickness, unit, order, max, ma, ca, ta = - d.method, d.offset, d.continue, d.dy, d.rulethickness, d.unit, d.order, d.max, d.ma, d.ca, d.ta - local e = dimenfactor(unit,fontdata[f.font]) -- what if no glyph node + local method, offset, continue, dy, order, max = d.method, d.offset, d.continue, d.dy, d.order, d.max + local rulethickness, unit = d.rulethickness, d.unit + local ma, ca, ta = d.ma, d.ca, d.ta local colorspace = (ma > 0 and ma) or has_attribute(f,a_colorspace) or 1 local color = (ca > 0 and ca) or has_attribute(f,a_color) local transparency = (ta > 0 and ta) or has_attribute(f,a_transparency) local foreground = order == variables.foreground - rulethickness= rulethickness/2 + + local e = dimenfactor(unit,fontdata[f.font]) -- what if no glyph node + + local rt = tonumber(rulethickness) + if rt then + rulethickness = e * rulethickness / 2 + else + local n, u = splitdimen(rulethickness) + if n and u then -- we need to intercept ex and em and % and ... + rulethickness = n * dimenfactor(u,fontdata[f.font]) / 2 + else + rulethickness = 1/5 + end + end + if level > max then level = max end if method == 0 then -- center offset = 2*offset - m = (offset+(level-1)*dy+rulethickness)*e/2 +-- m = (offset+(level-1)*dy+rulethickness)*e/2 + m = (offset+(level-1)*dy)*e/2 + rulethickness/2 else m = 0 end for i=1,level do - local ht = (offset+(i-1)*dy+rulethickness)*e - m - local dp = -(offset+(i-1)*dy-rulethickness)*e + m +-- local ht = (offset+(i-1)*dy+rulethickness)*e - m +-- local dp = -(offset+(i-1)*dy-rulethickness)*e + m + local ht = (offset+(i-1)*dy)*e + rulethickness - m + local dp = -(offset+(i-1)*dy)*e + rulethickness + m local r = new_rule(w,ht,dp) local v = has_attribute(f,a_viewerlayer) -- quick hack diff --git a/tex/context/base/node-rul.mkiv b/tex/context/base/node-rul.mkiv index 5b260e669..54a43a006 100644 --- a/tex/context/base/node-rul.mkiv +++ b/tex/context/base/node-rul.mkiv @@ -21,15 +21,14 @@ %D overstrike,overstrikes, %D setupbar} %D -%D In the rare case that we need undelined words, for instance -%D because all font alternatives are already in use, one can -%D use \type{\underbar} and \type{\overstrike} and their plural -%D forms. +%D In the rare case that we need undelined words, for instance because all font +%D alternatives are already in use, one can use \type {\underbar} and \type +%D {\overstrike} and their plural forms. %D %D \startbuffer -%D \underbars{drawing \underbar{bars} under words is a typewriter leftover} -%D \overstrikes{striking words makes them \overstrike{unreadable} but -%D sometimes even \overbar{top lines} come into view.} +%D \underbars {drawing \underbar{bars} under words is a typewriter leftover} +%D \overstrikes {striking words makes them \overstrike {unreadable} but +%D sometimes even \overbar {top lines} come into view.} %D \stopbuffer %D %D \typebuffer @@ -38,9 +37,9 @@ %D \getbuffer %D \stoplines %D -%D The next macros are derived from the \PLAIN\ \TEX\ one, but -%D also supports nesting. The \type{$} keeps us in horizontal -%D mode and at the same time applies grouping. +%D The next macros are derived from the \PLAIN\ \TEX\ one, but also supports +%D nesting. The \type{$} keeps us in horizontal mode and at the same time +%D applies grouping. %D %D \showsetup{underbar} %D \showsetup{underbars} @@ -51,9 +50,19 @@ %D %D \showsetup{setupunderbar} %D -%D Nested bars can be configured by appending \type {:} to the -%D category. - +%D Nested bars can be configured by appending \type {:} to the category. +%D Normally units in combination with a unitless thickness specification but +%D there units can be used too. +%D +%D \startbuffer +%D \setupbars[unit=mm,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank +%D \setupbars[unit=ex,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank +%D \setupbars[unit=pt,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank +%D \setupbars[unit=pt,rulethickness=10pt] bar\startbar[underbar]foo\stopbar bar +%D \stopbuffer +%D +%D \typebuffer \blank \getbuffer \blank +%D %D As with many early usage of \LUA\ in \MKIV\ this mechanism explores a way %D to deal with local settings at the \TEX\ end and remembering parameters %D at the \LUA\ end. We might do things differently now, but as settings normally @@ -107,7 +116,7 @@ offset = \barparameter\c!offset, continue = "\barparameter\c!continue", dy = \barparameter\c!dy, - rulethickness = \barparameter\c!rulethickness, + rulethickness = "\barparameter\c!rulethickness", unit = "\barparameter\c!unit", order = "\barparameter\c!order", max = \barparameter\c!max, diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf index 98c3cd6e6..4fc22a521 100644 Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf index 6b21762f5..e33c94278 100644 Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ diff --git a/tex/context/base/strc-num.mkiv b/tex/context/base/strc-num.mkiv index 7ce638acb..0b8f72e53 100644 --- a/tex/context/base/strc-num.mkiv +++ b/tex/context/base/strc-num.mkiv @@ -109,20 +109,6 @@ \def\thenamedcounterlevel#1% {\xthenamedheadlevel{\strc_counters_way{#1}}} -\def\xthenamedheadlevel#1% - {\xsectionlevel{#1}{\sectionheadsection{\sectionheadcoupling{#1}}}} - -\def\xsectionlevel#1#2% direct indirect - {\csname\??headlevel - \ifcsname\??headlevel#1\endcsname - #1% - \else\ifcsname\??headlevel#2\endcsname - #2% - \else - \v!none - \fi\fi - \endcsname} - \def\strc_counters_check_setup#1% does it have to happen here? {% this can be done at the lua end / a bit messy here ... todo ... \ifcsname\??counter#1\c!number\endcsname diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv index 29f3c07ea..0eb531832 100644 --- a/tex/context/base/strc-sec.mkiv +++ b/tex/context/base/strc-sec.mkiv @@ -447,13 +447,34 @@ \def\resetcurrentstructuremarks {\resetmarking[\lastsectionname]} % will become option %def\resetcurrentstructuremarkswithpage{\resetmarking[\lastsectionname]} % will become option -% -2=text -1=manual 0=block 1+=structurelevel +% We could use a commandhandler here but sections are somewhat special in the +% sense that we have two ways of chaining: the main section (levels) as well +% as rendering (head). + +% -2 = text +% -1 = manual +% 0 = block +% +1 = structurelevel 1 .. n \newcount\maxstructuredepth \def\sectionlevel#1% {\csname\??headlevel\ifcsname\??headlevel#1\endcsname#1\else\v!none\fi\endcsname} +\def\namedsectionlevel#1#2% direct indirect + {\csname\??headlevel + \ifcsname\??headlevel#1\endcsname + #1% + \else\ifcsname\??headlevel#2\endcsname + #2% + \else + \v!none + \fi\fi + \endcsname} + +\def\xthenamedheadlevel#1% + {\namedsectionlevel{#1}{\sectionheadsection{\sectionheadcoupling{#1}}}} + \setvalue{\??headlevel\v!block}{0} \setvalue{\??headlevel\v!none }{-1} \setvalue{\??headlevel\v!text }{-2} @@ -481,16 +502,16 @@ \fi} \unexpanded\def\setupsection - {\dotripleempty\dosetupsection} + {\dotripleempty\strc_sectioning_setup} -\def\dosetupsection[#1][#2][#3]% +\def\strc_sectioning_setup[#1][#2][#3]% {\ifcsname\??headlevel#1\endcsname - \dodosetupsection[#1][#2][#3]% + \strc_sectioning_setup_indeed[#1][#2][#3]% \else - \dodosetupsection[\sectionheadsection{#1}][#2][#3]% + \strc_sectioning_setup_indeed[\sectionheadsection{#1}][#2][#3]% \fi} -\def\dodosetupsection[#1][#2][#3]% +\def\strc_sectioning_setup_indeed[#1][#2][#3]% {\pushmacro\currenthead \ifthirdargument \edef\currenthead{#1#2}% % not used at any more in mkiv (sets now) diff --git a/tex/context/base/util-dim.lua b/tex/context/base/util-dim.lua index 47e43c386..4668326df 100644 --- a/tex/context/base/util-dim.lua +++ b/tex/context/base/util-dim.lua @@ -16,7 +16,7 @@ table.

--ldx]]-- local format, match, gsub, type, setmetatable = string.format, string.match, string.gsub, type, setmetatable -local P, S, R, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.Cc, lpeg.match +local P, S, R, Cc, C, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.Cc, lpeg.C, lpeg.match local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex @@ -141,6 +141,12 @@ local dimenpair = amount/tonumber * (unit^1/dimenfactors + Cc(1)) -- tonumber is lpeg.patterns.dimenpair = dimenpair +local splitter = amount/tonumber * C(unit^1) + +function number.splitdimen(str) + return lpegmatch(splitter,str) +end + --[[ldx--

We use a metatable to intercept errors. When no key is found in the table with factors, the metatable will be consulted for an -- cgit v1.2.3