From b4b58bbfe882406b09b2548e7aa55d238987f894 Mon Sep 17 00:00:00 2001 From: Marius Date: Sat, 20 Nov 2010 00:20:11 +0200 Subject: beta 2010.11.19 22:50 --- tex/context/base/back-exp.lua | 1 + tex/context/base/bibl-tra.lua | 2 +- tex/context/base/buff-ini.lua | 3 +- tex/context/base/chem-str.mkiv | 37 +- tex/context/base/cldf-ver.lua | 21 +- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.tex | 2 +- tex/context/base/core-def.mkiv | 3 +- tex/context/base/font-ctx.lua | 2 +- tex/context/base/font-ini.mkiv | 99 ++-- tex/context/base/font-tfm.lua | 2 +- tex/context/base/l-lpeg.lua | 49 +- tex/context/base/l-string.lua | 46 -- tex/context/base/lpdf-ano.lua | 1 + tex/context/base/luat-lib.mkiv | 1 + tex/context/base/m-units.tex | 25 +- tex/context/base/mult-aux.mkiv | 27 +- tex/context/base/mult-cld.lua | 1 + tex/context/base/node-acc.lua | 7 + tex/context/base/s-abr-04.tex | 313 ++++++++++- tex/context/base/s-map-10.mkiv | 798 ++++++++++++++++------------ tex/context/base/strc-not.lua | 12 +- tex/context/base/type-ini.mkiv | 14 - tex/context/base/type-otf.mkiv | 44 +- tex/context/base/util-deb.lua | 15 +- tex/context/base/util-str.lua | 77 +++ tex/generic/context/luatex-fonts-merged.lua | 99 ++-- 27 files changed, 1075 insertions(+), 628 deletions(-) create mode 100644 tex/context/base/util-str.lua (limited to 'tex') diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua index 892f35946..7185fbc29 100644 --- a/tex/context/base/back-exp.lua +++ b/tex/context/base/back-exp.lua @@ -891,6 +891,7 @@ local function collectresults(head,list,p) if id == glyph_code then local at = has_attribute(n,a_tagged) if at then + -- we could add tonunicodes for ligatures local components = n.components if components then collectresults(components,nil) diff --git a/tex/context/base/bibl-tra.lua b/tex/context/base/bibl-tra.lua index 87300aa74..3e16e050d 100644 --- a/tex/context/base/bibl-tra.lua +++ b/tex/context/base/bibl-tra.lua @@ -27,7 +27,7 @@ local sections = structures.sections local list, done, alldone, used, registered, ordered = { }, { }, { }, { }, { }, { } local mode = 0 -local template = string.striplong([[ +local template = utilities.strings.striplong([[ \citation{*} \bibstyle{cont-%s} \bibdata{%s} diff --git a/tex/context/base/buff-ini.lua b/tex/context/base/buff-ini.lua index 7c916f60e..8d86cd761 100644 --- a/tex/context/base/buff-ini.lua +++ b/tex/context/base/buff-ini.lua @@ -34,6 +34,7 @@ local variables = interfaces.variables local lpegmatch = lpeg.match local settings_to_array = utilities.parsers.settings_to_array local allocate = utilities.storage.allocate +local tabtospace = utilities.strings.tabtospace buffers = { data = allocate(), @@ -572,7 +573,7 @@ end function hooks.line(str) if visualizers.enabletab then - str = string.tabtospace(str,visualizers.tablength) + str = tabtospace(str,visualizers.tablength) else str = gsub(str,"\t"," ") end diff --git a/tex/context/base/chem-str.mkiv b/tex/context/base/chem-str.mkiv index 1e17218c8..6430830f7 100644 --- a/tex/context/base/chem-str.mkiv +++ b/tex/context/base/chem-str.mkiv @@ -91,9 +91,6 @@ {\dosetfontattribute \??cm\c!style \dosetcolorattribute\??cm\c!color} -\def\dochemicaltext#1% - {\dosetchemicaltext\strut#1} % maybe also \setstrut - \edef\chemicaltoplocation{t} \edef\chemicalbotlocation{b} @@ -316,9 +313,24 @@ \unexpanded\def\chemicaltopright #1{\chemicalright{\chemicallefttop {#1}{}}} \unexpanded\def\chemicalbottomright #1{\chemicalright{\chemicalleftbottom {#1}{}}} -\unexpanded\def\chemicalcentered #1{\setbox\scratchbox\hbox{C}\hbox to \wd\scratchbox{\setstrut\strut\hss#1\hss}} -\unexpanded\def\chemicalleftcentered #1{\setbox\scratchbox\hbox{C}\hbox to \wd\scratchbox{\setstrut\strut #1\hss}} -\unexpanded\def\chemicalrightcentered#1{\setbox\scratchbox\hbox{C}\hbox to \wd\scratchbox{\setstrut\strut\hss#1}} +% \unexpanded\def\chemicalcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1\hss}} +% \unexpanded\def\chemicalleftcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut #1\hss}} +% \unexpanded\def\chemicalrightcentered#1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1}} + +% \let\chemicalsmashedmiddle\chemicalcentered +% \let\chemicalsmashedleft \chemicalleftcentered +% \let\chemicalsmashedright \chemicalrightcentered + +\unexpanded\def\chemicalalignedtext#1#2#3% + {\dontleavehmode + \begingroup + \dosetchemicaltext + \hbox to \fontcharwd\font`C{\setstrut\strut#1\molecule{#3}#2}% + \endgroup} + +\unexpanded\def\chemicalcentered {\chemicalalignedtext\hss \hss } +\unexpanded\def\chemicalleftcentered {\chemicalalignedtext\relax\hss } +\unexpanded\def\chemicalrightcentered{\chemicalalignedtext\hss \relax} \let\chemicalsmashedmiddle\chemicalcentered \let\chemicalsmashedleft \chemicalleftcentered @@ -391,6 +403,7 @@ {\the\everychemical \everychemical\emptytoks \quad \vcenter\bgroup + \dosetchemicaltext \ifthirdargument \ifsecondargument \halign{&\hss##\hss\cr#2\cr\molecule{#1}\cr#3\cr}% @@ -404,7 +417,7 @@ \quad} \def\inlinechemical#1% - {\dontleavehmode\hbox{\ctxlua{chemicals.inline(\!!bs#1\!!es)}}} + {\dontleavehmode\hbox{\dosetchemicaltext\ctxlua{chemicals.inline(\!!bs#1\!!es)}}} \def\chemicalbondrule{\hbox{\vrule\!!height.75ex\!!depth-\dimexpr.75ex-\linewidth\relax\!!width1em\relax}} @@ -458,15 +471,15 @@ \nointerlineskip \ifconditional\formulachemicalhastop \ifconditional\formulachemicalhasbot - \halign{&\hss##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}% + \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}% \else - \halign{&\hss##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr}% + \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr}% \fi \else \ifconditional\formulachemicalhasbot - \halign{&\hss##\hss\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}% + \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}% \else - \halign{&\hss##\hss\cr\the\formulachemicalmid\cr}% + \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicalmid\cr}% \fi \fi \egroup} @@ -474,7 +487,7 @@ \unexpanded\def\formulachemical {\relax\dotriplegroupempty\doformulachemical} -\def\doformulachemical#1#2#3% +\def\doformulachemical#1#2#3% we could do hboxes and measure {\ifthirdargument \doifelsenothing{#2}\noformulachemicaltop{\doformulachemicaltop{#2}}% \doifelsenothing{#3}\noformulachemicalbot{\doformulachemicalbot{#3}}% diff --git a/tex/context/base/cldf-ver.lua b/tex/context/base/cldf-ver.lua index 390ffa04e..12b5479b7 100644 --- a/tex/context/base/cldf-ver.lua +++ b/tex/context/base/cldf-ver.lua @@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['cldf-ver'] = { } local concat, tohandle = table.concat, table.tohandle +local splitlines = string.splitlines local tostring, type = tostring, type local context = context @@ -18,7 +19,7 @@ end local function t_tocontext(...) context.starttyping { "typing" } -- else [1] is intercepted context.pushcatcodes("verbatim") - tohandle(flush,...) + tohandle(flush,...) -- ok? context.stoptyping() context.popcatcodes() end @@ -50,3 +51,21 @@ function tocontext(first,...) b_tocontext(first,...) end end + +function context.tobuffer(name,str) + context.startbuffer { name } + context.pushcatcodes("verbatim") + local lines = type(str) == "string" and splitlines(str) or str + for i=1,#lines do + context(lines[i] .. " ") + end + context.stopbuffer() + context.popcatcodes() +end + +function context.tolines(str) + local lines = type(str) == "string" and splitlines(str) or str + for i=1,#lines do + context(lines[i] .. " ") + end +end diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 612ecf693..be89194ef 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2010.11.18 19:47} +\newcontextversion{2010.11.19 22:50} %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.tex b/tex/context/base/context.tex index 9af572909..65b0be7aa 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2010.11.18 19:47} +\edef\contextversion{2010.11.19 22:50} %D For those who want to use this: diff --git a/tex/context/base/core-def.mkiv b/tex/context/base/core-def.mkiv index 02fb19c49..989a13c75 100644 --- a/tex/context/base/core-def.mkiv +++ b/tex/context/base/core-def.mkiv @@ -29,6 +29,7 @@ \ifdefined\firststagepreloadfonts \else \let\firststagepreloadfonts \relax \fi \ifdefined\secondstagepreloadfonts \else \let\secondstagepreloadfonts\relax \fi \ifdefined\thirdstagepreloadfonts \else \let\thirdstagepreloadfonts \relax \fi +\ifdefined\fourthstagepreloadfonts \else \let\fourthstagepreloadfonts\relax \fi \appendtoks \showcontextbanner \to \everyjob \appendtoks \initializenewlinechar \to \everyjob @@ -61,7 +62,7 @@ \prependtoks \lefttoright \to \everybeforeoutput \appendtoks \secondstagepreloadfonts \to \everystarttext -\appendtoks \thirdstagepreloadfonts \to \everystoptext +\appendtoks \fourthstagepreloadfonts \to \everystoptext % temporary here: diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua index a633fe259..bd20f2d6f 100644 --- a/tex/context/base/font-ctx.lua +++ b/tex/context/base/font-ctx.lua @@ -803,7 +803,7 @@ local nounicode = byte("?") local function nametoslot(name,all) -- maybe some day rawdata local tfmdata = fontdata[currentfont()] local shared = tfmdata and tfmdata.shared - local fntdata = shared and shared.otfdata or shared.afmdata + local fntdata = shared and (shared.otfdata or shared.afmdata) if fntdata then local unicode = fntdata.luatex.unicodes[name] if not unicode then diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv index 75f59217c..b362b35a0 100644 --- a/tex/context/base/font-ini.mkiv +++ b/tex/context/base/font-ini.mkiv @@ -1481,18 +1481,18 @@ \getparameters[\??ft#2#1][#3]% %\@@endfontdef % new code, see remark - \ifloadingfonts - % only runtime - \else\ifcsname\@size@#1\endcsname - % only once - \else - % prevent loop (hence \empty) - \letvalueempty{\@size@#1}% - \pushmacro\fontclass % new per 26102009 - \edef\fontclass{#2}% % new per 26102009 - \defineunknownfont{#1}% - \popmacro\fontclass % new per 26102009 - \fi\fi + \ifproductionrun + \ifcsname\@size@#1\endcsname + % only once + \else + % prevent loop (hence \empty) + \letvalueempty{\@size@#1}% + \pushmacro\fontclass % new per 26102009 + \edef\fontclass{#2}% % new per 26102009 + \defineunknownfont{#1}% + \popmacro\fontclass % new per 26102009 + \fi + \fi % so far \setvalue{\@size@#1}{\docompletefontswitch[#1]}} @@ -1941,7 +1941,7 @@ \def\doswitchpoints[#1]% {\normalexpanded{\dodoswitchpoints{#1}}} -\unexpanded \def\dodoswitchpoints#1% +\unexpanded\def\dodoswitchpoints#1% {\ifcsname\@size@#1\endcsname \else \defineunknownfont{#1}% \fi% @@ -1956,7 +1956,7 @@ \showmessage\m!fonts4{#1}% \fi} -\unexpanded \def\doswitchstyle[#1]% +\unexpanded\def\doswitchstyle[#1]% {\ifcsname\@style@#1\endcsname \csname\@style@#1\endcsname \edef\fontstyle{#1}% @@ -2005,11 +2005,8 @@ %D we start typesetting. %D %D Therefore we have to signal the font switching macros that -%D we are preloading fonts. As long as the next boolean is, -%D true, no loading is done. - -\newif\ifloadingfonts \loadingfontstrue - +%D we are preloading fonts. +%D %D \macros %D {preloadfonts} %D @@ -2017,9 +2014,6 @@ %D sequence of a session. After the loading job is done, the %D macro relaxes itself and reset the signal. -% \appendtoks -% \to \everysetupdocument - \fontdimen1\nullfont 0\scaledpoint \fontdimen2\nullfont 256377\scaledpoint \fontdimen3\nullfont 128188\scaledpoint @@ -2033,42 +2027,42 @@ \ctxlua{fonts.definers.resetnullfont()}% in luatex 0.70 this will also do the previous \globallet\resetnullfont\relax} -\newconditional\fontsareloaded +% \newconditional\fontsareloaded \def\preloaddefaultfonts - {\usetypescript[modern]% + {\resetpreloadfonts + \usetypescript[modern]% \setuptypeface[modern]% + %\setuptypeface[\s!default]% \showmessage\m!fonts6{\normalizedbodyfontsize\normalspace\fontstyle}} \def\resetpreloadfonts {\global\let\firststagepreloadfonts \relax \global\let\secondstagepreloadfonts\relax \global\let\thirdstagepreloadfonts \relax + \global\let\fourthstagepreloadfonts\relax \resetnullfont} \def\firststagepreloadfonts % see core-def.mkiv - {\global\loadingfontsfalse - \ifconditional\fontsareloaded - \resetpreloadfonts - \else - \doifmodeelse {*nofonts} - {\writestatus\m!fonts{latin modern fonts are not preloaded}} - {\writestatus\m!fonts{preloading latin modern fonts (first stage)}% - \preloaddefaultfonts - \resetpreloadfonts}% - \fi} + {\doifmodeelse{*nofonts} + {%\resetpreloadfonts + \writestatus\m!fonts{latin modern fonts are not preloaded}} + {\preloaddefaultfonts + \writestatus\m!fonts{preloading latin modern fonts (first stage)}}} \def\secondstagepreloadfonts % see core-def.mkiv - {\global\loadingfontsfalse - \ifconditional\fontsareloaded - % nothing - \else - \writestatus\m!fonts{preloading latin modern fonts (second stage)}% + {\writestatus\m!fonts{preloading latin modern fonts (second stage)}% + \preloaddefaultfonts} + +\def\thirdstagepreloadfonts + {\ifx\fontclass\empty + \writestatus\m!fonts{preloading latin modern fonts (third stage)}% \preloaddefaultfonts - \fi - \resetpreloadfonts} + \else + \resetpreloadfonts + \fi} -\def\thirdstagepreloadfonts % see core-def.mkiv +\def\fourthstagepreloadfonts {\begingroup %ifzeropt\fontcharwd\font\number`!\relax \setbox\scratchbox\hbox{context}% @@ -2078,15 +2072,9 @@ \writestatus\m!fonts{!! loaded (maybe due to a missing \string\starttext).}% \writeline \fi + \resetpreloadfonts \endgroup} -% maybe add this to \everystarttext -% -% \ifconditional\fontsareloaded\else -% \usetypescript[modern]% -% \setuptypeface[modern]% -% \fi - %D Here comes the main font switching macros. These macros %D handle changes in size as well as returning to the global %D bodyfont size. @@ -2095,8 +2083,8 @@ {\doifelse{#2}\v!global {\restoreglobalbodyfont} {\processcommacommand[#2]{\dodosetfont{#1}}% ##1 get also passed - \ifloadingfonts\else - \global\settrue\fontsareloaded + \ifproductionrun + \thirdstagepreloadfonts \doswitchpoints[\normalizedbodyfontsize]% \doswitchstyle[\fontstyle]% \ifx\defaultfontclass\empty @@ -2108,11 +2096,6 @@ \def\dodosetfont#1#2% #1 = set/switch state | check fo rempty, else space {\doifsomething{#2}{\dododosetfont{#1}{#2}{\showmessage\m!fonts4{#2}}}} -% % % this can be retrofitted in mkii code % % % - -% \def\normalizebodyfontsize#1\to#2% -% {\@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\dimexpr#1+\ifcase\fontdigits.5\or.05\or.005\fi\points\relax000\to#2} - \def\dododosetfont#1#2#3% #1 = set/switch state ! ! ! !could also be used for mkii {\doifnumberelse{#2}\dodododosetfont\redododosetfont{#1}{#2}{#3}} @@ -2157,8 +2140,6 @@ #3\dosetsubstitutefont{#1}{#2}% \fi} -% % % - %D When users specify for instance a 13 point bodyfont while no %D such bodyfont is defined, the system automatically tries to %D find a best fit, that is the nearest smaller defined @@ -2689,7 +2670,7 @@ \globalbodyfontsize\localbodyfontsize \normalizebodyfontsize\globalbodyfontsize\to\normalizedglobalbodyfontsize \let\globalfontstyle\fontstyle - \ifloadingfonts\else + \ifproductionrun \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace diff --git a/tex/context/base/font-tfm.lua b/tex/context/base/font-tfm.lua index 4c5e668e1..1ccb69303 100644 --- a/tex/context/base/font-tfm.lua +++ b/tex/context/base/font-tfm.lua @@ -421,7 +421,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) end end -- if trace_scaling then - -- report_define("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or k,description.index,description.name or '-',description.class or '-') + -- report_define("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or "",index or 0,description.name or '-',description.class or '-') -- end if tounicode then local tu = tounicode[index] -- nb: index! diff --git a/tex/context/base/l-lpeg.lua b/tex/context/base/l-lpeg.lua index 00b55d622..df59373ae 100644 --- a/tex/context/base/l-lpeg.lua +++ b/tex/context/base/l-lpeg.lua @@ -8,6 +8,8 @@ if not modules then modules = { } end modules ['l-lpeg'] = { local lpeg = require("lpeg") +local type = type + lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns @@ -17,10 +19,16 @@ local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.C local utfcharacters = string.utfcharacters local utfgmatch = unicode and unicode.utf8.gmatch +local anything = P(1) +local endofstring = P(-1) + +patterns.anything = anything +patterns.endofstring = endofstring + local digit, sign = R('09'), S('+-') local cr, lf, crlf = P("\r"), P("\n"), P("\r\n") local utf8next = R("\128\191") -local escaped = P("\\") * P(1) +local escaped = P("\\") * anything local squote = P("'") local dquote = P('"') @@ -31,7 +39,7 @@ patterns.utf8four = R("\240\244") * utf8next * utf8next * utf8next patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191') local utf8char = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four -local validutf8char = utf8char^0 * P(-1) * Cc(true) + Cc(false) +local validutf8char = utf8char^0 * endofstring * Cc(true) + Cc(false) patterns.utf8 = utf8char patterns.utf8char = utf8char @@ -56,6 +64,7 @@ patterns.uppercase = R("AZ") patterns.letter = patterns.lowercase + patterns.uppercase patterns.space = P(" ") patterns.tab = P("\t") +patterns.spaceortab = patterns.space + patterns.tab patterns.eol = S("\n\r") patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto) patterns.newline = crlf + cr + lf @@ -74,7 +83,7 @@ patterns.unsingle = (squote/"") * ((escaped + (1-squote))^0) * (squote/"") patterns.unquoted = patterns.undouble + patterns.unsingle -- more often undouble patterns.unspacer = ((patterns.spacer^1)/"")^0 -local unquoted = Cs(patterns.unquoted * P(-1)) -- not C +local unquoted = Cs(patterns.unquoted * endofstring) -- not C function string.unquoted(str) return match(unquoted,str) or str @@ -114,7 +123,7 @@ local function splitat(separator,single) separator = P(separator) local other = C((1 - separator)^0) if single then - local any = P(1) + local any = anything splitter = other * (separator * C(any^0) + "") -- ? splitters_s[separator] = splitter else @@ -178,18 +187,6 @@ function string.checkedsplit(str,separator) return match(c,str) end ---~ function lpeg.append(list,pp) ---~ local p = pp ---~ for l=1,#list do ---~ if p then ---~ p = p + P(list[l]) ---~ else ---~ p = P(list[l]) ---~ end ---~ end ---~ return p ---~ end - --~ from roberto's site: local f1 = string.byte @@ -274,7 +271,7 @@ function lpeg.secondofsplit(separator) -- nil if not split local splitter = splitters_s[separator] if not splitter then separator = P(separator) - splitter = (1 - separator)^0 * separator * C(P(1)^0) + splitter = (1 - separator)^0 * separator * C(anything^0) splitters_s[separator] = splitter end return splitter @@ -297,7 +294,7 @@ end --~ -- slower: --~ --~ function lpeg.counter(pattern) ---~ local n, pattern = 0, (lpeg.P(pattern)/function() n = n + 1 end + lpeg.P(1))^0 +--~ local n, pattern = 0, (lpeg.P(pattern)/function() n = n + 1 end + lpeg.anything)^0 --~ return function(str) n = 0 ; lpegmatch(pattern,str) ; return n end --~ end @@ -360,8 +357,8 @@ local simple_escapes = { -- also defines in l-string ["*"] = ".*", } -local p = Cs((S("-.+*%()[]") / patterns_escapes + P(1))^0) -local s = Cs((S("-.+*%()[]") / simple_escapes + P(1))^0) +local p = Cs((S("-.+*%()[]") / patterns_escapes + anything)^0) +local s = Cs((S("-.+*%()[]") / simple_escapes + anything)^0) function string.escapedpattern(str,simple) if simple then @@ -466,3 +463,15 @@ end --~ print(lpeg.count("äáàa",lpeg.UR("aá"))) --~ print(lpeg.count("äáàa",lpeg.UR("àá"))) --~ print(lpeg.count("äáàa",lpeg.UR(0x0000,0xFFFF))) + +function lpeg.oneof(list,...) -- lpeg.oneof("elseif","else","if","then") + if type(list) ~= "table" then + list = { list, ... } + end + -- sort(list) -- longest match first + local p = P(list[1]) + for l=2,#list do + p = p + P(list[l]) + end + return p +end diff --git a/tex/context/base/l-string.lua b/tex/context/base/l-string.lua index 1e55f6bac..7a45b98bf 100644 --- a/tex/context/base/l-string.lua +++ b/tex/context/base/l-string.lua @@ -116,52 +116,6 @@ function string.topattern(str,lowercase,strict) end end ---~ local t = { ---~ "1234567123456712345671234567", ---~ "a\tb\tc", ---~ "aa\tbb\tcc", ---~ "aaa\tbbb\tccc", ---~ "aaaa\tbbbb\tcccc", ---~ "aaaaa\tbbbbb\tccccc", ---~ "aaaaaa\tbbbbbb\tcccccc", ---~ } ---~ for k,v do ---~ print(string.tabtospace(t[k])) ---~ end - --- The following functions might end up in another namespace. - -function string.tabtospace(str,tab) - -- we don't handle embedded newlines - while true do - local s = find(str,"\t") - if s then - if not tab then tab = 7 end -- only when found - local d = tab-(s-1) % tab - if d > 0 then - str = gsub(str,"\t",rep(" ",d),1) - else - str = gsub(str,"\t","",1) - end - else - break - end - end - return str -end - ---~ local template = string.striplong([[ ---~ aaaa ---~ bb ---~ cccccc ---~ ]]) - -function string.striplong(str) -- strips all leading spaces - str = gsub(str,"^%s*","") - str = gsub(str,"[\n\r]+ *","\n") - return str -end - -- obsolete names: string.quote = string.quoted diff --git a/tex/context/base/lpdf-ano.lua b/tex/context/base/lpdf-ano.lua index f2e3be8ec..6d25a9c42 100644 --- a/tex/context/base/lpdf-ano.lua +++ b/tex/context/base/lpdf-ano.lua @@ -415,6 +415,7 @@ local pages = references.pages function specials.page(var,actions) -- better resolve in strc-ref local file = var.f +--~ table.print(var) if file then file = references.checkedfile(file) return link(nil,file,nil,var.operation,actions) diff --git a/tex/context/base/luat-lib.mkiv b/tex/context/base/luat-lib.mkiv index 81d371cc4..2f73fae3d 100644 --- a/tex/context/base/luat-lib.mkiv +++ b/tex/context/base/luat-lib.mkiv @@ -13,6 +13,7 @@ \writestatus{loading}{ConTeXt Lua Macros / Libraries} +\registerctxluafile{util-str}{1.001} \registerctxluafile{util-tab}{1.001} \registerctxluafile{util-pck}{1.001} \registerctxluafile{util-seq}{1.001} diff --git a/tex/context/base/m-units.tex b/tex/context/base/m-units.tex index a06d195ba..6a899736b 100644 --- a/tex/context/base/m-units.tex +++ b/tex/context/base/m-units.tex @@ -367,15 +367,22 @@ \def\Micro {\dimensionprefix{\iftextdimensions u\else\mu\fi}} \def\Milli {\dimensionprefix{m}} \def\Centi {\dimensionprefix{c}} -\def\Deci {\dimensionprefix{d}} -\def\Hecto {\dimensionprefix{h}} -\def\Kilo {\dimensionprefix{k}} -\def\Mega {\dimensionprefix{M}} -\def\Giga {\dimensionprefix{G}} -\def\Terra {\dimensionprefix{T}} % for old times sake -\def\Tera {\dimensionprefix{T}} -\def\Peta {\dimensionprefix{P}} -\def\Exa {\dimensionprefix{E}} +\def\Deci {\dimensionprefix{d}} % 10^01 +\def\Hecto {\dimensionprefix{h}} % 10^02 +\def\Kilo {\dimensionprefix{k}} % 10^03 +\def\Mega {\dimensionprefix{M}} % 10^06 +\def\Giga {\dimensionprefix{G}} % 10^09 +\def\Tera {\dimensionprefix{T}} % 10^12 +\def\Peta {\dimensionprefix{P}} % 10^15 +\def\Exa {\dimensionprefix{E}} % 10^18 + +%def\Terra {\dimensionprefix{T}} % for old times sake + +\def\Kibi {\dimensionprefix{ki}} % 2^10 +\def\Mebi {\dimensionprefix{Mi}} % 2^20 +\def\Gibi {\dimensionprefix{Gi}} % 2^30 +\def\Tebi {\dimensionprefix{Ti}} % 2^40 +\def\Pebi {\dimensionprefix{Pi}} % 2^50 %D and binary prefixes: diff --git a/tex/context/base/mult-aux.mkiv b/tex/context/base/mult-aux.mkiv index 54971d6a5..628914b6d 100644 --- a/tex/context/base/mult-aux.mkiv +++ b/tex/context/base/mult-aux.mkiv @@ -64,7 +64,7 @@ \def#6##1##2{\csname#4{#1##1}{##2}\endcsname}% \def#7##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}} % always root -\def\installparameterhandler#1#2% +\unexpanded\def\installparameterhandler#1#2% {%\message{\detokenize{#1}/\detokenize{#2}}% \normalexpanded {\doinstallparameterhandler @@ -81,7 +81,7 @@ \def#4##1##2{\ifcsname##1##2\endcsname##1\else\expandafter#5\csname##1\s!parent\endcsname{##2}\fi}% \def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}} -\def\installparameterhashhandler#1#2% +\unexpanded\def\installparameterhashhandler#1#2% {\normalexpanded {\doinstallparameterhashhandler {\noexpand#1}% \??aa @@ -97,7 +97,7 @@ \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash {##1}\fi \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash{##2}\fi}} -\def\installattributehandler#1#2% +\unexpanded\def\installattributehandler#1#2% {\normalexpanded {\doinstallattributehandler {\noexpand#1}% \??aa @@ -105,20 +105,20 @@ \expandafter\noexpand\csname #2parameterhash\endcsname}} \unexpanded\def\doinstalldefinehandler#1#2#3#4#5#6#7% - {\unexpanded\def#2{\dodoubleempty#5}% + {\unexpanded\def#2{\dotripleempty#5}% \newtoks#6% \newtoks#7% - \def#5[##1][##2]% + \def#5[##1][##2][##3]% {\edef#4{##1}% \the#6% predefine \ifsecondargument - \getparameters[#1#4][\s!parent=#1,##2]% - \else - \getparameters[#1#4][\s!parent=#3]% + \doifassignmentelse{##2} + {\getparameters[#1#4][\s!parent=#3,##2]} + {\getparameters[#1#4][\s!parent=#1##2,##3]}% \fi \the#7}} -\def\installdefinehandler#1#2#3% +\unexpanded\def\installdefinehandler#1#2#3% {\normalexpanded {\doinstalldefinehandler {\noexpand#1}% \??aa @@ -135,7 +135,7 @@ \def#4[##1][##2]% {\ifsecondargument \def\docommand####1% we will have a simple one as well - {\edef#3{##1}% + {\edef#3{####1}% \getparameters[#1#3][##2]% \the#5}% \processcommalist[##1]\docommand @@ -145,7 +145,7 @@ \the#5% \fi}} -\def\installsetuphandler#1#2% +\unexpanded\def\installsetuphandler#1#2% {\normalexpanded {\doinstallsetuphandler {\noexpand#1}% \??aa @@ -161,7 +161,7 @@ \installsetuphandler {#1}{#2}% \installattributehandler {#1}{#2}} -\def\installnamespace#1% +\unexpanded\def\installnamespace#1% {\setvalue{????#1}{@@@@#1}} % \enabletrackers[interfaces.namespaces,context.flush] @@ -199,7 +199,8 @@ % % \stoptext -\def\definenamespace{\dodoubleargument\dodefinenamespace} +\unexpanded\def\definenamespace + {\dodoubleargument\dodefinenamespace} \def\dodefinenamespace[#1][#2]% namespace settings {\ctxlua{interfaces.namespaces.define(\!!bs#1\!!es,\!!bs#2\!!es)}} diff --git a/tex/context/base/mult-cld.lua b/tex/context/base/mult-cld.lua index 2a2af77ae..6476eaff6 100644 --- a/tex/context/base/mult-cld.lua +++ b/tex/context/base/mult-cld.lua @@ -140,6 +140,7 @@ local function writer(command,first,...) flush(currentcatcodes,"{",ti,"}") else flush(currentcatcodes,"{") + -- maybe if string and \n found then auto split flush(contentcatcodes,ti) flush(currentcatcodes,"}") end diff --git a/tex/context/base/node-acc.lua b/tex/context/base/node-acc.lua index c131a0002..537405921 100644 --- a/tex/context/base/node-acc.lua +++ b/tex/context/base/node-acc.lua @@ -15,6 +15,7 @@ local traverse_nodes = node.traverse local traverse_id = node.traverse_id local has_attribute = node.has_attribute local copy_node = node.copy +local free_nodelist = node.flush_list local glue_code = nodecodes.glue local glyph_code = nodecodes.glyph @@ -30,6 +31,12 @@ local function injectspaces(head) -- if at then if p and p.id == glyph_code then local g = copy_node(p) + local c = g.components + if c then -- it happens that we copied a ligature + free_nodelist(c) + g.components = nil + g.subtype = 256 + end local s = copy_node(n.spec) g.char, n.spec = 32, s p.next, g.prev = g, p diff --git a/tex/context/base/s-abr-04.tex b/tex/context/base/s-abr-04.tex index 5f1188b3b..98e76c86f 100644 --- a/tex/context/base/s-abr-04.tex +++ b/tex/context/base/s-abr-04.tex @@ -1,8 +1,8 @@ %D \module -%D [ file=s-abr-02, +%D [ file=s-abr-01, %D version=1996.01.01, %D title=\CONTEXT\ Style File, -%D subtitle=General Abbreviations 2, +%D subtitle=General Abbreviations 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] @@ -11,12 +11,311 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\usemodule[abr-01] - \unprotect -\setupsorting[logo][\c!style=] +% \setupsorting[logo][\c!style=\v!capital] + +% \setupcapitals[\c!title=\v!no] + +\protect + +\logo [MKI] {MkI} +\logo [MKII] {MkII} +\logo [MKIII] {MkIII} +\logo [MKIV] {MkIV} + +%logo [FGA] {fga} +%logo [FGBBS] {fgbbs} +\logo [ACROBAT] {Acro\-bat} +\logo [AFM] {afm} +\logo [API] {api} +\logo [ALEPH] {Aleph} % {\mathematics{\aleph}} +\logo [ALGOL] {ALGOL} +\logo [AMS] {ams} +\logo [AMSLATEX] {AmS\LATEX} +\logo [AMSTEX] {AmS\TeX} +\logo [ANSI] {ansi} +\logo [ARABTEX] {Arab\TeX} +\logo [ASCII] {ascii} +\logo [ASCIITEX] {ascii\TeX} +\logo [BACHOTEX] {Bacho\TeX} +\logo [BIBTEX] {bib\TeX} +\logo [BLUESKY] {BlueSky} +\logo [BMP] {bmp} +\logo [BSD] {bsd} +\logo [CCODE] {c} +\logo [CALCMATH] {CalcMath} +\logo [CD] {cd} +\logo [CPU] {cpu} +\logo [CDROM] {cdrom} +\logo [CID] {cid} +\logo [CJK] {cjk} +\logo [CMR] {cmr} +\logo [CMYK] {cmyk} +\logo [CODHOST] {CodHost} +\logo [CONTEXT] {Con{\TeX}t} +\logo [CSS] {css} +\logo [CTAN] {ctan} +\logo [CTXTOOLS] {ctxtools} +\logo [CWEB] {cweb} +\logo [DANTE] {Dante} +\logo [DISTILLER] {distiller} +\logo [DRATEX] {Dra\TeX} +\logo [DSC] {dsc} +\logo [DTD] {dtd} +\logo [DTK] {dtk} +\logo [DTP] {dtp} +\logo [DVD] {dvd} +\logo [DVI] {dvi} +\logo [DVIPDFM] {dvipdfm} +\logo [DVIPDFMX] {dvipdfmx} +\logo [DVIPOS] {dvipos} +\logo [DVIPS] {dvips} +\logo [DVIPSONE] {dvipsone} +\logo [DVISCR] {dviscr} +\logo [DVIWINDO] {dviwindo} +\logo [EC] {ec} +\logo [EIFFEL] {Eiffel} +\logo [EMACS] {emacs} +\logo [EMTEX] {em\TeX} +\logo [ENCODING] {enc} +\logo [ENCTEX] {enc\TeX} +\logo [EPS] {eps} +\logo [ETEX] {\eTeX} +\logo [EUROBACHOTEX] {EuroBacho\TeX} +\logo [EUROMATH] {EuroMath} +\logo [EUROTEX] {Euro\TeX} +\logo [EXAMPLE] {eXaMpLe} +\logo [EXAMPLED] {exampled} +\logo [EXAMPLEQ] {exampleq} +\logo [EXAMPLER] {exampler} +\logo [EXAMPLET] {examplet} +\logo [EXAMPLEX] {examplex} +\logo [EXIMPLE] {eXiMpLe} +\logo [FAQ] {faq} +\logo [FDF] {fdf} +\logo [FONTFORGE] {FontForge} +\logo [FOXET] {foXet} +\logo [FPTEX] {fp\TeX} +\logo [FREEBSD] {FreeBSD} +\logo [FTP] {ftp} +\logo [GHOSTSCRIPT]{Ghost\-script} +\logo [GHOSTVIEW] {Ghost\-view} +\logo [GIF] {gif} +\logo [GNU] {gnu} +\logo [GNUPLOT] {gnuplot} +\logo [GS] {Ghost\-Script} +\logo [GUST] {Gust} +\logo [GWTEX] {gw\TeX} +\logo [HSB] {hsb} +\logo [HTML] {html} +\logo [HTTP] {http} +\logo [HZ] {hz} +\logo [IBM] {ibm} +\logo [IMAGEMAGICK]{ImageMagick} +\logo [INITEX] {ini\TeX} +\logo [INRSTEX] {inrs\TeX} +\logo [IO] {io} +\logo [IRCNET] {IRCnet} +\logo [ISO] {iso} +\logo [JAVA] {Java} +\logo [JAVASCRIPT] {Java\-Script} +\logo [JPEG] {jpeg} +\logo [JPG] {jpg} +\logo [KPATHSEA] {kpathsea} +\logo [KPSE] {kpse} +\logo [KPSEWHICH] {kpsewhich} +\logo [MKTEXLSR] {mktexlsr} +\logo [LAMSTEX] {LamS\TeX} +\logo [LATEX] {La\TeX} +\logo [LATEXTE] {La\TeX2e} +\logo [LATEXTN] {La\TeX2.09} +\logo [LINUX] {linux} +\logo [LISP] {Lisp} +\logo [LPEG] {lpeg} +\logo [LUA] {Lua} +\logo [LUAJIT] {LuaJIT} +\logo [LUATEX] {Lua\TeX} +\logo [LUATOOLS] {luatools} +\logo [MACOSX] {MacOSX} +\logo [MACROTEX] {Macro\TeX} +\logo [MAKEMPY] {MakeMPY} +\logo [MAPPING] {map} +\logo [MAPS] {Maps} +\logo [MATHML] {MathML} +\logo [METAFONT] {MetaFont} +\logo [METAPOST] {MetaPost} +\logo [METATEX] {Meta\TeX} +\logo [MIKTEX] {Mik\TeX} +\logo [MLTEX] {ml\TeX} +\logo [METATYPE] {MetaType1} +\logo [MODULA] {Modula} +\logo [MOV] {mov} +\logo [MPS] {mps} +\logo [MPTOPDF] {mptopdf} +\logo [MPLIB] {MPlib} +\logo [MSDOS] {msdos} +\logo [MSWINDOWS] {MS~Windows} +\logo [MTXRUN] {mtxrun} +\logo [MTXTOOLS] {mtxtools} +\logo [NETPBM] {NetPBM} +\logo [NTG] {ntg} +\logo [NTS] {nts} +\logo [OFM] {ofm} +\logo [OMEGA] {Omega} +\logo [OPENMATH] {OpenMath} +\logo [OPENTYPE] {OpenType} +\logo [OPI] {opi} +\logo [OTF] {otf} +\logo [OTP] {otp} +\logo [OVF] {ovf} +\logo [PASCAL] {Pascal} +\logo [PCTEX] {pc\TeX} +\logo [PDF] {pdf} +\logo [PDFETEX] {pdfe\TeX} +\logo [PDFTEX] {pdf\TeX} +\logo [PDFTOOLS] {pdftools} +\logo [PDFTOPS] {pdftops} +\logo [PERL] {Perl} +\logo [PERLTK] {Perl/Tk} +\logo [PICTEX] {\PiCTeX} +\logo [PK] {pk} +\logo [PLAIN] {Plain} +\logo [PNG] {png} +\logo [POSIX] {posix} +\logo [POSTSCRIPT] {Post\-Script} +\logo [PPCHTEX] {\PPCHTeX} +\logo [PRAGMA] {Pragma ADE} +\logo [PRESS] {press} +\logo [PRIFIL] {prifil} +\logo [PS] {Post\-Script} +\logo [PSCHECK] {pscheck} +\logo [PSTOEDIT] {pstoedit} +\logo [PSTOPAGE] {pstopage} +\logo [PSTOPDF] {pstopdf} +\logo [PSTRICKS] {pstricks} +\logo [RAM] {ram} +\logo [READER] {Acro\-bat Reader} +\logo [RELAXNG] {Relax\kern.125emNG} +\logo [RGB] {rgb} +\logo [RLXTOOLS] {rlxtools} +\logo [RUBY] {Ruby} +\logo [SCITE] {SciTE} +\logo [SGML] {sgml} +\logo [SI] {si} +\logo [SQL] {sql} +\logo [TABLE] {\TaBlE} +\logo [TCPIP] {tcp/ip} +\logo [TDS] {tds} % no sc te +\logo [TETEX] {te\TeX} % no sc te +\logo [TEX] {\TeX} +\logo [TEXADRES] {\TeX adress} +\logo [TEXBASE] {\TeX base} +\logo [TEXEDIT] {\TeX edit} +\logo [TEXEXEC] {\TeX exec} +\logo [TEXFONT] {\TeX font} +\logo [TEXFORM] {\TeX form} +\logo [TEXLIVE] {\TeX Live} +\logo [TEXLUA] {\TeX Lua} +\logo [TEXMF] {texmf} +\logo [TEXMFSTART] {texmfstart} +\logo [TEXNL] {tex-nl} +\logo [TEXSHOW] {\TeX show} +\logo [TEXSPELL] {\TeX spell} +\logo [TEXGYRE] {\TeX\ Gyre} +\logo [TEXSYNC] {texsync} +\logo [TEXTMATE] {TextMate} +\logo [TEXTOOLS] {\TeX tools} +\logo [TEXUTIL] {\TeX util} +\logo [TEXWORK] {\TeX work} +\logo [TEXXET] {\TeX\XeT} \def\XeT{XeT} +\logo [TFM] {tfm} +\logo [TIF] {tif} +\logo [TIFF] {tiff} +\logo [TIFFINFO] {tiffinfo} +\logo [TIFFTAGS] {tifftags} +\logo [TMFTOOLS] {tmftools} +\logo [TPIC] {tpic} +\logo [TPM] {tpm} +\logo [TRUETYPE] {TrueType} +\logo [TTF] {ttf} +\logo [TUG] {tug} +\logo [TUGBOAT] {Tug\-Boat} +\logo [TUGNEWS] {Tug\-News} +\logo [TYPEONE] {Type1} +\logo [UCS] {ucs} +\logo [UNICODE] {Uni\-code} +\logo [UNIX] {Unix} +\logo [URI] {uri} +\logo [URL] {url} +\logo [USA] {usa} +\logo [USENET] {usenet} +\logo [UTF] {utf} +\logo [UTF] {utf} +\logo [VF] {vf} +\logo [WDT] {wdt} +\logo [WEB] {web} +\logo [WEBC] {web2c} +\logo [WIKI] {Wiki} +\logo [WINDOWS] {Windows} +\logo [WINNT] {WinNT} +\logo [WINNX] {Win9x} +\logo [WWW] {www} +\logo [WYSIWYG] {wysiwyg} +\logo [XDVI] {Xdvi} +\logo [XETEX] {\XeTeX} +\logo [XFDF] {xfdf} +\logo [XHTML] {xhtml} +\logo [XINDY] {Xindy} +\logo [XML] {xml} +\logo [XPATH] {xpath} +\logo [XMLTOOLS] {xmltools} +\logo [XPDFETEX] {xpdfe\TeX} +\logo [XSL] {xsl} +\logo [XSLFO] {xsl-fo} +\logo [XSLT] {xslt} +\logo [XSLTPROC] {xsltproc} +\logo [XYPIC] {XYPIC} % wrong logo +\logo [YandY] {y\&y} +\logo [ZIP] {zip} + +\def\METAFUN {\MetaFun} + +\logo [METAFUN] {\MetaFun} + +\def\SystemSpecialA#1{$\langle\it#1\rangle$} +\def\SystemSpecialB#1{{\tttf<#1>}} + +\def\CATCODE {\SystemSpecialA{catcode}} +\def\CATCODES {\SystemSpecialA{catcodes}} +\def\DIMENSION {\SystemSpecialA{dimension}} +\def\DIMENSIONS {\SystemSpecialA{dimensions}} +\def\COUNTER {\SystemSpecialA{counter}} +\def\COUNTERS {\SystemSpecialA{counters}} +\def\HBOX {\SystemSpecialA{hbox}} +\def\HBOXES {\SystemSpecialA{hboxes}} +\def\VBOX {\SystemSpecialA{vbox}} +\def\VBOXES {\SystemSpecialA{vboxes}} +\def\BOX {\SystemSpecialA{box}} +\def\BOXES {\SystemSpecialA{boxes}} +\def\TOKENLIST {\SystemSpecialA{token list}} +\def\TOKENLISTS {\SystemSpecialA{token lists}} +\def\NEWLINE {\SystemSpecialA{newline}} +\def\SKIP {\SystemSpecialA{skip}} +\def\SKIPS {\SystemSpecialA{skips}} +\def\MUSKIP {\SystemSpecialA{muskip}} +\def\MUSKIPS {\SystemSpecialA{muskips}} +\def\MARK {\SystemSpecialA{mark}} +\def\MARKS {\SystemSpecialA{marks}} + +\def\SPACE {\SystemSpecialB{space}} +\def\EOF {\SystemSpecialB{eof}} +\def\TAB {\SystemSpecialB{tab}} +\def\NEWPAGE {\SystemSpecialB{newpage}} +\def\NEWLINE {\SystemSpecialB{newline}} + +\def\THANH {H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh} -\setupcapitals[\c!title=\v!no] +\def\THANH {H\`an Th\ecircumflexacute\ Th\`anh} -\protect \endinput +\endinput diff --git a/tex/context/base/s-map-10.mkiv b/tex/context/base/s-map-10.mkiv index 03d74fe36..2c0888121 100644 --- a/tex/context/base/s-map-10.mkiv +++ b/tex/context/base/s-map-10.mkiv @@ -1,242 +1,366 @@ -%D \module -%D [file=s-map-se, -%D version=2005.02.03, -%D title=\CONTEXT\ Style File, -%D subtitle=\MAPS\ basis stijl, -%D author={Hans Hagen, Taco Hoekwater and Siep Kroonenberg}, -%D date=\currentdate, -%D copyright={NTG / MAPS}] - -% This module re-implements the MAPS style for use with the Context macro -% package. The original MAPS layout was designed and implemented in -% LaTeX by Taco Hoekwater and Siep Kroonenberg. -% -% This variant is cleaned up for \MKIV. Some more cleanup is possible. -% -% Three layouts: -% +%\module [ +% file=s-map-se, +% version=2005.02.03, +% title=\CONTEXT\ Style File, +% subtitle=\MAPS\ basis stijl, +% author={Hans Hagen, Taco Hoekwater and Siep Kroonenberg}, +% date=\currentdate, +% copyright={NTG / MAPS}% +%] + +% This module re-implements the MAPS style for use with the Context +% macro package. The original MAPS layout was designed and +% implemented in LaTeX by Taco Hoekwater and Siep Kroonenberg. + +% This style will be cleaned up as soon as we have time for it. + +% - three layouts: % 1. two columns % 2. one column, with wide outer margins (option onecolumn) % 3. one column, with wide left margin (option asym) -% +% - font sizes deviate from TeX's usual geometric progression +% - use of sans-serif for headers and various details +% - option realfonts uses Bitstream Charter, Euler Math and Latin Modern. +% This is used for final typesetting. +% The default font setup, intended for authors, uses Computer +% Modern. + % A mode nosubsub defines only two levels of sectioning. If you % don't need more and use the two-column layout, then this option % will probably improve the looks of your paper. -% -% The default is twocolumns. -\doifmode {asym} {\enablemode[onecolumn]} % implies onecolumn +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% pdftex support + +\newif\ifMapsInColumns +\doifmode{asym}{\enablemode[onecolumn]} % implies onecolumn +\doifnotmode{onecolumn}{\MapsInColumnstrue} + +\enablemode[realfonts] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% fonts + +%%%%%%%%% first, font sizes +\definebodyfontenvironment [7pt][% LaTeX: scriptsize + interlinespace=8pt, + big=8pt, + small=6pt% +] + +\definebodyfontenvironment [8pt][% LaTeX: footnotesize + interlinespace=9pt, + big=9pt, + small=7pt, + x=6pt% +] + +\definebodyfontenvironment [9pt][% LaTeX: small + interlinespace=10pt, + big=10pt, + small=8pt,% + x=7pt,% + script=6pt% +] + +\definebodyfontenvironment [10pt][% LaTeX: normalsize + interlinespace=11pt, + big=11pt, + a=11pt, + small=9pt,% + x=8pt,% + script=7pt% +] + +\definebodyfontenvironment [11pt][% LaTeX: large + interlinespace=11pt, + big=11pt, + small=10pt,% + x=9pt,% + script=8pt% +] + +\definebodyfontenvironment [14pt][% + interlinespace=14pt, + big=24pt, + small=11pt, + x=10pt% +] + +\definebodyfontenvironment [24pt][% + interlinespace=24pt, + big=24pt, + small=14pt, + x=11pt% +] + +\definebodyfontenvironment [22pt][% + interlinespace=24pt, + big=22pt, + small=14pt, + x=14pt% +] + +\definebodyfontenvironment [30pt][% + interlinespace=30pt, + big=30pt, + small=26pt, + x=26pt% +] + +%%% font families + +\usetypescriptfile[type-libertine] + +\usetypescriptfile[type-inconsolata] + +\startmode[mkii] +\starttypescript [maps] [ec] +\definetypeface [maps] [mm] [math] [euler] [default] [encoding=default,rscale=0.9] +\usemathcollection[euler] +\definetypeface [maps] [tt] [mono] [inconsolata] [default] [encoding=ec,rscale=0.92] +\definetypeface [maps] [ss] [sans] [default] [default] [encoding=ec,rscale=0.95] +\definetypeface [maps] [rm] [serif] [libertine] [default] [encoding=ec] +\stoptypescript +\usetypescript[maps] [ec] +\stopmode + +\startmode[mkiv] +\starttypescript [maps] +\definetypeface [maps] [mm] [math] [euler] [default] [rscale=0.9] +\definetypeface [maps] [tt] [mono] [inconsolata] [default] [rscale=0.92] +\definetypeface [maps] [ss] [sans] [modern] [default] [rscale=0.95] +\definetypeface [maps] [rm] [serif] [libertine] [default] +\stoptypescript +\usetypescript[maps] +\stopmode + +\setupbodyfont[maps,10pt,rm] -\definebodyfontenvironment [7pt] [interlinespace=8pt, big=8pt, small=6pt] -\definebodyfontenvironment [8pt] [interlinespace=9pt, big=9pt, small=7pt, x=6pt] -\definebodyfontenvironment [9pt] [interlinespace=10pt,big=10pt,small=8pt, x=7pt,script=6pt] -\definebodyfontenvironment [10pt][interlinespace=11pt,big=11pt,small=9pt, x=8pt,script=7pt,a=11pt] -\definebodyfontenvironment [11pt][interlinespace=11pt,big=11pt,small=10pt,x=9pt,script=8pt] -\definebodyfontenvironment [14pt][interlinespace=14pt,big=24pt,small=11pt,x=10pt] -\definebodyfontenvironment [24pt][interlinespace=24pt,big=24pt,small=14pt,x=11pt] -\definebodyfontenvironment [22pt][interlinespace=24pt,big=22pt,small=14pt,x=14pt] -\definebodyfontenvironment [30pt][interlinespace=30pt,big=30pt,small=26pt,x=26pt] +% activate protruding +\setupinterlinespace[line=11pt] -\definefontfeature [default] [default] [protrusion=pure] +\setupfontsynonym[handling=pure] -\definetypeface [maps] [rm] [serif] [libertine] [default] -\definetypeface [maps] [ss] [sans] [default] [default] [rscale=0.95] -\definetypeface [maps] [tt] [mono] [inconsolata] [default] [rscale=0.92] -\definetypeface [maps] [mm] [math] [euler] [default] [rscale=0.9] +\setupalign[hanging] -\setupbodyfont[maps,10pt,rm] +% \usetypescript[map][texnansi] -\setupinterlinespace - [line=11pt] +% \setupbodyfont [map,10pt] -\setupalign - [hanging] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% additional general typographic details -\setupindenting - [yes,next,11pt] +\setupindenting [yes,next,11pt] % indenting after enumerations etc. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% 3 versions of layout with matching headers + +% I would like to move the entire layout slightly toward the spine, +% but Context seems to provide no good handle for that. +% So instead, I'll use a two-column layout centered on the page and +% matching single-column layouts. % It is easy to do the shift toward the spine when assembling the % volume with LaTeX pdfpages. -% eh ... why not use backspace ? +\definepapersize [maps][% + width=595.3bp, % 21cm + height=756bp% 10.5in +] -\definepapersize [maps] - [width=595.3bp, % 21cm - height=756bp] % 10.5in +\setuppapersize [maps][maps] -\setuppapersize - [maps] - [maps] % oversized +% parameters: +% margin -> latex marginparwith -\setuplayout - [topspace=40pt, +\setuplayout[% + topspace=40pt, height=688pt, header=33pt, margin=106pt, leftmargindistance=11pt, - rightmargindistance=11pt] + rightmargindistance=11pt% +] + -\setupblank - [5.5pt] +\setupblank[5.5pt] -\setuppagenumbering - [location=] +\setuppagenumbering [location=] \definetyping [widetyping] \setupheader [style=\ss] \setupfooter [style=\ss] -\def\AuHead{\MapsRunningAuthor} -\def\TiHead{\ifnum\pageno=\MapsPage\relax\MapsRunningAuthor\else\MapsRunningTitle\fi} - -\setupheads - [sectionnumber=no, - align=flushleft] - -\def\hfonti {\ssbfa} -\def\hfontii {\ssbf} -\def\hfontiii{\rm\it} - -\def\runin#1#2{#2.} - -\doifmodeelse {nosubsub} { - - \setuphead [section] - [style=\hfontii, - before={\blank[line]}, - after=] - - \setuphead [subsection] - [style=\hfontiii, - before={\blank[halfline]}% - command=\runin, - alternative=text, - distance=6pt] - -} { - - \setuphead [section] - [style=\hfonti, - before={\blank[line]}, - after={\blank[halfline]}] - - \setuphead [subsection] - [style=\hfontii, - before={\blank[halfline]}, - after=] - - \setuphead [subsubsection] - [style=\hfontiii, - before={\blank[halfline]}, - command=\runin, - alternative=text, - distance=6pt] - +\def\AuHead{% + %\ifnum\pageno=\MapsPage \hbox{}\else + \MapsRunningAuthor%\fi } +\def\TiHead{% + \ifnum\pageno=\MapsPage \relax \MapsRunningAuthor %\hbox{} + \else \MapsRunningTitle\fi} -\doifmodeelse {nosubsub} { - - \setuphead [subject] - [style=\hfontii, - before={\blank[halfline]}, - after=] - - \setuphead [subsubject] - [style=\hfontiii, - command=\runin, - alternative=text, - before={\blank[halfline]}] -} { +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% sectioning - \setuphead [subject] - [style=\hfonti, - before={\blank}, - after={\blank[halfline]}] +\setupheads[sectionnumber=no, align=right] - \setuphead [subsubject] - [style=\hfontii, - before={\blank[halfline]}, - after=] - - \setuphead [subsubsubject] - [style=\hfontiii, - command=\runin, - alternative=text, - before={\blank[halfline]}] - -} - -\setupfloats - [location=center, - before=\ss] % brrr +\def\hfonti{\ssbfa} +\def\hfontii{\ssbf} +\def\hfontiii{\rm\it} +\def\runin#1#2{#2.} -\setupcaptions - [headstyle=\ss, - style=\ssx, - stopper=., - distance=6pt, +\doifmodeelse{nosubsub}{% +\setuphead [section][% + style=\hfontii, + before={\blank[line]}, + after={}% +] +\setuphead [subsection][% + style=\hfontiii, + command=\runin, + alternative=text, + distance=6pt, + before={\blank[halfline]}% +]}{% +\setuphead [section][% + style=\hfonti, + before={\blank[line]}, + after={\blank[halfline]}% +] +\setuphead [subsection][% + style=\hfontii, + before={\blank[halfline]}, + after={}% +] +\setuphead [subsubsection][% + style=\hfontiii, + command=\runin, + distance=6pt, + alternative=text, + before={\blank[halfline]}% +]} + +\doifmodeelse{nosubsub}{% +\setuphead [subject][% + style=\hfontii, + before={\blank[halfline]}, + after={}% +] +\setuphead [subsubject][% + style=\hfontiii, + command=\runin, + alternative=text, + before={\blank[halfline]}% +]}{% +\setuphead [subject][% + style=\hfonti, + before={\blank}, + after={\blank[halfline]}% +] +\setuphead [subsubject][% + style=\hfontii, + before={\blank[halfline]}, + after={}% +] +\setuphead [subsubsubject][% + style=\hfontiii, + command=\runin, + alternative=text, + before={\blank[halfline]}% +]} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% floats + +\setupfloats [location=center, before={\ss}] +\setupcaptions [headstyle={\ss},style={\ssx}, + stopper=.,distance=6pt, inbetween={\blank[halfline]}] -% \def\ChkBox -% {\definedfont[file:stmary10]{\char "40}} % doesnt work - -\def\ChkBox - {\hbox - {\boxrulewidth=.4pt - \raise.2ex\ruledvbox{\phantom{\vrule width .85ex height .85ex}}}} - +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% various document elements + +%\startnotmode[realfonts] +\def\ChkBox{% + \hbox {\boxrulewidth=.4pt \raise.2ex\ruledvbox + {\phantom{\vrule width .85ex height .85ex% +}}}} + +\startmode[mkii] +\pdfmapline{stmary10 stmary10 0 then + str = gsub(str,"\t",rep(" ",d),1) + else + str = gsub(str,"\t","",1) + end + else + break + end + end + return str +end + +--~ local template = string.striplong([[ +--~ aaaa +--~ bb +--~ cccccc +--~ ]]) + +function strings.striplong(str) -- strips all leading spaces + str = gsub(str,"^%s*","") + str = gsub(str,"[\n\r]+ *","\n") + return str +end diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index a7056a39d..83a11409e 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 11/18/10 19:47:18 +-- merge date : 11/19/10 22:50:14 do -- begin closure to overcome local limits and interference @@ -122,52 +122,6 @@ function string.topattern(str,lowercase,strict) end end ---~ local t = { ---~ "1234567123456712345671234567", ---~ "a\tb\tc", ---~ "aa\tbb\tcc", ---~ "aaa\tbbb\tccc", ---~ "aaaa\tbbbb\tcccc", ---~ "aaaaa\tbbbbb\tccccc", ---~ "aaaaaa\tbbbbbb\tcccccc", ---~ } ---~ for k,v do ---~ print(string.tabtospace(t[k])) ---~ end - --- The following functions might end up in another namespace. - -function string.tabtospace(str,tab) - -- we don't handle embedded newlines - while true do - local s = find(str,"\t") - if s then - if not tab then tab = 7 end -- only when found - local d = tab-(s-1) % tab - if d > 0 then - str = gsub(str,"\t",rep(" ",d),1) - else - str = gsub(str,"\t","",1) - end - else - break - end - end - return str -end - ---~ local template = string.striplong([[ ---~ aaaa ---~ bb ---~ cccccc ---~ ]]) - -function string.striplong(str) -- strips all leading spaces - str = gsub(str,"^%s*","") - str = gsub(str,"[\n\r]+ *","\n") - return str -end - -- obsolete names: string.quote = string.quoted @@ -187,6 +141,8 @@ if not modules then modules = { } end modules ['l-lpeg'] = { local lpeg = require("lpeg") +local type = type + lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns @@ -196,10 +152,16 @@ local Ct, C, Cs, Cc, Cf, Cg = lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cf, lpeg.C local utfcharacters = string.utfcharacters local utfgmatch = unicode and unicode.utf8.gmatch +local anything = P(1) +local endofstring = P(-1) + +patterns.anything = anything +patterns.endofstring = endofstring + local digit, sign = R('09'), S('+-') local cr, lf, crlf = P("\r"), P("\n"), P("\r\n") local utf8next = R("\128\191") -local escaped = P("\\") * P(1) +local escaped = P("\\") * anything local squote = P("'") local dquote = P('"') @@ -210,7 +172,7 @@ patterns.utf8four = R("\240\244") * utf8next * utf8next * utf8next patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191') local utf8char = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four -local validutf8char = utf8char^0 * P(-1) * Cc(true) + Cc(false) +local validutf8char = utf8char^0 * endofstring * Cc(true) + Cc(false) patterns.utf8 = utf8char patterns.utf8char = utf8char @@ -235,6 +197,7 @@ patterns.uppercase = R("AZ") patterns.letter = patterns.lowercase + patterns.uppercase patterns.space = P(" ") patterns.tab = P("\t") +patterns.spaceortab = patterns.space + patterns.tab patterns.eol = S("\n\r") patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto) patterns.newline = crlf + cr + lf @@ -253,7 +216,7 @@ patterns.unsingle = (squote/"") * ((escaped + (1-squote))^0) * (squote/"") patterns.unquoted = patterns.undouble + patterns.unsingle -- more often undouble patterns.unspacer = ((patterns.spacer^1)/"")^0 -local unquoted = Cs(patterns.unquoted * P(-1)) -- not C +local unquoted = Cs(patterns.unquoted * endofstring) -- not C function string.unquoted(str) return match(unquoted,str) or str @@ -293,7 +256,7 @@ local function splitat(separator,single) separator = P(separator) local other = C((1 - separator)^0) if single then - local any = P(1) + local any = anything splitter = other * (separator * C(any^0) + "") -- ? splitters_s[separator] = splitter else @@ -357,18 +320,6 @@ function string.checkedsplit(str,separator) return match(c,str) end ---~ function lpeg.append(list,pp) ---~ local p = pp ---~ for l=1,#list do ---~ if p then ---~ p = p + P(list[l]) ---~ else ---~ p = P(list[l]) ---~ end ---~ end ---~ return p ---~ end - --~ from roberto's site: local f1 = string.byte @@ -453,7 +404,7 @@ function lpeg.secondofsplit(separator) -- nil if not split local splitter = splitters_s[separator] if not splitter then separator = P(separator) - splitter = (1 - separator)^0 * separator * C(P(1)^0) + splitter = (1 - separator)^0 * separator * C(anything^0) splitters_s[separator] = splitter end return splitter @@ -476,7 +427,7 @@ end --~ -- slower: --~ --~ function lpeg.counter(pattern) ---~ local n, pattern = 0, (lpeg.P(pattern)/function() n = n + 1 end + lpeg.P(1))^0 +--~ local n, pattern = 0, (lpeg.P(pattern)/function() n = n + 1 end + lpeg.anything)^0 --~ return function(str) n = 0 ; lpegmatch(pattern,str) ; return n end --~ end @@ -539,8 +490,8 @@ local simple_escapes = { -- also defines in l-string ["*"] = ".*", } -local p = Cs((S("-.+*%()[]") / patterns_escapes + P(1))^0) -local s = Cs((S("-.+*%()[]") / simple_escapes + P(1))^0) +local p = Cs((S("-.+*%()[]") / patterns_escapes + anything)^0) +local s = Cs((S("-.+*%()[]") / simple_escapes + anything)^0) function string.escapedpattern(str,simple) if simple then @@ -646,6 +597,18 @@ end --~ print(lpeg.count("äáàa",lpeg.UR("àá"))) --~ print(lpeg.count("äáàa",lpeg.UR(0x0000,0xFFFF))) +function lpeg.oneof(list,...) -- lpeg.oneof("elseif","else","if","then") + if type(list) ~= "table" then + list = { list, ... } + end + -- sort(list) -- longest match first + local p = P(list[1]) + for l=2,#list do + p = p + P(list[l]) + end + return p +end + end -- closure do -- begin closure to overcome local limits and interference @@ -3813,7 +3776,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) end end -- if trace_scaling then - -- report_define("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or k,description.index,description.name or '-',description.class or '-') + -- report_define("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or "",index or 0,description.name or '-',description.class or '-') -- end if tounicode then local tu = tounicode[index] -- nb: index! -- cgit v1.2.3