summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tex/context/base/back-pdf.mkiv4
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/font-con.lua12
-rw-r--r--tex/context/base/font-ctx.lua14
-rw-r--r--tex/context/base/font-def.lua19
-rw-r--r--tex/context/base/font-ini.mkiv268
-rw-r--r--tex/context/base/font-unk.mkiv30
-rw-r--r--tex/context/base/math-ini.mkiv34
-rw-r--r--tex/context/base/math-map.lua94
-rw-r--r--tex/context/base/math-noa.lua25
-rw-r--r--tex/context/base/meta-ini.mkiv5
-rw-r--r--tex/context/base/mlib-pps.mkiv2
-rw-r--r--tex/context/base/mult-sys.mkiv16
-rw-r--r--tex/context/base/pack-obj.mkiv1
-rw-r--r--tex/context/base/pack-rul.mkiv2
-rw-r--r--tex/context/base/status-files.pdfbin23742 -> 23703 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin157615 -> 157636 bytes
-rw-r--r--tex/context/base/strc-des.mkiv2
-rw-r--r--tex/context/base/strc-reg.mkiv2
-rw-r--r--tex/context/base/strc-sec.mkiv2
-rw-r--r--tex/context/base/type-lucidanova.mkiv11
-rw-r--r--tex/context/base/type-otf.mkiv24
-rw-r--r--tex/context/base/type-siz.mkiv40
-rw-r--r--tex/context/fonts/lm-math.lfg37
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua33
28 files changed, 409 insertions, 276 deletions
diff --git a/tex/context/base/back-pdf.mkiv b/tex/context/base/back-pdf.mkiv
index 30beb2fb9..1737e9866 100644
--- a/tex/context/base/back-pdf.mkiv
+++ b/tex/context/base/back-pdf.mkiv
@@ -124,14 +124,14 @@
%D Transformations. Some day we will use primitives (once they're fixed).
\def\dostartrotation#1% grouped
- {\forcecolorhack
+ {\forcecolorhack % maybe use signal instead
\pdfliteral{q \ctxlua{lpdf.rotationcm(#1)}}}
\def\dostoprotation
{\pdfliteral{Q}}
\def\dostartscaling#1#2% the test is needed because acrobat is bugged!
- {\forcecolorhack
+ {\forcecolorhack % maybe use signal instead
\pdfliteral{q \ifdim#1\points=\zeropoint.0001\else#1\fi\space 0 0
\ifdim#2\points=\zeropoint.0001\else#2\fi\space 0 0 cm}}
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index c0753b8ae..a7d1c6328 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{2011.06.26 13:23}
+\newcontextversion{2011.06.27 20:17}
%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 391315f13..db8c21cca 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{2011.06.26 13:23}
+\newcontextversion{2011.06.27 20:17}
%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.mkii b/tex/context/base/context.mkii
index b9e18eb63..77547c3a4 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{2011.06.26 13:23}
+\edef\contextversion{2011.06.27 20:17}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index c03d3b707..f33ac769d 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.06.26 13:23}
+\edef\contextversion{2011.06.27 20:17}
%D For those who want to use this:
diff --git a/tex/context/base/font-con.lua b/tex/context/base/font-con.lua
index 0caa93b76..d330d4c1e 100644
--- a/tex/context/base/font-con.lua
+++ b/tex/context/base/font-con.lua
@@ -212,9 +212,10 @@ function constructors.scale(tfmdata,specification)
-- specification.textsize : natural (text)size
-- parameters.mathsize : 1=text 2=script 3=scriptscript >1000 enforced size (feature value other than yes)
--
- local mathsize = tonumber(specification.mathsize) or 0
- local textsize = tonumber(specification.textsize) or scaledpoints
- local forcedsize = tonumber(parameters.mathsize ) or 0
+ local mathsize = tonumber(specification.mathsize) or 0
+ local textsize = tonumber(specification.textsize) or scaledpoints
+ local forcedsize = tonumber(parameters.mathsize ) or 0
+ local extrafactor = tonumber(specification.factor ) or 1
if (mathsize == 2 or forcedsize == 2) and parameters.scriptpercentage then
scaledpoints = parameters.scriptpercentage * textsize / 100
elseif (mathsize == 3 or forcedsize == 3) and parameters.scriptscriptpercentage then
@@ -373,6 +374,11 @@ function constructors.scale(tfmdata,specification)
local scaledheight = defaultheight * vdelta
local scaleddepth = defaultdepth * vdelta
--
+ if trace_defining then
+ report_defining("scaling by (%s,%s): name '%s', fullname: '%s', filename: '%s'",
+ hdelta,vdelta,name or "noname",fullname or "nofullname",filename or "nofilename")
+ end
+ --
local hasmath = (properties.has_math or next(mathparameters)) and true
if hasmath then
if trace_defining then
diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua
index e39e29080..d036c042c 100644
--- a/tex/context/base/font-ctx.lua
+++ b/tex/context/base/font-ctx.lua
@@ -601,6 +601,10 @@ local setsomefontsize = context.fntsetsomesize
function definers.stage_one(str)
statistics.starttiming(fonts)
+ if trace_defining then
+ report_defining("memory usage before: %s",statistics.memused())
+ report_defining("start stage one: %s",str)
+ end
local fullname, size = lpegmatch(splitpattern,str)
local lookup, name, sub, method, detail = getspecification(fullname)
if not name then
@@ -630,6 +634,9 @@ function definers.stage_one(str)
setemptyfontsize()
end
specification = definers.makespecification(str,lookup,name,sub,method,detail,size)
+ if trace_defining then
+ report_defining("stop stage one")
+ end
end
local n = 0
@@ -640,7 +647,7 @@ local n = 0
function definers.stage_two(global,cs,str,size,inheritancemode,classfeatures,fontfeatures,classfallbacks,fontfallbacks,
mathsize,textsize,relativeid,classgoodies,goodies)
if trace_defining then
- report_defining("memory usage before: %s",statistics.memused())
+ report_defining("start stage two: %s (%s)",str,size)
end
-- name is now resolved and size is scaled cf sa/mo
local lookup, name, sub, method, detail = getspecification(str or "")
@@ -714,7 +721,9 @@ function definers.stage_two(global,cs,str,size,inheritancemode,classfeatures,fon
specification.fallbacks = fontfallbacks
end
end
- local tfmdata = definers.read(specification,size) -- id not yet known
+--~ report_defining("SIZE %s %s",size,specification.size)
+ local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?)
+--~ report_defining("HASH AFTER %s",specification.size)
if not tfmdata then
report_defining("unable to define %s as \\%s",name,cs)
texsetcount("global","lastfontid",-1)
@@ -759,6 +768,7 @@ function definers.stage_two(global,cs,str,size,inheritancemode,classfeatures,fon
end
if trace_defining then
report_defining("memory usage after: %s",statistics.memused())
+ report_defining("stop stage two")
end
statistics.stoptiming(fonts)
end
diff --git a/tex/context/base/font-def.lua b/tex/context/base/font-def.lua
index 182e543b0..533d1ec3c 100644
--- a/tex/context/base/font-def.lua
+++ b/tex/context/base/font-def.lua
@@ -119,7 +119,7 @@ function definers.registersplit(symbol,action,verbosename)
end
end
-function definers.makespecification(specification, lookup, name, sub, method, detail, size)
+function definers.makespecification(specification,lookup,name,sub,method,detail,size)
size = size or 655360
if trace_defining then
report_defining("%s -> lookup: %s, name: %s, sub: %s, method: %s, detail: %s",
@@ -395,14 +395,25 @@ function definers.read(specification,size,id) -- id can be optional, name can al
specification = definers.resolve(specification)
local hash = constructors.hashinstance(specification)
local tfmdata = definers.registered(hash) -- id
- if not tfmdata then
+ if tfmdata then
+ if trace_defining then
+ report_defining("already hashed: %s",hash)
+ end
+ else
tfmdata = definers.loadfont(specification) -- can be overloaded
if tfmdata then
---~ constructors.checkvirtualid(tfmdata) -- interferes
+ if trace_defining then
+ report_defining("loaded and hashed: %s",hash)
+ end
+ --~ constructors.checkvirtualid(tfmdata) -- interferes
tfmdata.properties.hash = hash
if id then
definers.register(tfmdata,id)
end
+ else
+ if trace_defining then
+ report_defining("not loaded and hashed: %s",hash)
+ end
end
end
lastdefined = tfmdata or id -- todo ! ! ! ! !
@@ -412,7 +423,7 @@ function definers.read(specification,size,id) -- id can be optional, name can al
local properties = tfmdata.properties or { }
local parameters = tfmdata.parameters or { }
report_defining("using %s font with id %s, name:%s size:%s bytes:%s encoding:%s fullname:%s filename:%s",
- properties.type or "unknown",
+ properties.format or "unknown",
id or "?",
properties.name or "?",
parameters.size or "default",
diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv
index 76376f01b..3b05eea90 100644
--- a/tex/context/base/font-ini.mkiv
+++ b/tex/context/base/font-ini.mkiv
@@ -492,6 +492,10 @@
%D check for fontclass being default or empty and save a few
%D tests but it does not help us when no math is defined.
+%D Because we want to keep mr=.. and mb=... settings (read: not
+%D break downward compatibility by enforcing mrlr etc) we need a
+%D bit more code that optimal.
+
\let\mrfam \zerocount % math regular
\let\mrfamlr\plusone % math regular l2r
\let\mrfamrl\plustwo % math regular r2l
@@ -502,7 +506,8 @@
\definesystemattribute[mathfamily][public]
-\newconditional\bidirectionalmathstrategy
+\newconditional\bidirectionalmathstrategy % can be default, not that much overhead: \settrue\bidirectionalmathstrategy
+\newconditional\completeboldmathstrategy \settrue\completeboldmathstrategy
\def\mathtextsuffix {-text}
\def\mathscriptsuffix {-script}
@@ -521,7 +526,7 @@
\fi\fi
#1#2\font}
-\def\dodosetmathfamilyx#1#2%
+\def\dodosetmathfamilyx#1#2% somehow this fallback does now always work
{\ifcsname\defaultfontclass\fontbody\c!mm\fontfamily\fontsize\currentmathsize\endcsname \autofontsizefalse
\csname\defaultfontclass\fontbody\c!mm\fontfamily\fontsize\currentmathsize\endcsname \else
\ifcsname\defaultfontclass\fontbody\c!mm\fontfamily \currentmathsize\endcsname \autofontsizetrue
@@ -534,17 +539,17 @@
\csname \fontbody\c!mm\fontfamily\fontsize\currentmathsize\endcsname \else
\ifcsname \fontbody\c!mm\fontfamily \currentmathsize\endcsname \autofontsizetrue
\csname \fontbody\c!mm\fontfamily \currentmathsize\endcsname \else
- \nullfont \autofontsizetrue
+ \nullfont \autofontsizetrue
\fi\fi}
\def\dosetmathfamily#1#2%
{\let\savedfontbody\fontbody % op hoger plan
\let\fontfamily#2%
- % new per 20100817
- \checkbodyfontenvironment[\scriptscriptface]% pretty slow when many switches
- \checkbodyfontenvironment[\scriptface]%
- \checkbodyfontenvironment[\textface]%
- %
+% % new per 20100817
+% \checkbodyfontenvironment[\scriptscriptface]% pretty slow when many switches
+% \checkbodyfontenvironment[\scriptface]%
+% \checkbodyfontenvironment[\textface]%
+% %
\let\currentmathsize\!!plusthree\let\fontbody\scriptscriptface\dodosetmathfamily\scriptscriptfont#1%
\let\currentmathsize\!!plustwo \let\fontbody\scriptface \dodosetmathfamily\scriptfont #1%
\let\currentmathsize\!!plusone \let\fontbody\textface \dodosetmathfamily\textfont #1%
@@ -552,19 +557,48 @@
\let\fontbody\savedfontbody
\autofontsizefalse}
+% experiment
+%
+% optimized: math fonts are never changed (10K \bfa $x$: 3.2 => 2.5 (baseline 1.0))
+
+\def\dosetmathfamily#1#2% fam tag
+ {\ifcsname\??ff:\fontclass:\textface:\c!mm:#2:\fontsize\endcsname
+ \csname\??ff:\fontclass:\textface:\c!mm:#2:\fontsize\endcsname
+ \else
+ \dosetmathfamilyindeed#1#2%
+ \fi}
+
+\def\dosetmathfamilyindeed#1#2%
+ {\let\savedfontbody\fontbody % op hoger plan
+ \let\fontfamily#2%
+ \let\currentmathsize\!!plusthree\let\fontbody\scriptscriptface\dodosetmathfamily\scriptscriptfont#1%
+ \let\currentmathsize\!!plustwo \let\fontbody\scriptface \dodosetmathfamily\scriptfont #1%
+ \let\currentmathsize\!!plusone \let\fontbody\textface \dodosetmathfamily\textfont #1%
+ \expandafter\xdef\csname\??ff:\fontclass:\textface:\c!mm:#2:\fontsize\endcsname{%
+ \scriptscriptfont#1\csname*\fontclass\scriptscriptface\c!mm#23\fontsize3*\endcsname
+ \scriptfont #1\csname*\fontclass\scriptface \c!mm#22\fontsize2*\endcsname
+ \textfont #1\csname*\fontclass\textface \c!mm#21\fontsize1*\endcsname
+ }%
+ \let\currentmathsize\empty
+ \let\fontbody\savedfontbody
+ \autofontsizefalse}
% It would be nice if characters could be defined in a neutral way (say fam 255) and
% be mapped to a real family during noad list construction. However, this changes
% tex in critical places so for the moment we simulate this using manipulation.
-% For tracing purposes we use three families but in l2r mode 1 and 2 are copies of 0
-% while in rl mode 0 is a copy of 1. There is no real overhead involved in this.
+\appendtoks
+ % new per 20100817
+ \checkbodyfontenvironment[\scriptscriptface]% pretty slow when many switches
+ \checkbodyfontenvironment[\scriptface]%
+ \checkbodyfontenvironment[\textface]%
+\to \mathstrategies
-% \appendtoks
-% \dosetmathfamily\mrfam\c!mr
-% \to \mathstrategies
+% For tracing purposes we use three families but in l2r mode 1 and 2 are copies of 0
+% while in rl mode 0 is a copy of 1. There is no real overhead involved in this. This
+% also permits different font definitions for normal and mixed.
-\appendtoks
+\appendtoks % can be analyzed once
% why here ..
\edef\@@fontclassdirection{\ifcsname\fontclass\c!mm\s!direction\endcsname\csname\fontclass\c!mm\s!direction\endcsname\fi}%
% ...
@@ -575,29 +609,74 @@
\fi
\to \mathstrategies
+\def\bidirectionalmathstrategyyes
+ {\dosetmathfamily \mrfamlr\c!mrlr
+ \dosetmathfamily \mrfamrl\c!mrrl
+ \textfont \mrfam \textfont \mrfamlr
+ \scriptfont \mrfam \scriptfont \mrfamlr
+ \scriptscriptfont\mrfam \scriptscriptfont\mrfamlr}
+
+\def\bidirectionalmathstrategynop
+ {\dosetmathfamily \mrfam \c!mr
+ \textfont \mrfamrl\textfont \mrfam
+ \scriptfont \mrfamrl\scriptfont \mrfam
+ \scriptscriptfont\mrfamrl\scriptscriptfont\mrfam
+ \textfont \mrfamlr\textfont \mrfam
+ \scriptfont \mrfamlr\scriptfont \mrfam
+ \scriptscriptfont\mrfamlr\scriptscriptfont\mrfam}
+
\appendtoks
\ifconditional\bidirectionalmathstrategy
- \dosetmathfamily \mrfamlr\c!mrlr
- \dosetmathfamily \mrfamrl\c!mrrl
- \textfont \mrfam \textfont \mrfamlr
- \scriptfont \mrfam \scriptfont \mrfamlr
- \scriptscriptfont\mrfam \scriptscriptfont\mrfamlr
+ \bidirectionalmathstrategyyes
\else
- \dosetmathfamily \mrfam \c!mr
- \textfont \mrfamrl\textfont \mrfam
- \scriptfont \mrfamrl\scriptfont \mrfam
- \scriptscriptfont\mrfamrl\scriptscriptfont\mrfam
- \textfont \mrfamlr\textfont \mrfam
- \scriptfont \mrfamlr\scriptfont \mrfam
- \scriptscriptfont\mrfamlr\scriptscriptfont\mrfam
+ \bidirectionalmathstrategynop
\fi
\to \mathstrategies
+\def\completeboldmathstrategyyesbidi
+ {\dosetmathfamily \mbfamlr\c!mblr
+ \dosetmathfamily \mbfamrl\c!mbrl
+ \textfont \mbfam \textfont \mbfamlr
+ \scriptfont \mbfam \scriptfont \mbfamlr
+ \scriptscriptfont\mbfam \scriptscriptfont\mbfamlr}
+
+\def\completeboldmathstrategyyes
+ {\dosetmathfamily \mbfam \c!mb
+ \textfont \mbfamrl\textfont \mbfam
+ \scriptfont \mbfamrl\scriptfont \mbfam
+ \scriptscriptfont\mbfamrl\scriptscriptfont\mbfam
+ \textfont \mbfamlr\textfont \mbfam
+ \scriptfont \mbfamlr\scriptfont \mbfam
+ \scriptscriptfont\mbfamlr\scriptscriptfont\mbfam}
+
+\def\completeboldmathstrategynop
+ {\textfont \mbfam \textfont \mrfam
+ \scriptfont \mbfam \scriptfont \mrfam
+ \scriptscriptfont\mbfam \scriptscriptfont\mrfam
+ \textfont \mbfamrl\textfont \mrfamrl
+ \scriptfont \mbfamrl\scriptfont \mrfamrl
+ \scriptscriptfont\mbfamrl\scriptscriptfont\mrfamrl
+ \textfont \mbfamlr\textfont \mrfamlr
+ \scriptfont \mbfamlr\scriptfont \mrfamlr
+ \scriptscriptfont\mbfamlr\scriptscriptfont\mrfamlr}
+
\appendtoks
- \fam\defaultmathfamily
+ \ifconditional\completeboldmathstrategy
+ \ifconditional\bidirectionalmathstrategy
+ \completeboldmathstrategyyesbidi
+ \else
+ \completeboldmathstrategyyes
+ \fi
+ \else
+ \completeboldmathstrategynop
+ \fi
+\to \mathstrategies
+
+\appendtoks
+ \fam\defaultmathfamily % all characters and symbols are in this family
\to \everymathematics
-\unexpanded\def\synchronizemathfamily
+\unexpanded\def\synchronizemathfamilymr
{\attribute\mathfamilyattribute\ifconditional\bidirectionalmathstrategy
\ifconditional\mathematics_right_to_left
\plustwo
@@ -608,45 +687,73 @@
\zerocount
\fi}
+\unexpanded\def\synchronizemathfamilymb
+ {\attribute\mathfamilyattribute\ifconditional\bidirectionalmathstrategy
+ \ifconditional\mathematics_right_to_left
+ \ifconditional\pseudoboldmathstate\pluseight\else\plusfive\fi
+ \else
+ \ifconditional\pseudoboldmathstate\plusseven\else\plusfour\fi
+ \fi
+ \else
+ \ifconditional\pseudoboldmathstate\plussix\else\plusthree\fi
+ \fi}
+
+\letvalue{\??ff:\c!mr:\c!tf }\synchronizemathfamilymr
+\letvalue{\??ff:\c!mr:\c!sl }\synchronizemathfamilymr
+\letvalue{\??ff:\c!mr:\c!it }\synchronizemathfamilymr
+\letvalue{\??ff:\c!mr:\c!bf }\synchronizemathfamilymb
+\letvalue{\??ff:\c!mr:\c!bs }\synchronizemathfamilymb
+\letvalue{\??ff:\c!mr:\c!bi }\synchronizemathfamilymb
+\letvalue{\??ff:\c!mr:\empty}\synchronizemathfamilymr
+
+\def\synchronizemathfamily
+ {\csname\??ff:\c!mr:\ifcsname\??ff:\c!mr:\fontalternative\endcsname\fontalternative\fi\endcsname}
+
+% we need \fontid (or could store this for a fontclass)
+
+\appendtoks
+ \edef\currentmathfontmr{\fontname\textfont\zerocount}%
+ \edef\currentmathfontmb{\fontname\textfont\plusthree}%
+ \ifx\currentmathfontmr\currentmathfontmb
+ \letvalue{\??ff:ms:\fontclass}\dosetmathpartialboldstrategy % enables partial bold math
+ \else
+ \letvalue{\??ff:ms:\fontclass}\dosetmathfullboldstrategy % enables full bold math
+ \fi
+\to \mathstrategies
+
+\def\synchronizemathboldstrategy {\csname\??ff:ms:\fontclass\endcsname}
+
+\newconditional\pseudoboldmathstate
+
+\def\dosetmathpartialboldstrategy{\settrue \pseudoboldmathstate}
+\def\dosetmathfullboldstrategy {\setfalse\pseudoboldmathstate}
+
+\appendtoks
+ \synchronizemathboldstrategy
+\to \everymathematics
+
% Bold is somewhat special as we might want both full-bold-math mixed
% regular-math, as well as automatic adaption to outer bold (in titles
% and inline text bold) so we will need explicit switches as well as
% an automatic one. (We will use lucida as an example.)
-% \unexpanded\def\mr{\ifmmode\fam\mrfam\else\setcurrentfontalternative\c!mr\fi}
-% \unexpanded\def\mb{\ifmmode\fam\mbfam\else\setcurrentfontalternative\c!mb\fi}
-
\unexpanded\def\mr
{\ifmmode
- \synchronizemathfamily
+ \synchronizemathfamilymr
\else
\setcurrentfontalternative\c!mr
\fi}
\unexpanded\def\mb
{\ifmmode
- \fam\mbfam
+ \synchronizeboldfamilymb
\else
\setcurrentfontalternative\c!mb
\fi}
-\let\mr\mb % for the moment
-
\appendtoks
- \synchronizemathfamily
+ \synchronizemathfamily % auto bold
\to \everymathematics
-
-% not official (doesn't work currently as some math definitions are bound to families) and
-% we're not going to mix families
-%
-% \newconditional\boldmathmode % might change ... maybe \mathfontsupport 1 (normal) 2 (bold too)
-%
-% \def\enableboldmath {\settrue \boldmathmode} % todo: \setupbodyfont[boldmath,...]
-% \def\disableboldmath{\setfalse\boldmathmode}
-%
-% \appendtoks
-% \ifconditional\boldmathmode\dosetmathfamily\mbfam\c!mb\fi
-% \to \mathstrategies
%D All used styles, like rm, ss and tt, are saved in a comma
%D separated list. Appart from practical limitations one can
@@ -800,6 +907,8 @@
\setnewconstant\featureinheritancedefault \featureinheritancefontfirst
\setnewconstant\featureinheritancemode \featureinheritancedefault
+\newdimen\scaledtextface
+
\unexpanded\def\lowleveldefinefont#1#2% #2 = cs
{% we can now set more at the lua end
\ctxlua{fonts.definers.stage_one("\luaescapestring{#1}")}% the escapestring catches at \somedimen
@@ -826,12 +935,18 @@
\scaledfontsize\localrelativefontsize\scaledfontsize
\ifautofontsize
\scaledfontsize\currentfontbodyscale\scaledfontsize
+ \scaledtextface\currentfontbodyscale\dimexpr\textface\relax
+ \else
+ \scaledtextface\textface
\fi
\edef\somefontspec{at \number\scaledfontsize sp}%
\edef\somefontfile{\truefontname\somefontname}%
\ifx\somefontfile\s!unknown
\edef\somefontfile{\defaultfontfile}%
\fi
+ \ifx\somefontfile\s!unknown
+ \edef\somefontfile{\defaultfontfile}%
+ \fi
\updatefontparameters
\updatefontclassparameters
\ctxlua{fonts.definers.stage_two(
@@ -845,7 +960,7 @@
"\@@fontclassfallbacks",
"\@@fontfallbacks",
0\currentmathsize,
- \number\dimexpr\textface\relax,
+ \number\scaledtextface,
"\relativefontid", % experiment
"\@@fontclassgoodies", % experiment (not yet used)
"\@@fontgoodies" % experiment
@@ -1275,6 +1390,8 @@
%D The \type {*} makes the switch local, so that we can redefine a
%D logical name and/or change the size in between.
+%D todo: now mathsize twice in name (so it can go here)
+
\newif\ifautofontsize \autofontsizetrue
\let\lastfontidentifier\empty
@@ -1285,7 +1402,7 @@
\let\oldrawfontidentifier\rawfontidentifier
\let\oldnewfontidentifier\newfontidentifier
-\def\newfontidentifier{*\fontclass\lastfontidentifier\fontstyle\fontsize*}
+\def\newfontidentifier{*\fontclass\lastfontidentifier\fontstyle\fontsize*} % no \currentmathsize
\def\dododefinefont#1#2%
{\featureinheritancemode\featureinheritancefontonly
@@ -1792,6 +1909,8 @@
%D If we move design size info to the lfg file (after all only lm
%D has design sizes) we can get rid of much code .. 2012 or so.
+% todo: \s!parent
+
\unexpanded\def\definebodyfont
{\doquadrupleempty\redefinebodyfont}
@@ -1906,26 +2025,6 @@
\expandafter\checktextbodyfont
\fi{#1}} % no \c!!mm, not expanded later on
-% some day we can do an auto-fam if needed
-
-% \def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined)
-% {%\message{!m #1 #2 #3!}% #1 #2 #3 = signal
-% %ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \mr \mb
-% \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi} % \mm
-
-% \def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined)
-% {%\message{!t #1 #2 #3!}%
-% \ifcsname #1#3\endcsname\else\setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}\fi % \rma
-% \ifcsname #2#3\endcsname\else\setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}\fi % \sla
-% \ifcsname #1#2#3\endcsname\else\setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}\fi % \rmsla
-% \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi % \rm
-% \ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \sl
-% \ifcsname #1\c!x\endcsname\else\setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}\fi % \rmx
-% \ifcsname#1\c!xx\endcsname\else\setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}\fi % \rmxx
-% \ifcsname #2\c!x\endcsname\else\setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}\fi % \slx
-% \ifcsname#2\c!xx\endcsname\else\setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}\fi % \slxx
-% \ifcsname #1#2\endcsname\else\setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}\fi} % \rmsl
-
\def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined)
{%\message{!m #1 #2 #3!}% #1 #2 #3 = signal
%setugvalue {#2}{\setcurrentfontalternative {#2}}% % \mr \mb
@@ -3930,35 +4029,6 @@
\let\thedefinedfont\relax
-% \def\symbolicsizedfont#1#2#3%
-% {\scaledfontsize#1%
-% \scaledfontsize#2\scaledfontsize
-% \font\thedefinedfont=\truefontname{\glyphfontfile{#3}} at \currentfontbodyscale\scaledfontsize\relax
-% \thedefinedfont}
-%
-% \def\symbolicscaledfont
-% {\symbolicsizedfont\fontbody}
-%
-% \unexpanded\def\symbolicfont
-% {\symbolicsizedfont\fontbody\plusone}
-%
-% \unexpanded\def\getglyph#1#2% slow, faster, much faster
-% %{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}}
-% %{{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}}
-% %{{\symbolicfont{#1}#2}}
-% {{\symbolicfont{#1}\doifnumberelse{#2}\char\donothing#2}}
-%
-% \unexpanded\def\getscaledglyph#1#2#3%
-% {{\symbolicscaledfont{#1}{#2}\doifnumberelse{#3}\char\donothing#3}}
-%
-% \unexpanded\def\getrawglyph#1#2% for simple symbols
-% {{\scaledfontsize\fontbody
-% \font\thedefinedfont=#1 at \currentfontbodyscale\scaledfontsize\relax
-% \thedefinedfont\doifnumberelse{#2}\char\donothing#2}}
-%
-% \unexpanded\def\getfontchar#1#2%
-% {{\symbolicfont{#1}\fontchar{#2}}}
-
\def\setscaledstyledsymbolicfont#1#2#3% quite a slowdown, glyphfontfile
{\edef\askedsymbolfont{\truefontname{\glyphfontfile{#3}} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}%
\ifcsname\??ss->\askedsymbolfont\endcsname
diff --git a/tex/context/base/font-unk.mkiv b/tex/context/base/font-unk.mkiv
index 90cab07a0..601f0449f 100644
--- a/tex/context/base/font-unk.mkiv
+++ b/tex/context/base/font-unk.mkiv
@@ -43,7 +43,11 @@
\definefontsynonym [MonoCaps] [unknown]
\definefontsynonym [MathRoman] [unknown]
+\definefontsynonym [MathRomanL2R] [MathRoman]
+\definefontsynonym [MathRomanR2L] [MathRoman]
\definefontsynonym [MathRomanBold] [MathRoman]
+\definefontsynonym [MathRomanBoldL2R] [MathRomanBold]
+\definefontsynonym [MathRomanBoldR2L] [MathRomanBold]
\definefontsynonym [Handwriting] [unknown]
\definefontsynonym [Calligraphic] [unknown]
@@ -128,28 +132,10 @@
\definebodyfont [default] [mm]
[mr=MathRoman mo 1,
mrlr=MathRomanL2R mo 1,
- mrrl=MathRomanR2L mo 1]
-
-% \definebodyfont [default] [mm]
-% [mr=MathRoman mo 1,
-% mrlr=MathRomanL2R mo 1,
-% mrrl=MathRomanR2L mo 1,
-% mb=MathRomanBold mo 1,
-% mblr=MathRomanBoldL2R mo 1,
-% mbrl=MathRomanBoldR2L mo 1]
-
-\definebodyfont [bfmath] [mm] % why not just bold
- [mr=MathRomanBold mo 1,
- mrlr=MathRomanBoldL2R mo 1,
- mrrl=MathRomanBoldR2L mo 1]
-
-% \definebodyfont [bidi] [mm]
-% [mrlr=MathRomanL2R mo 1,
-% mrrl=MathRomanR2L mo 1]
-
-% \definebodyfont [bidibfmath] [mm]
-% [mrlr=MathRomanBoldL2R mo 1,
-% mrrl=MathRomanBoldR2L mo 1]
+ mrrl=MathRomanR2L mo 1,
+ mb=MathRomanBold mo 1,
+ mblr=MathRomanBoldL2R mo 1,
+ mbrl=MathRomanBoldR2L mo 1]
\definebodyfont [default] [hw]
[tf=Handwriting sa 1]
diff --git a/tex/context/base/math-ini.mkiv b/tex/context/base/math-ini.mkiv
index ad01fa0b2..c7e44e2a7 100644
--- a/tex/context/base/math-ini.mkiv
+++ b/tex/context/base/math-ini.mkiv
@@ -59,7 +59,7 @@
\attribute\mathmodeattribute\plusone
\to \everybeforedisplayformula
-\setnewconstant\defaultmathfamily 255
+\setnewconstant\defaultmathfamily \zerocount % 255
%D \macros
%D {setupmathematics}
@@ -118,28 +118,30 @@
\let\mathalternate\setmathalternate % obsolete
-\unexpanded\def\mr {\setmathattribute{regular}{tf}\setmathstylealterternate{tf}}
+\unexpanded\def\mr {\setmathattribute\s!regular\c!tf\setmathstylealterternate\s!tf}
-\unexpanded\def\mathdefault {\setmathattribute{regular}{it}\setmathstylealterternate{it}}
-\unexpanded\def\mathscript {\setmathalphabet{script}\setmathstylealterternate{script}}
-\unexpanded\def\mathfraktur {\setmathalphabet{fraktur}\setmathstylealterternate{fraktur}}
-\unexpanded\def\mathblackboard{\setmathalphabet{blackboard}\setmathstylealterternate{blackboard}}
+\unexpanded\def\mathdefault {\setmathattribute\s!regular\c!it\setmathstylealterternate\s!it}
+\unexpanded\def\mathscript {\setmathalphabet \s!script \setmathstylealterternate\s!script}
+\unexpanded\def\mathfraktur {\setmathalphabet \s!fraktur \setmathstylealterternate\s!fraktur}
+\unexpanded\def\mathblackboard{\setmathalphabet \s!blackboard \setmathstylealterternate\s!blackboard}
-\unexpanded\def\mathrm{\setmathattribute{rm}{tf}\setmathstylealterternate{tf}}
-\unexpanded\def\mathss{\setmathattribute{ss}{tf}\setmathstylealterternate{tf}}
-\unexpanded\def\mathtt{\setmathattribute{tt}{tf}\setmathstylealterternate{tf}}
+\unexpanded\def\mathrm {\setmathattribute\s!rm\c!tf \setmathstylealterternate\s!tf}
+\unexpanded\def\mathss {\setmathattribute\s!ss\c!tf \setmathstylealterternate\s!tf}
+\unexpanded\def\mathtt {\setmathattribute\s!tt\c!tf \setmathstylealterternate\s!tf}
-\unexpanded\def\mathtf{\setmathstyle{tf}\setmathstylealterternate{tf}}
-\unexpanded\def\mathbf{\setmathstyle{bf}\setmathstylealterternate{bf}}
-\unexpanded\def\mathsl{\setmathstyle{it}\setmathstylealterternate{it}} % no sl
-\unexpanded\def\mathit{\setmathstyle{it}\setmathstylealterternate{it}}
-\unexpanded\def\mathbs{\setmathstyle{bi}\setmathstylealterternate{bi}} % no sl
-\unexpanded\def\mathbi{\setmathstyle{bi}\setmathstylealterternate{bi}}
+\unexpanded\def\mathtf {\setmathstyle\s!tf \setmathstylealterternate\s!tf}
+\unexpanded\def\mathsl {\setmathstyle\s!it \setmathstylealterternate\s!it} % no sl
+\unexpanded\def\mathit {\setmathstyle\s!it \setmathstylealterternate\s!it}
+
+\unexpanded\def\mathbf {\setmathstyle\s!bf \setmathstylealterternate\s!bf}
+\unexpanded\def\mathbs {\setmathstyle\s!bi \setmathstylealterternate\s!bi} % no sl
+\unexpanded\def\mathbi {\setmathstyle\s!bi \setmathstylealterternate\c!bi}
\let\tfmath\mathtf % maybe a grouped command
-\let\bfmath\mathbf
\let\slmath\mathsl
\let\itmath\mathit
+
+\let\bfmath\mathbf
\let\bsmath\mathbs
\let\bimath\mathbi
diff --git a/tex/context/base/math-map.lua b/tex/context/base/math-map.lua
index bf02a4c9d..ec8b1ce8a 100644
--- a/tex/context/base/math-map.lua
+++ b/tex/context/base/math-map.lua
@@ -38,10 +38,14 @@ local mathematics = mathematics
-- following approach permits easier remapping of a-a, A-Z and 0-9 to
-- fallbacks; symbols is currently mostly greek
+local function todigit(n) local t = { } for i=0, 9 do t[0x00030+i] = n+i end return t end
+local function toupper(n) local t = { } for i=0,26 do t[0x00041+i] = n+i end return t end
+local function tolower(n) local t = { } for i=0,26 do t[0x00061+i] = n+i end return t end
+
local regular_tf = {
- digits = 0x00030,
- ucletters = 0x00041,
- lcletters = 0x00061,
+ digits = todigit(0x00030),
+ ucletters = toupper(0x00041),
+ lcletters = tolower(0x00061),
ucgreek = {
[0x0391]=0x0391, [0x0392]=0x0392, [0x0393]=0x0393, [0x0394]=0x0394, [0x0395]=0x0395,
[0x0396]=0x0396, [0x0397]=0x0397, [0x0398]=0x0398, [0x0399]=0x0399, [0x039A]=0x039A,
@@ -65,7 +69,7 @@ local regular_tf = {
local regular_it = {
digits = regular_tf.digits,
- ucletters = 0x1D434,
+ ucletters = toupper(0x1D434),
lcletters = { -- H
[0x00061]=0x1D44E, [0x00062]=0x1D44F, [0x00063]=0x1D450, [0x00064]=0x1D451, [0x00065]=0x1D452,
[0x00066]=0x1D453, [0x00067]=0x1D454, [0x00068]=0x0210E, [0x00069]=0x1D456, [0x0006A]=0x1D457,
@@ -96,9 +100,9 @@ local regular_it = {
}
local regular_bf= {
- digits = 0x1D7CE,
- ucletters = 0x1D400,
- lcletters = 0x1D41A,
+ digits = todigit(0x1D7CE),
+ ucletters = toupper(0x1D400),
+ lcletters = tolower(0x1D41A),
ucgreek = {
[0x0391]=0x1D6A8, [0x0392]=0x1D6A9, [0x0393]=0x1D6AA, [0x0394]=0x1D6AB, [0x0395]=0x1D6AC,
[0x0396]=0x1D6AD, [0x0397]=0x1D6AE, [0x0398]=0x1D6AF, [0x0399]=0x1D6B0, [0x039A]=0x1D6B1,
@@ -122,8 +126,8 @@ local regular_bf= {
local regular_bi = {
digits = regular_bf.digits,
- ucletters = 0x1D468,
- lcletters = 0x1D482,
+ ucletters = toupper(0x1D468),
+ lcletters = tolower(0x1D482),
ucgreek = {
[0x0391]=0x1D71C, [0x0392]=0x1D71D, [0x0393]=0x1D71E, [0x0394]=0x1D71F, [0x0395]=0x1D720,
[0x0396]=0x1D721, [0x0397]=0x1D722, [0x0398]=0x1D723, [0x0399]=0x1D724, [0x039A]=0x1D725,
@@ -153,9 +157,9 @@ local regular = {
}
local sansserif_tf = {
- digits = 0x1D7E2,
- ucletters = 0x1D5A0,
- lcletters = 0x1D5BA,
+ digits = todigit(0x1D7E2),
+ ucletters = toupper(0x1D5A0),
+ lcletters = tolower(0x1D5BA),
lcgreek = regular_tf.lcgreek,
ucgreek = regular_tf.ucgreek,
symbols = regular_tf.symbols,
@@ -163,17 +167,17 @@ local sansserif_tf = {
local sansserif_it = {
digits = regular_tf.digits,
- ucletters = 0x1D608,
- lcletters = 0x1D622,
+ ucletters = toupper(0x1D608),
+ lcletters = tolower(0x1D622),
lcgreek = regular_tf.lcgreek,
ucgreek = regular_tf.ucgreek,
symbols = regular_tf.symbols,
}
local sansserif_bf = {
- digits = 0x1D7EC,
- ucletters = 0x1D5D4,
- lcletters = 0x1D5EE,
+ digits = todigit(0x1D7EC),
+ ucletters = toupper(0x1D5D4),
+ lcletters = tolower(0x1D5EE),
ucgreek = {
[0x0391]=0x1D756, [0x0392]=0x1D757, [0x0393]=0x1D758, [0x0394]=0x1D759, [0x0395]=0x1D75A,
[0x0396]=0x1D75B, [0x0397]=0x1D75C, [0x0398]=0x1D75D, [0x0399]=0x1D75E, [0x039A]=0x1D75F,
@@ -197,8 +201,8 @@ local sansserif_bf = {
local sansserif_bi = {
digits = sansserif_bf.digits,
- ucletters = 0x1D63C,
- lcletters = 0x1D656,
+ ucletters = toupper(0x1D63C),
+ lcletters = tolower(0x1D656),
ucgreek = {
[0x0391]=0x1D790, [0x0392]=0x1D791, [0x0393]=0x1D792, [0x0394]=0x1D793, [0x0395]=0x1D794,
[0x0396]=0x1D795, [0x0397]=0x1D796, [0x0398]=0x1D797, [0x0399]=0x1D798, [0x039A]=0x1D799,
@@ -228,9 +232,9 @@ local sansserif = {
}
local monospaced_tf = {
- digits = 0x1D7F6,
- ucletters = 0x1D670,
- lcletters = 0x1D68A,
+ digits = todigit(0x1D7F6),
+ ucletters = toupper(0x1D670),
+ lcletters = tolower(0x1D68A),
lcgreek = sansserif_tf.lcgreek,
ucgreek = sansserif_tf.ucgreek,
symbols = sansserif_tf.symbols,
@@ -244,7 +248,7 @@ local monospaced = {
}
local blackboard_tf = {
- digits = 0x1D7D8,
+ digits = todigit(0x1D7D8),
ucletters = { -- C H N P Q R Z
[0x00041]=0x1D538, [0x00042]=0x1D539, [0x00043]=0x02102, [0x00044]=0x1D53B, [0x00045]=0x1D53C,
[0x00046]=0x1D53D, [0x00047]=0x1D53E, [0x00048]=0x0210D, [0x00049]=0x1D540, [0x0004A]=0x1D541,
@@ -253,7 +257,7 @@ local blackboard_tf = {
[0x00055]=0x1D54C, [0x00056]=0x1D54D, [0x00057]=0x1D54E, [0x00058]=0x1D54F, [0x00059]=0x1D550,
[0x0005A]=0x02124,
},
- lcletters = 0x1D552,
+ lcletters = tolower(0x1D552),
lcgreek = { -- gamma pi
[0x03B3]=0x0213C, [0x03C0]=0x0213D,
},
@@ -286,7 +290,7 @@ local fraktur_tf= {
[0x00055]=0x1D518, [0x00056]=0x1D519, [0x00057]=0x1D51A, [0x00058]=0x1D51B, [0x00059]=0x1D51C,
[0x0005A]=0x02128,
},
- lcletters = 0x1D51E,
+ lcletters = tolower(0x1D51E),
lcgreek = regular_tf.lcgreek,
ucgreek = regular_tf.ucgreek,
symbols = regular_tf.symbols,
@@ -294,8 +298,8 @@ local fraktur_tf= {
local fraktur_bf = {
digits = regular_bf.digits,
- ucletters = 0x1D56C,
- lcletters = 0x1D586,
+ ucletters = toupper(0x1D56C),
+ lcletters = tolower(0x1D586),
lcgreek = regular_bf.lcgreek,
ucgreek = regular_bf.ucgreek,
symbols = regular_bf.symbols,
@@ -308,7 +312,7 @@ local fraktur = { -- ok
bi = fraktur_bf,
}
-local script_tf= {
+local script_tf = {
digits = regular_tf.digits,
ucletters = { -- B E F H I L M R -- P 2118
[0x00041]=0x1D49C, [0x00042]=0x0212C, [0x00043]=0x1D49E, [0x00044]=0x1D49F, [0x00045]=0x02130,
@@ -333,8 +337,8 @@ local script_tf= {
local script_bf = {
digits = regular_bf.digits,
- ucletters = 0x1D4D0,
- lcletters = 0x1D4EA,
+ ucletters = toupper(0x1D4D0),
+ lcletters = tolower(0x1D4EA),
lcgreek = regular_bf.lcgreek,
ucgreek = regular_bf.ucgreek,
symbols = regular_bf.symbols,
@@ -358,6 +362,35 @@ local alphabets = allocate {
mathematics.alphabets = alphabets
+local boldmap = { }
+
+local function remap(tf,bf)
+ for _, alphabet in next, alphabets do
+ local tfdata = alphabet[tf]
+ local bfdata = alphabet[bf]
+ if tfdata then
+ for k, tfd in next, tfdata do
+ if type(tfd) == "table" then
+ local bfd = bfdata[k]
+ if bfd then
+ for n, u in next, tfd do
+ local bn = bfd[n]
+ if bn then
+ boldmap[u] = bn
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+remap("tf","bf")
+remap("it","bi")
+
+mathematics.boldmap = boldmap
+
local mathremap = { }
for alphabet, styles in next, alphabets do -- per 9/6/2011 we also have attr for missing
@@ -481,6 +514,7 @@ function mathematics.remapalphabets(char,mathalphabet,mathgreek)
end
end
end
+ -- table test can go away
if mathalphabet and mathalphabet > 0 then
local newchar
local offset = mathremap[mathalphabet]
diff --git a/tex/context/base/math-noa.lua b/tex/context/base/math-noa.lua
index 28965a09a..e7258b1ca 100644
--- a/tex/context/base/math-noa.lua
+++ b/tex/context/base/math-noa.lua
@@ -600,7 +600,7 @@ local alternate = { } -- processors.alternate = alternate
function mathematics.setalternate(fam,tag)
local id = font_of_family(fam)
local tfmdata = fontdata[id]
- local mathalternates = tfmdata.shared.mathalternates
+ local mathalternates = tfmdata.shared and tfmdata.shared.mathalternates
if mathalternates then
local m = mathalternates[tag]
tex.attribute[a_mathalternate] = m and m.attribute or attributes.unsetvalue
@@ -630,15 +630,28 @@ end
-- experiment (when not present fall back to fam 0)
-local families = { }
+-- 0-2 regular
+-- 3-5 bold
+-- 6-8 pseudobold
+local families = { }
local a_mathfamily = attributes.private("mathfamily")
+local boldmap = mathematics.boldmap
families[math_char] = function(pointer)
- if pointer.fam == 255 then
+ if pointer.fam == 0 then
local a = has_attribute(pointer,a_mathfamily)
if a and a > 0 then
set_attribute(pointer,a_mathfamily,0)
+ if a > 5 then
+ local char = pointer.char
+ local bold = boldmap[pointer.char]
+ if bold then
+ set_attribute(pointer,exportstatus,char)
+ pointer.char = bold
+ end
+ a = a - 3
+ end
pointer.fam = a
else
pointer.fam = 0
@@ -647,10 +660,14 @@ families[math_char] = function(pointer)
end
families[math_delim] = function(pointer)
- if pointer.small_fam == 255 then
+ if pointer.small_fam == 0 then
local a = has_attribute(pointer,a_mathfamily)
if a and a > 0 then
set_attribute(pointer,a_mathfamily,0)
+ if a > 5 then
+ -- no bold delimiters in unicode
+ a = a - 3
+ end
pointer.small_fam = a
pointer.large_fam = a
else
diff --git a/tex/context/base/meta-ini.mkiv b/tex/context/base/meta-ini.mkiv
index d435f5772..8dbbfca8a 100644
--- a/tex/context/base/meta-ini.mkiv
+++ b/tex/context/base/meta-ini.mkiv
@@ -912,7 +912,6 @@
\to \everyMPgraphic
\appendtoks % before color
- %\normalexpanded{\noexpand\definecolor[currentcolor][\currentcolorname]}%
\doregistercolor{currentcolor}\currentcolorname
\to \everyMPgraphic
@@ -922,10 +921,6 @@
% fill fullcircle scaled 1cm withcolor \MPcolor{red} ;
% \stopMPcode def}
-% \appendtoks
-% \doactivatecolor\s!black\forcecolorhack % we can also move this to the backend
-% \to \everyMPgraphic
-
\appendtoks
\baselineskip1\baselineskip
\lineheight 1\lineheight
diff --git a/tex/context/base/mlib-pps.mkiv b/tex/context/base/mlib-pps.mkiv
index 8dac53b74..a4b41072e 100644
--- a/tex/context/base/mlib-pps.mkiv
+++ b/tex/context/base/mlib-pps.mkiv
@@ -42,7 +42,7 @@
{\dowithnextbox{\ctxlua{metapost.settext(\number\nextbox,#1)}}\hbox}
\def\MPLIBgettextscaled#1#2#3% why a copy .. can be used more often
- {\ctxlua{metapost.gettext(\number\MPtextbox,#1)}% we need the colorhack or else the color backend does not sync
+ {\ctxlua{metapost.gettext(\number\MPtextbox,#1)}%
\vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[\c!sx=#2,\c!sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\forcecolorhack\hss}}}
\def\MPLIBgraphictext#1%
diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv
index aa0b535a1..fb331ed0e 100644
--- a/tex/context/base/mult-sys.mkiv
+++ b/tex/context/base/mult-sys.mkiv
@@ -133,6 +133,22 @@
\definesystemconstant {default}
\definesystemconstant {smallcaps}
+\definesystemconstant {regular}
+\definesystemconstant {script}
+\definesystemconstant {fraktur}
+\definesystemconstant {blackboard}
+
+\definesystemconstant {tf}
+\definesystemconstant {sl}
+\definesystemconstant {it}
+\definesystemconstant {bf}
+\definesystemconstant {bs}
+\definesystemconstant {bi}
+
+\definesystemconstant {rm}
+\definesystemconstant {ss}
+\definesystemconstant {tt}
+
%D As the name of their define command states, the next set of
%D constants is used in the message macro's.
diff --git a/tex/context/base/pack-obj.mkiv b/tex/context/base/pack-obj.mkiv
index a89e72207..5adfeae86 100644
--- a/tex/context/base/pack-obj.mkiv
+++ b/tex/context/base/pack-obj.mkiv
@@ -309,7 +309,6 @@
%\vss\box\scratchbox
\vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% fix Chof
\fi\fi}}%
-% \forcecolorhack % needed in order to use layers etc
\box\scratchbox
\endgroup}
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index c8e2f529a..c07331a8b 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -123,7 +123,6 @@
\edef\ovalrad{\the\dimexpr\framedparameter\c!frameradius}%
\let\ovalstr\!!plusone
\let\ovalfil\!!zerocount
-% \forcecolorhack
\doovalbox\ovalwid\ovalhei\ovaldep\ovallin\ovalrad\ovalstr\ovalfil\ovalmod
\egroup}
@@ -142,7 +141,6 @@
\edef\ovalrad{\the\dimexpr\framedparameter\c!backgroundradius\relax}%
\let\ovalstr\!!zerocount
\let\ovalfil\!!plusone
-% \forcecolorhack
\doovalbox\ovalwid\ovalhei\ovaldep\ovallin\ovalrad\ovalstr\ovalfil\ovalmod
\egroup}
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index d872011d3..af30bf52c 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 2b38edff7..5ce1d8d2f 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-des.mkiv b/tex/context/base/strc-des.mkiv
index f1ff7df69..aaec8de69 100644
--- a/tex/context/base/strc-des.mkiv
+++ b/tex/context/base/strc-des.mkiv
@@ -532,7 +532,7 @@
\begingroup
\currentdescriptionsynchronize
\attribute\destinationattribute\currentdescriptionattribute\relax % todo, whole text
- \forcecolorhack
+ \signalcharacter
\endgroup
\fi#1}
diff --git a/tex/context/base/strc-reg.mkiv b/tex/context/base/strc-reg.mkiv
index f99f49c40..0e391a0d7 100644
--- a/tex/context/base/strc-reg.mkiv
+++ b/tex/context/base/strc-reg.mkiv
@@ -270,7 +270,7 @@
\currentregistersynchronize % here?
% needs thinking ... bla\index{bla}. will break before the . but adding a
% penalty is also no solution
- \attribute\destinationattribute\lastdestinationattribute \forcecolorhack % no \strut as it will be removed during cleanup
+ \attribute\destinationattribute\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup
\endgroup}
\def\doregister[#1][#2]%
diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv
index f26ed8e7e..2b0e8ce70 100644
--- a/tex/context/base/strc-sec.mkiv
+++ b/tex/context/base/strc-sec.mkiv
@@ -101,7 +101,7 @@
\definemarking[\currenthead\v!number][\currentheadparent\c!number]%
}%
\doifelselist\currenthead\donothing
- {\definelist[\currenthead][\currentheadparent][\c!prefix=\v!no]}%
+ {\normalexpanded{\definelist[\currenthead][\currentheadparent][\c!prefix=\v!no]}}%
\fi
\presetlabeltext[\currenthead=]%
\the\everysetuphead
diff --git a/tex/context/base/type-lucidanova.mkiv b/tex/context/base/type-lucidanova.mkiv
index c59f560d9..2b2c2af0e 100644
--- a/tex/context/base/type-lucidanova.mkiv
+++ b/tex/context/base/type-lucidanova.mkiv
@@ -16,7 +16,8 @@
\starttypescriptcollection[lucidanova]
\starttypescript [\s!math] [lucidanova]
- \definefontsynonym [MathRoman] [\s!file:LucidaMath.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucidanova-math]
+ \definefontsynonym [MathRoman] [\s!file:LucidaMath.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucidanova-math]
+ \definefontsynonym [MathRomanBold] [\s!file:LucidaMath-Demi.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucidanova-math]
\stoptypescript
\starttypescript [\s!serif] [lucidanova]
@@ -38,10 +39,10 @@
\stoptypescript
\starttypescript [\s!mono] [lucidanova]
- \definefontsynonym [\s!Mono] [\s!file:LucidaSans-Typewriter.otf]
- \definefontsynonym [\s!MonoBold] [\s!file:LucidaSans-TypewriterBold.otf]
- \definefontsynonym [\s!MonoItalic] [\s!file:LucidaSans-TypewriterOblique.otf]
- \definefontsynonym [\s!MonoBoldItalic] [\s!file:LucidaSans-TypewriterBoldOblique.otf]
+ \definefontsynonym [\s!Mono] [\s!file:LucidaSansTypewriter.otf]
+ \definefontsynonym [\s!MonoBold] [\s!file:LucidaSansTypewriter-Bold.otf]
+ \definefontsynonym [\s!MonoItalic] [\s!file:LucidaSansTypewriter-Oblique.otf]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:LucidaSansTypewriter-BoldOblique.otf]
\definefontsynonym [\s!MonoSlanted] [\s!MonoItalic]
\definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic]
\stoptypescript
diff --git a/tex/context/base/type-otf.mkiv b/tex/context/base/type-otf.mkiv
index f2c9a6436..4138f69de 100644
--- a/tex/context/base/type-otf.mkiv
+++ b/tex/context/base/type-otf.mkiv
@@ -167,19 +167,21 @@
\definefontsynonym[LMMathRoman12-Regular][LMMath12-Regular@lmroman12-math]
\definefontsynonym[LMMathRoman17-Regular][LMMath17-Regular@lmroman17-math]
- \definefontsynonym[LMMathRoman5-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman6-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman7-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman8-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman9-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman10-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman12-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman17-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ % we no longer care to provide pseudo full bold
+
+ \definefontsynonym[LMMathRoman5-Bold] [LMMathRoman5-Regular]
+ \definefontsynonym[LMMathRoman6-Bold] [LMMathRoman6-Regular]
+ \definefontsynonym[LMMathRoman7-Bold] [LMMathRoman7-Regular]
+ \definefontsynonym[LMMathRoman8-Bold] [LMMathRoman8-Regular]
+ \definefontsynonym[LMMathRoman9-Bold] [LMMathRoman9-Regular]
+ \definefontsynonym[LMMathRoman10-Bold] [LMMathRoman10-Regular]
+ \definefontsynonym[LMMathRoman12-Bold] [LMMathRoman12-Regular]
+ \definefontsynonym[LMMathRoman17-Bold] [LMMathRoman17-Regular]
% overloads lmmath.otf usage
%
% \definefontsynonym[MathRoman][LMMath10-Regular@lmroman10-math]
- % \definefontsynonym[MathBold] [LMMath10-Bold@lmroman10-boldmath]
+ % \definefontsynonym[MathBold] [MathRoman]
\loadfontgoodies[lm-math]
\stoptypescript
@@ -374,8 +376,8 @@
\starttypescript [math] [modern,latin-modern,default]
% \loadfontgoodies[lm-math]
- \definefontsynonym [LMMathRoman-Regular] [\v!file:lmmath.otf] [\s!features=\s!math]
- % \definefontsynonym [LMMathRoman-Bold] [\v!file:lmmathbold.otf] [\s!features=\s!math]
+ \definefontsynonym [LMMathRoman-Regular] [\v!file:lmmath.otf] [\s!features=\s!math]
+ \definefontsynonym [LMMathRoman-Bold] [\v!file:lmmath.otf] [\s!features=\s!math]
\stoptypescript
\starttypescript [modern,default]
diff --git a/tex/context/base/type-siz.mkiv b/tex/context/base/type-siz.mkiv
index ec51bc77d..ed1aa6ed5 100644
--- a/tex/context/base/type-siz.mkiv
+++ b/tex/context/base/type-siz.mkiv
@@ -31,24 +31,12 @@
[tt] [default]
\stoptypescript
-\starttypescript [math,boldmath] [default] [size]
+\starttypescript [math] [default] [size]
\definebodyfont
[4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
[mm] [default]
\stoptypescript
-\starttypescript [bfmath] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [mm] [bfmath]
-\stoptypescript
-
-% \starttypescript [math] [bidi] [size]
-% \definebodyfont
-% [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
-% [mm] [bidi]
-% \stoptypescript
-
\starttypescript [handwriting] [default] [size]
\definebodyfont
[4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
@@ -166,7 +154,7 @@
[tt] [default]
\stoptypescript
-\starttypescript [math,boldmath] [dtp] [size]
+\starttypescript [math] [dtp] [size]
\definebodyfont
[5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
[mm] [default]
@@ -383,17 +371,19 @@
\starttypescript [math] [modern,computer-modern,latin-modern] [size]
- \definebodyfont [12pt] [mm] [mr=LMMathRoman12-Regular sa 1, mb=LMMathRoman12-Bold sa 1]
- \definebodyfont [11pt] [mm] [mr=LMMathRoman10-Regular sa 1, mb=LMMathRoman10-Bold sa 1]
- \definebodyfont [10pt] [mm] [mr=LMMathRoman10-Regular sa 1, mb=LMMathRoman10-Bold sa 1]
- \definebodyfont [9pt] [mm] [mr=LMMathRoman9-Regular sa 1, mb=LMMathRoman9-Bold sa 1]
- \definebodyfont [8pt] [mm] [mr=LMMathRoman8-Regular sa 1, mb=LMMathRoman8-Bold sa 1]
- \definebodyfont [7pt] [mm] [mr=LMMathRoman7-Regular sa 1, mb=LMMathRoman7-Bold sa 1]
- \definebodyfont [6pt] [mm] [mr=LMMathRoman6-Regular sa 1, mb=LMMathRoman6-Bold sa 1]
- \definebodyfont [5pt] [mm] [mr=LMMathRoman5-Regular sa 1, mb=LMMathRoman5-Bold sa 1]
- \definebodyfont [4pt] [mm] [mr=LMMathRoman5-Regular sa 1, mb=LMMathRoman5-Bold sa 1]
-
- \definebodyfont [14.4pt,17.3pt,20.7pt] [mm] [mr=LMMathRoman12-Regular sa 1, mb=LMMathRoman12-Bold sa 1]
+ \definebodyfont [12pt] [mm] [mr=LMMathRoman12-Regular sa 1,mb=LMMathRoman12-Regular sa 1]
+ \definebodyfont [11pt] [mm] [mr=LMMathRoman10-Regular sa 1,mb=LMMathRoman10-Regular sa 1]
+ \definebodyfont [10pt] [mm] [mr=LMMathRoman10-Regular sa 1,mb=LMMathRoman10-Regular sa 1]
+ \definebodyfont [9pt] [mm] [mr=LMMathRoman9-Regular sa 1,mb=LMMathRoman9-Regular sa 1]
+ \definebodyfont [8pt] [mm] [mr=LMMathRoman8-Regular sa 1,mb=LMMathRoman8-Regular sa 1]
+ \definebodyfont [7pt] [mm] [mr=LMMathRoman7-Regular sa 1,mb=LMMathRoman7-Regular sa 1]
+ \definebodyfont [6pt] [mm] [mr=LMMathRoman6-Regular sa 1,mb=LMMathRoman6-Regular sa 1]
+ \definebodyfont [5pt] [mm] [mr=LMMathRoman5-Regular sa 1,mb=LMMathRoman5-Regular sa 1]
+ \definebodyfont [4pt] [mm] [mr=LMMathRoman5-Regular sa 1,mb=LMMathRoman5-Regular sa 1]
+
+ \definebodyfont [14.4pt,17.3pt,20.7pt] [mm]
+ [mr=LMMathRoman12-Regular sa 1,
+ mb=LMMathRoman12-Regular sa 1]
\stoptypescript
diff --git a/tex/context/fonts/lm-math.lfg b/tex/context/fonts/lm-math.lfg
index 43de0c51e..07e8036e9 100644
--- a/tex/context/fonts/lm-math.lfg
+++ b/tex/context/fonts/lm-math.lfg
@@ -179,26 +179,6 @@ local ten = {
{ name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
}
-local ten_bold = {
- { name = "lmroman10-bold.otf", features = "virtualmath", main = true },
- { name = "rm-lmr10.tfm", vector = "tex-mr-missing" } ,
- { name = "lmmib10.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmmib10.tfm", vector = "tex-it", skewchar=0x7F },
- { name = "lmbsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
--- copied from roman:
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- { name = "stmary10.afm", vector = "tex-mc" },
- -- { name = "rm-lmbx10.tfm", vector = "tex-bf" } ,
- { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-}
-
-- rm-lmr12 : LMMathRoman12-Regular
-- rm-lmbx12 : LMMathRoman12-Bold
-- lmmi12 : LMMathItalic12-Italic
@@ -256,15 +236,14 @@ return {
"mkiv-base.map",
},
virtuals = {
- ["lmroman5-math"] = five,
- ["lmroman6-math"] = six,
- ["lmroman7-math"] = seven,
- ["lmroman8-math"] = eight,
- ["lmroman9-math"] = nine,
- ["lmroman10-math"] = ten,
- ["lmroman10-boldmath"] = ten_bold,
- ["lmroman12-math"] = twelve,
- ["lmroman17-math"] = seventeen,
+ ["lmroman5-math"] = five,
+ ["lmroman6-math"] = six,
+ ["lmroman7-math"] = seven,
+ ["lmroman8-math"] = eight,
+ ["lmroman9-math"] = nine,
+ ["lmroman10-math"] = ten,
+ ["lmroman12-math"] = twelve,
+ ["lmroman17-math"] = seventeen,
},
variables = {
joinrelfactor = 3, -- default anyway
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 2b3fc5fc7..f1d8adae4 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 : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 06/26/11 13:23:20
+-- merge date : 06/27/11 20:17:22
do -- begin closure to overcome local limits and interference
@@ -3290,9 +3290,10 @@ function constructors.scale(tfmdata,specification)
-- specification.textsize : natural (text)size
-- parameters.mathsize : 1=text 2=script 3=scriptscript >1000 enforced size (feature value other than yes)
--
- local mathsize = tonumber(specification.mathsize) or 0
- local textsize = tonumber(specification.textsize) or scaledpoints
- local forcedsize = tonumber(parameters.mathsize ) or 0
+ local mathsize = tonumber(specification.mathsize) or 0
+ local textsize = tonumber(specification.textsize) or scaledpoints
+ local forcedsize = tonumber(parameters.mathsize ) or 0
+ local extrafactor = tonumber(specification.factor ) or 1
if (mathsize == 2 or forcedsize == 2) and parameters.scriptpercentage then
scaledpoints = parameters.scriptpercentage * textsize / 100
elseif (mathsize == 3 or forcedsize == 3) and parameters.scriptscriptpercentage then
@@ -3451,6 +3452,11 @@ function constructors.scale(tfmdata,specification)
local scaledheight = defaultheight * vdelta
local scaleddepth = defaultdepth * vdelta
--
+ if trace_defining then
+ report_defining("scaling by (%s,%s): name '%s', fullname: '%s', filename: '%s'",
+ hdelta,vdelta,name or "noname",fullname or "nofullname",filename or "nofilename")
+ end
+ --
local hasmath = (properties.has_math or next(mathparameters)) and true
if hasmath then
if trace_defining then
@@ -11781,7 +11787,7 @@ function definers.registersplit(symbol,action,verbosename)
end
end
-function definers.makespecification(specification, lookup, name, sub, method, detail, size)
+function definers.makespecification(specification,lookup,name,sub,method,detail,size)
size = size or 655360
if trace_defining then
report_defining("%s -> lookup: %s, name: %s, sub: %s, method: %s, detail: %s",
@@ -12057,14 +12063,25 @@ function definers.read(specification,size,id) -- id can be optional, name can al
specification = definers.resolve(specification)
local hash = constructors.hashinstance(specification)
local tfmdata = definers.registered(hash) -- id
- if not tfmdata then
+ if tfmdata then
+ if trace_defining then
+ report_defining("already hashed: %s",hash)
+ end
+ else
tfmdata = definers.loadfont(specification) -- can be overloaded
if tfmdata then
---~ constructors.checkvirtualid(tfmdata) -- interferes
+ if trace_defining then
+ report_defining("loaded and hashed: %s",hash)
+ end
+ --~ constructors.checkvirtualid(tfmdata) -- interferes
tfmdata.properties.hash = hash
if id then
definers.register(tfmdata,id)
end
+ else
+ if trace_defining then
+ report_defining("not loaded and hashed: %s",hash)
+ end
end
end
lastdefined = tfmdata or id -- todo ! ! ! ! !
@@ -12074,7 +12091,7 @@ function definers.read(specification,size,id) -- id can be optional, name can al
local properties = tfmdata.properties or { }
local parameters = tfmdata.parameters or { }
report_defining("using %s font with id %s, name:%s size:%s bytes:%s encoding:%s fullname:%s filename:%s",
- properties.type or "unknown",
+ properties.format or "unknown",
id or "?",
properties.name or "?",
parameters.size or "default",