summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2010-05-23 15:03:00 +0200
committerHans Hagen <pragma@wxs.nl>2010-05-23 15:03:00 +0200
commit882238ac1ea6d9563ea4e1add879f82ee8e6d9d0 (patch)
treedc208fdf4e21e347c25f7ba55b6e29a4fca013b1
parent767a0960d500d3e291c9e93f6737375275da564e (diff)
downloadcontext-882238ac1ea6d9563ea4e1add879f82ee8e6d9d0.tar.gz
beta 2010.05.23 15:03
-rw-r--r--tex/context/base/cont-new.tex2
-rw-r--r--tex/context/base/context.tex2
-rw-r--r--tex/context/base/font-afm.lua5
-rw-r--r--tex/context/base/font-ctx.lua57
-rw-r--r--tex/context/base/font-ini.lua60
-rw-r--r--tex/context/base/font-ini.mkiv2
-rw-r--r--tex/context/base/font-otf.lua12
-rw-r--r--tex/context/base/strc-bkm.lua12
-rw-r--r--tex/context/base/strc-lst.lua14
-rw-r--r--tex/context/base/tabl-tab.mkiv37
-rw-r--r--tex/generic/context/luatex-fonts-merged.lua72
11 files changed, 149 insertions, 126 deletions
diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex
index 974ec917d..65318a8ce 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.05.22 12:06}
+\newcontextversion{2010.05.23 15:03}
%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 1d4891f20..09404ab48 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.05.22 12:06}
+\edef\contextversion{2010.05.23 15:03}
%D For those who want to use this:
diff --git a/tex/context/base/font-afm.lua b/tex/context/base/font-afm.lua
index a6891826d..6aa3ef45a 100644
--- a/tex/context/base/font-afm.lua
+++ b/tex/context/base/font-afm.lua
@@ -456,6 +456,9 @@ function afm.add_dimensions(data) -- we need to normalize afm to otf i.e. indexe
end
end
+fonts.formats.afm = "type1"
+fonts.formats.pfb = "type1"
+
function afm.copy_to_tfm(data)
if data then
local glyphs = data.glyphs
@@ -482,7 +485,7 @@ function afm.copy_to_tfm(data)
tfm.fullname = metadata.fullname or metadata.fontname
tfm.psname = tfm.fullname -- in otf: tfm.fontname or tfm.fullname
tfm.name = tfm.filename or tfm.fullname or tfm.fontname
- tfm.format = 'type1'
+ tfm.format = fonts.fontformat(tfm.filename,"type1")
tfm.type = 'real'
tfm.units = 1000
tfm.direction = 0
diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua
index 50283fccb..76e9f095a 100644
--- a/tex/context/base/font-ctx.lua
+++ b/tex/context/base/font-ctx.lua
@@ -560,10 +560,65 @@ function fonts.char(n) -- todo: afm en tfm
end
end
--- thsi will become obsolete:
+-- moved from ini:
+
+fonts.color = { } -- dummy in ini
+
+local attribute = attributes.private('color')
+local mapping = (attributes and attributes.list[attribute]) or { }
+
+local set_attribute = node.set_attribute
+local unset_attribute = node.unset_attribute
+
+function fonts.color.set(n,c)
+ local mc = mapping[c]
+ if not mc then
+ unset_attribute(n,attribute)
+ else
+ set_attribute(n,attribute,mc)
+ end
+end
+
+function fonts.color.reset(n)
+ unset_attribute(n,attribute)
+end
+
+-- this will become obsolete:
fonts.otf.name_to_slot = name_to_slot
fonts.afm.name_to_slot = name_to_slot
fonts.otf.char = fonts.char
fonts.afm.char = fonts.char
+
+-- this will change ...
+
+function fonts.show_char_data(n)
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata then
+ if type(n) == "string" then
+ n = utf.byte(n)
+ end
+ local chr = tfmdata.characters[n]
+ if chr then
+ write_nl(format("%s @ %s => U%04X => %s => ",tfmdata.fullname,tfmdata.size,n,utf.char(n)) .. serialize(chr,false))
+ end
+ end
+end
+
+function fonts.show_font_parameters()
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata then
+ local parameters, mathconstants = tfmdata.parameters, tfmdata.MathConstants
+ local hasparameters, hasmathconstants = parameters and next(parameters), mathconstants and next(mathconstants)
+ if hasparameters then
+ write_nl(format("%s @ %s => parameters => ",tfmdata.fullname,tfmdata.size) .. serialize(parameters,false))
+ end
+ if hasmathconstants then
+ write_nl(format("%s @ %s => math constants => ",tfmdata.fullname,tfmdata.size) .. serialize(mathconstants,false))
+ end
+ if not hasparameters and not hasmathconstants then
+ write_nl(format("%s @ %s => no parameters and/or mathconstants",tfmdata.fullname,tfmdata.size))
+ end
+ end
+end
diff --git a/tex/context/base/font-ini.lua b/tex/context/base/font-ini.lua
index b9988687d..e45149781 100644
--- a/tex/context/base/font-ini.lua
+++ b/tex/context/base/font-ini.lua
@@ -70,54 +70,26 @@ fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
-- tracing
-fonts.color = fonts.color or { }
+if not fonts.color then
-local attribute = attributes.private('color')
-local mapping = (attributes and attributes.list[attribute]) or { }
+ fonts.color = {
+ set = function() end,
+ reset = function() end,
+ }
-local set_attribute = node.set_attribute
-local unset_attribute = node.unset_attribute
-
-function fonts.color.set(n,c)
- local mc = mapping[c]
- if not mc then
- unset_attribute(n,attribute)
- else
- set_attribute(n,attribute,mc)
- end
-end
-function fonts.color.reset(n)
- unset_attribute(n,attribute)
end
--- this will change ...
-
-function fonts.show_char_data(n)
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- if type(n) == "string" then
- n = utf.byte(n)
- end
- local chr = tfmdata.characters[n]
- if chr then
- write_nl(format("%s @ %s => U%04X => %s => ",tfmdata.fullname,tfmdata.size,n,utf.char(n)) .. serialize(chr,false))
- end
- end
-end
+-- format identification
-function fonts.show_font_parameters()
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- local parameters, mathconstants = tfmdata.parameters, tfmdata.MathConstants
- local hasparameters, hasmathconstants = parameters and next(parameters), mathconstants and next(mathconstants)
- if hasparameters then
- write_nl(format("%s @ %s => parameters => ",tfmdata.fullname,tfmdata.size) .. serialize(parameters,false))
- end
- if hasmathconstants then
- write_nl(format("%s @ %s => math constants => ",tfmdata.fullname,tfmdata.size) .. serialize(mathconstants,false))
- end
- if not hasparameters and not hasmathconstants then
- write_nl(format("%s @ %s => no parameters and/or mathconstants",tfmdata.fullname,tfmdata.size))
- end
+fonts.formats = { }
+
+function fonts.fontformat(filename,default)
+ local extname = file.extname(filename)
+ local format = fonts.formats[extname]
+ if format then
+ return format
+ else
+ logs.report("fonts define","unable to detemine font format for '%s'",filename)
+ return default
end
end
diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv
index b5cae7b8b..2eb790d5e 100644
--- a/tex/context/base/font-ini.mkiv
+++ b/tex/context/base/font-ini.mkiv
@@ -1434,7 +1434,7 @@
% this one already catches both define/setup
-\unexpanded\def\setupbodyfontenvironment{\definebodyfontenvironment}
+\let\setupbodyfontenvironment\definebodyfontenvironment
%D Just a couple of interface macros:
diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua
index 2ccdc4598..d68137c96 100644
--- a/tex/context/base/font-otf.lua
+++ b/tex/context/base/font-otf.lua
@@ -576,7 +576,10 @@ end
otf.enhancers["merge cid fonts"] = function(data,filename)
-- we can also move the names to data.luatex.names which might
-- save us some more memory (at the cost of harder tracing)
- if data.subfonts and data.glyphs and next(data.glyphs) then
+ if data.subfonts then
+ if data.glyphs and next(data.glyphs) then
+ logs.report("load otf","replacing existing glyph table due to subfonts")
+ end
local cidinfo = data.cidinfo
local verbose = fonts.verbose
if cidinfo.registry then
@@ -1490,6 +1493,11 @@ end
-- we cannot share descriptions as virtual fonts might extend them (ok, we could
-- use a cache with a hash
+fonts.formats.dfont = "truetype"
+fonts.formats.ttc = "truetype"
+fonts.formats.ttf = "truetype"
+fonts.formats.otf = "opentype"
+
function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder the tma to unicode (nasty due to one->many)
if data then
local glyphs, pfminfo, metadata = data.glyphs or { }, data.pfminfo or { }, data.metadata or { }
@@ -1570,7 +1578,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
tfm.name = tfm.filename or tfm.fullname or tfm.fontname
tfm.units = metadata.units_per_em or 1000
tfm.encodingbytes = 2
- tfm.format = (metadata.order2 == 1 and 'truetype') or 'opentype'
+ tfm.format = fonts.fontformat(tfm.filename,"opentype")
tfm.cidinfo = data.cidinfo
tfm.cidinfo.registry = tfm.cidinfo.registry or ""
tfm.type = "real"
diff --git a/tex/context/base/strc-bkm.lua b/tex/context/base/strc-bkm.lua
index e25f55fa8..f34d83ec5 100644
--- a/tex/context/base/strc-bkm.lua
+++ b/tex/context/base/strc-bkm.lua
@@ -77,11 +77,13 @@ function bookmarks.place()
local structural = levelmap[name]
lastlevel = structural or lastlevel
local title = titledata.bookmark
- if (not title or title == "") and not structural then
- -- placeholder, todo: bookmarklabel
- title = name .. ": " .. (titledata.title or "?")
- else
- title = titledata.title or "?"
+ if not title or title == "" then
+ if not structural then
+ -- placeholder, todo: bookmarklabel
+ title = name .. ": " .. (titledata.title or "?")
+ else
+ title = titledata.title or "?"
+ end
end
levels[#levels+1] = {
lastlevel,
diff --git a/tex/context/base/strc-lst.lua b/tex/context/base/strc-lst.lua
index 2ef789f2c..fefbe52ce 100644
--- a/tex/context/base/strc-lst.lua
+++ b/tex/context/base/strc-lst.lua
@@ -338,12 +338,14 @@ function lists.analyze(...)
lists.result = lists.filter(...)
end
-function lists.userdata(name,r,tag) -- to tex
- local str = lists.result[r]
- str = str and str.userdata
- str = str and str[tag]
- if str then
- texsprint(ctxcatcodes,str)
+function lists.userdata(name,r,tag) -- to tex (todo: xml)
+ local result = lists.result[r]
+ if result then
+ local userdata, metadata = result.userdata, result.metadata
+ local str = userdata and userdata[tag]
+ if str then
+ texsprint(metadata and metadata.catcodes or ctxcatcodes,str)
+ end
end
end
diff --git a/tex/context/base/tabl-tab.mkiv b/tex/context/base/tabl-tab.mkiv
index 72234eac8..d926dab98 100644
--- a/tex/context/base/tabl-tab.mkiv
+++ b/tex/context/base/tabl-tab.mkiv
@@ -982,6 +982,7 @@
\unexpanded\def\starttable
{\bgroup
+ \let\stoptable\dostoptable
\doif\@@tisplit\v!auto
{\ifinsidesplitfloat\let\@@tisplit\v!yes\fi}%
\doifinsetelse\@@tisplit{\v!yes,\v!repeat}
@@ -993,7 +994,12 @@
\postponenotes
\firststagestartTABLE}}
-\unexpanded\def\stoptable
+% We cannot define \unexpanded\def\dostoptable a ssomehow lookahead
+% in alignments fail then, so we relax it and define it locally.
+
+\let\stoptabel\relax
+
+\def\dostoptable
{\chuckTABLEautorow % before the tail, else noalign problem
\insertTABLEtail
\TABLEnoalign{\globalletempty\@@TABLEhead}%
@@ -1210,6 +1216,7 @@
\unexpanded\def\starttables
{\bgroup
+ \let\stoptables\dostoptables
\splittablestrue
\doifelse\@@tisplit\v!repeat
{\settrue \tablerepeathead\settrue \tablerepeattail}
@@ -1220,23 +1227,17 @@
\global\TABLEinbreakfalse
\firststagestartTABLE}
-% \unexpanded\def\stoptables
-% {\ifconditional\tablerepeattail\else\insertTABLEtail\fi
-% \finishTABLE
-% \egroup
-% \dosplittablebox\tablecontentbox
-% \flushnotes
-% \egroup}
-
-\unexpanded\def\stoptables
- {\chuckTABLEautorow % AM: before the tail, else noalign problem
- \ifconditional\tablerepeattail\else\insertTABLEtail\fi
- \finishTABLE
- \egroup
-\dontcomplain
- \dosplittablebox\tablecontentbox
- \flushnotes
- \egroup}
+\let\stoptables\relax % needed for \noalign
+
+\def\dostoptables
+ {\chuckTABLEautorow % AM: before the tail, else noalign problem
+ \ifconditional\tablerepeattail\else\insertTABLEtail\fi
+ \finishTABLE
+ \egroup
+ \dontcomplain
+ \dosplittablebox\tablecontentbox
+ \flushnotes
+ \egroup}
\newdimen\TABLEcaptionheight % obsolete
diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua
index 333668aec..c6a88f6b5 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 : 05/22/10 12:06:27
+-- merge date : 05/23/10 15:03:42
do -- begin closure to overcome local limits and interference
@@ -3588,55 +3588,27 @@ fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
-- tracing
-fonts.color = fonts.color or { }
+if not fonts.color then
-local attribute = attributes.private('color')
-local mapping = (attributes and attributes.list[attribute]) or { }
-
-local set_attribute = node.set_attribute
-local unset_attribute = node.unset_attribute
+ fonts.color = {
+ set = function() end,
+ reset = function() end,
+ }
-function fonts.color.set(n,c)
- local mc = mapping[c]
- if not mc then
- unset_attribute(n,attribute)
- else
- set_attribute(n,attribute,mc)
- end
-end
-function fonts.color.reset(n)
- unset_attribute(n,attribute)
end
--- this will change ...
+-- format identification
-function fonts.show_char_data(n)
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- if type(n) == "string" then
- n = utf.byte(n)
- end
- local chr = tfmdata.characters[n]
- if chr then
- write_nl(format("%s @ %s => U%04X => %s => ",tfmdata.fullname,tfmdata.size,n,utf.char(n)) .. serialize(chr,false))
- end
- end
-end
+fonts.formats = { }
-function fonts.show_font_parameters()
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- local parameters, mathconstants = tfmdata.parameters, tfmdata.MathConstants
- local hasparameters, hasmathconstants = parameters and next(parameters), mathconstants and next(mathconstants)
- if hasparameters then
- write_nl(format("%s @ %s => parameters => ",tfmdata.fullname,tfmdata.size) .. serialize(parameters,false))
- end
- if hasmathconstants then
- write_nl(format("%s @ %s => math constants => ",tfmdata.fullname,tfmdata.size) .. serialize(mathconstants,false))
- end
- if not hasparameters and not hasmathconstants then
- write_nl(format("%s @ %s => no parameters and/or mathconstants",tfmdata.fullname,tfmdata.size))
- end
+function fonts.fontformat(filename,default)
+ local extname = file.extname(filename)
+ local format = fonts.formats[extname]
+ if format then
+ return format
+ else
+ logs.report("fonts define","unable to detemine font format for '%s'",filename)
+ return default
end
end
@@ -6451,7 +6423,10 @@ end
otf.enhancers["merge cid fonts"] = function(data,filename)
-- we can also move the names to data.luatex.names which might
-- save us some more memory (at the cost of harder tracing)
- if data.subfonts and data.glyphs and next(data.glyphs) then
+ if data.subfonts then
+ if data.glyphs and next(data.glyphs) then
+ logs.report("load otf","replacing existing glyph table due to subfonts")
+ end
local cidinfo = data.cidinfo
local verbose = fonts.verbose
if cidinfo.registry then
@@ -7365,6 +7340,11 @@ end
-- we cannot share descriptions as virtual fonts might extend them (ok, we could
-- use a cache with a hash
+fonts.formats.dfont = "truetype"
+fonts.formats.ttc = "truetype"
+fonts.formats.ttf = "truetype"
+fonts.formats.otf = "opentype"
+
function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder the tma to unicode (nasty due to one->many)
if data then
local glyphs, pfminfo, metadata = data.glyphs or { }, data.pfminfo or { }, data.metadata or { }
@@ -7445,7 +7425,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
tfm.name = tfm.filename or tfm.fullname or tfm.fontname
tfm.units = metadata.units_per_em or 1000
tfm.encodingbytes = 2
- tfm.format = (metadata.order2 == 1 and 'truetype') or 'opentype'
+ tfm.format = fonts.fontformat(tfm.filename,"opentype")
tfm.cidinfo = data.cidinfo
tfm.cidinfo.registry = tfm.cidinfo.registry or ""
tfm.type = "real"