summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/font-aux.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/font-aux.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/font-aux.lua145
1 files changed, 103 insertions, 42 deletions
diff --git a/Master/texmf-dist/tex/context/base/font-aux.lua b/Master/texmf-dist/tex/context/base/font-aux.lua
index 0396554adec..2a605d224c9 100644
--- a/Master/texmf-dist/tex/context/base/font-aux.lua
+++ b/Master/texmf-dist/tex/context/base/font-aux.lua
@@ -6,8 +6,8 @@ if not modules then modules = { } end modules ['font-aux'] = {
license = "see context related readme files"
}
-local number = tonumber
-local wrap, yield = coroutine.wrap, coroutine.yield
+local tonumber, type = tonumber, type
+----- wrap, yield = coroutine.wrap, coroutine.yield
local fonts, font = fonts, font
@@ -18,9 +18,11 @@ local currentfont = font.current
local identifiers = fonts.hashes.identifiers
local sortedkeys = table.sortedkeys
--- for unicode, character in fonts.iterators.characters () do print(k,v) end
--- for unicode, description in fonts.iterators.descriptions() do print(k,v) end
--- for index, glyph in fonts.iterators.glyphs () do print(k,v) end
+-- for unicode, character in fonts.iterators.characters () do print(unicode) end
+-- for unicode, description in fonts.iterators.descriptions() do print(unicode) end
+-- for index, glyph in fonts.iterators.glyphs () do print(index ) end
+
+local function dummy() end
local function checkeddata(data) -- beware, nullfont is the fallback in identifiers
local t = type(data)
@@ -32,22 +34,93 @@ local function checkeddata(data) -- beware, nullfont is the fallback in identifi
return identifiers[data] -- has nullfont as fallback
end
+local function getindices(data)
+ data = checkeddata(data)
+ local indices = { }
+ local characters = data.characters
+ if characters then
+ for unicode, character in next, characters do
+ indices[character.index or unicode] = unicode
+ end
+ end
+ return indices
+end
+
+-- function iterators.characters(data)
+-- data = checkeddata(data)
+-- local characters = data.characters
+-- if characters then
+-- local collected = sortedkeys(characters)
+-- return wrap(function()
+-- for c=1,#collected do
+-- local cc = collected[c]
+-- local dc = characters[cc]
+-- if dc then
+-- yield(cc,dc)
+-- end
+-- end
+-- end)
+-- else
+-- return wrap(function() end)
+-- end
+-- end
+
+-- function iterators.descriptions(data)
+-- data = checkeddata(data)
+-- local characters = data.characters
+-- local descriptions = data.descriptions
+-- if characters and descriptions then
+-- local collected = sortedkeys(characters)
+-- return wrap(function()
+-- for c=1,#collected do
+-- local cc = collected[c]
+-- local dc = descriptions[cc]
+-- if dc then
+-- yield(cc,dc)
+-- end
+-- end
+-- end)
+-- else
+-- return wrap(function() end)
+-- end
+-- end
+
+-- function iterators.glyphs(data)
+-- data = checkeddata(data)
+-- local descriptions = data.descriptions
+-- if descriptions then
+-- local indices = getindices(data)
+-- local collected = sortedkeys(indices)
+-- return wrap(function()
+-- for c=1,#collected do
+-- local cc = collected[c]
+-- local dc = descriptions[indices[cc]]
+-- if dc then
+-- yield(cc,dc)
+-- end
+-- end
+-- end)
+-- else
+-- return wrap(function() end)
+-- end
+-- end
+
function iterators.characters(data)
data = checkeddata(data)
local characters = data.characters
if characters then
- local collected = sortedkeys(characters)
- return wrap(function()
- for c=1,#collected do
- local cc = collected[c]
+ local collected = sortedkeys(characters)
+ local n, i = #collected, 0
+ return function()
+ i = i + 1
+ if i <= n then
+ local cc = collected[i]
local dc = characters[cc]
- if dc then
- yield(cc,dc)
- end
+ return cc, dc or { }
end
- end)
+ end
else
- return wrap(function() end)
+ return dummy
end
end
@@ -57,30 +130,18 @@ function iterators.descriptions(data)
local descriptions = data.descriptions
if characters and descriptions then
local collected = sortedkeys(characters)
- return wrap(function()
- for c=1,#collected do
- local cc = collected[c]
+ local n, i = #collected, 0
+ return function()
+ i = i + 1
+ if i <= n then
+ local cc = collected[i]
local dc = descriptions[cc]
- if dc then
- yield(cc,dc)
- end
+ return cc, dc or { }
end
- end)
- else
- return wrap(function() end)
- end
-end
-
-local function getindices(data)
- data = checkeddata(data)
- local indices = { }
- local characters = data.characters
- if characters then
- for unicode, character in next, characters do
- indices[character.index or unicode] = unicode
end
+ else
+ return dummy
end
- return indices
end
function iterators.glyphs(data)
@@ -89,16 +150,16 @@ function iterators.glyphs(data)
if descriptions then
local indices = getindices(data)
local collected = sortedkeys(indices)
- return wrap(function()
- for c=1,#collected do
- local cc = collected[c]
+ local n, i = #collected, 0
+ return function()
+ i = i + 1
+ if i <= n then
+ local cc = collected[i]
local dc = descriptions[indices[cc]]
- if dc then
- yield(cc,dc)
- end
+ return cc, dc or { }
end
- end)
+ end
else
- return wrap(function() end)
+ return dummy
end
end