From 406cef06476f30c68f58cb5074efb10f79de129f Mon Sep 17 00:00:00 2001 From: Marius Date: Sat, 16 Oct 2010 23:56:12 +0300 Subject: beta 2010.10.14 13:14 --- tex/context/base/back-ini.mkiv | 2 +- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.mkiv | 3 +- tex/context/base/context.tex | 2 +- tex/context/base/core-env.lua | 46 +++++++++++++++++ tex/context/base/core-env.mkiv | 79 +++++++++++++++++++---------- tex/context/base/font-ctx.lua | 25 +++++---- tex/generic/context/luatex-fonts-merged.lua | 2 +- 8 files changed, 117 insertions(+), 44 deletions(-) create mode 100644 tex/context/base/core-env.lua diff --git a/tex/context/base/back-ini.mkiv b/tex/context/base/back-ini.mkiv index 12c41d169..a3cf2ca54 100644 --- a/tex/context/base/back-ini.mkiv +++ b/tex/context/base/back-ini.mkiv @@ -137,7 +137,7 @@ \def\jobsuffix{pdf} -\ifdefined\resetsystemmode \else +\ifdefined\resetsystemmode \else % can't happen \let\setsystemmode \gobbleoneargument \let\resetsystemmode\gobbleoneargument \fi diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 716dcf694..5cf80f8fc 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.10.13 14:39} +\newcontextversion{2010.10.14 13: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.mkiv b/tex/context/base/context.mkiv index 03b56943a..fd9251caf 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -85,6 +85,7 @@ %loadmarkfile{node-pag} \loadmarkfile{core-var} +\loadmarkfile{core-env} \loadmarkfile{back-ini} @@ -92,8 +93,6 @@ \loadmarkfile{attr-lay} \loadmarkfile{attr-eff} -\loadmarkfile{core-env} - \loadmarkfile{trac-tex} \loadmarkfile{trac-deb} diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index aa609e378..48f31836c 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.10.13 14:39} +\edef\contextversion{2010.10.14 13:14} %D For those who want to use this: diff --git a/tex/context/base/core-env.lua b/tex/context/base/core-env.lua new file mode 100644 index 000000000..0122f6bee --- /dev/null +++ b/tex/context/base/core-env.lua @@ -0,0 +1,46 @@ +if not modules then modules = { } end modules ['core-env'] = { + version = 1.001, + comment = "companion to core-env.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- maybe this will move to the context name space although the +-- plurals are unlikely to clash with future tex primitives +-- +-- if tex.modes['xxxx'] then .... else .... end + +local csname_id, texcount = token.csname_id, tex.count + +local undefined = csname_id("*undefined*crap*") + +tex.modes = { } local modes = { } +tex.constants = { } local constants = { } + +setmetatable(tex.modes, { __index = function(t,k) + local m = modes[k] + if m then + return m() + else + local n = "mode" .. k + if csname_id(n) == undefined then + return false + else + modes[k] = function() return texcount[n] >= 1 end + return texcount[n] >= 1 + end + end +end }) + +setmetatable(tex.constants, { __index = function(t,k) + local m = constants[k] + if m then + return m() + elseif csname_id(k) == undefined then + return false + else + constants[k] = function() return texcount[k] >= 1 end + return texcount[k] >= 1 + end +end }) diff --git a/tex/context/base/core-env.mkiv b/tex/context/base/core-env.mkiv index 33b9c8607..b5631f151 100644 --- a/tex/context/base/core-env.mkiv +++ b/tex/context/base/core-env.mkiv @@ -13,6 +13,8 @@ \writestatus{loading}{ConTeXt Core Macros / Environments} +\registerctxluafile{core-env}{1.001} + \unprotect %D Modes: @@ -39,68 +41,89 @@ %D considered a permanent disabling on forehand. \def\@mode@{@md@} +\def\@mode@{mode} \def\systemmodeprefix{*} -\def\disabledmode {0} % no chardefs -\def\enabledmode {1} -\def\preventedmode{2} +% todo: check prevent mode, also at the lua end + +\setnewconstant\disabledmode \zerocount +\setnewconstant\enabledmode \plusone +\setnewconstant\preventedmode\plustwo % fast internal ones -\def\setmode #1{\@EA\let\csname\@mode@#1\endcsname\enabledmode } -\def\resetmode#1{\@EA\let\csname\@mode@#1\endcsname\disabledmode} +\def\donewmode#1% + {\@EA\newcount\csname\@mode@#1\endcsname} + +\def\newmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi} + +\def\setmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\enabledmode} + +\def\resetmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\disabledmode} -\def\setsystemmode #1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\enabledmode } -\def\resetsystemmode#1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\disabledmode} +\def\newsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi} + +\def\setsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi + \csname\@mode@\systemmodeprefix#1\endcsname\enabledmode} + +\def\resetsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi + \csname\@mode@\systemmodeprefix#1\endcsname\disabledmode} % user ones -\def\preventmode{\unprotect\dopreventmode} -\def\enablemode {\unprotect\doenablemode } -\def\disablemode{\unprotect\dodisablemode} +\unexpanded\def\preventmode{\unprotect\dopreventmode} +\unexpanded\def\enablemode {\unprotect\doenablemode } +\unexpanded\def\disablemode{\unprotect\dodisablemode} + +\let\definemode\disablemode % nicer \def\dopreventmode[#1]{\protect\rawprocesscommacommand[#1]\dodopreventmode} \def\doenablemode [#1]{\protect\rawprocesscommacommand[#1]\dodoenablemode } \def\dodisablemode[#1]{\protect\rawprocesscommacommand[#1]\dododisablemode} \def\dodopreventmode#1% - {\@EA\let\csname\@mode@#1\endcsname\preventedmode} + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\preventedmode} -\def\dodoenablemode#1% mode can be relax - {\ifcase0\csname\@mode@#1\endcsname\relax - \@EA\let\csname\@mode@#1\endcsname\enabledmode +\def\dodoenablemode#1% we can speed it up by moving the new outside + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \ifnum\csname\@mode@#1\endcsname=\preventedmode \else + \csname\@mode@#1\endcsname\enabledmode \fi} \def\dododisablemode#1% - {\ifcase0\csname\@mode@#1\endcsname\or - \@EA\let\csname\@mode@#1\endcsname\disabledmode + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \ifnum\csname\@mode@#1\endcsname=\preventedmode \else + \csname\@mode@#1\endcsname\disabledmode \fi} % handy for mp -\def\booleanmodevalue#1% can be \relax - {\expandafter\ifx\csname\@mode@#1\endcsname\relax - fals% - \else\ifnum0\csname\@mode@#1\endcsname=0 - fals% - \else - tru% - \fi\fi e} +\def\booleanmodevalue#1% + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname fals\else tru\fi\else fals\fi e} % check macros \newif\ifcheckedmode \def\dodocheckformode#1% - {\ifcase0\csname\@mode@#1\endcsname\or\checkedmodetrue\fi} + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\else\checkedmodetrue\fi\fi} \def\docheckformode#1#2#3% will be sped up with a quit {\protect\checkedmodefalse\rawprocesscommacommand[#3]\dodocheckformode \ifcheckedmode\@EA#1\else\@EA#2\fi} \def\dodocheckforallmodes#1% - {\ifcase0\csname\@mode@#1\endcsname\relax\checkedmodefalse\or\or\checkedmodefalse\fi} + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\checkedmodefalse\fi\else\checkedmodefalse\fi} \def\docheckforallmodes#1#2#3% will be sped up with a quit {\protect\checkedmodetrue\rawprocesscommacommand[#3]\dodocheckforallmodes @@ -164,7 +187,7 @@ %D Lets now set a mode: -\enablemode[mkiv] \setsystemmode{mkiv} +\enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv} %D Setups: @@ -301,7 +324,7 @@ \def\dostartlocalsetupsA {\the\everydefinelocalsetups\dodoubleempty\dostartlocalsetups} % [ ] delimited \def\dostartsetupsA {\the\everydefinesetups \dodoubleempty\dostartsetups} % [ ] delimited - % empty preserves inner {} (is removed by the \@EA{#3}) +% empty preserves inner {} (is removed by the \@EA{#3}) \def\dostartluasetupsB #1 {\the\everydefineluasetups \dodostartluasetups \empty{#1}\empty} % space delimited \def\dostartxmlsetupsB #1 {\the\everydefinexmlsetups \dodostartxmlsetups \empty{#1}\empty} % space delimited diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua index e5da6e868..b6c0dd3f3 100644 --- a/tex/context/base/font-ctx.lua +++ b/tex/context/base/font-ctx.lua @@ -470,20 +470,25 @@ function definers.define(specification) -- -- following calls expect a few properties to be set: -- - specification.lookup = specification.lookup or "file" - specification.specification = "" -- not used - specification.size = specification.size or 655260 - specification.sub = specification.sub or "" - specification.method = specification.method or "*" - specification.detail = specification.detail or "" - specification.resolved = "" - specification.forced = "" - specification.features = { } -- via detail + local lookup, name, sub, method, detail = getspecification(name or "") + -- + specification.name = (name ~= "" and name) or specification.name + -- + specification.lookup = specification.lookup or (lookup ~= "" and lookup) or "file" + specification.size = specification.size or 655260 + specification.sub = specification.sub or (sub ~= "" and sub) or "" + specification.method = specification.method or (method ~= "" and method) or "*" + specification.detail = specification.detail or (detail ~= "" and detail) or "" + -- + specification.specification = "" -- not used + specification.resolved = "" + specification.forced = "" + specification.features = { } -- via detail -- -- we don't care about mathsize textsize goodies fallbacks -- if specification.cs == "" then - specification.cs = nil + specification.cs = nil specification.global = false elseif specification.global == nil then specification.global = false diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index 7af0079f7..bb67b59af 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 : 10/13/10 14:39:16 +-- merge date : 10/14/10 13:14:44 do -- begin closure to overcome local limits and interference -- cgit v1.2.3