From e4c575ea1e6cb242b3b8441eb4febc0e469412f2 Mon Sep 17 00:00:00 2001
From: Hans Hagen
Date: Mon, 10 Mar 2008 23:20:00 +0100
Subject: stable 2008.03.10 23:20
---
metapost/context/base/mp-tool.mp | 5 +-
scripts/context/lua/luatools.lua | 876 ++++++++++----------
scripts/context/lua/mtx-check.lua | 138 ++++
scripts/context/lua/mtx-context.lua | 20 +-
scripts/context/lua/mtx-update.lua | 392 +++++----
scripts/context/lua/mtx-watch.lua | 194 ++---
scripts/context/lua/mtxrun.lua | 665 ++++++++++-----
scripts/context/ruby/ctxtools.rb | 50 +-
tex/context/base/attr-ini.lua | 127 ++-
tex/context/base/attr-ini.tex | 4 -
tex/context/base/char-cmp.lua | 9 +-
tex/context/base/char-def.lua | 594 +++++++-------
tex/context/base/char-ini.lua | 76 +-
tex/context/base/cont-new.mkiv | 6 +
tex/context/base/cont-sys.ori | 1 +
tex/context/base/context-characters.lmx | 104 +++
tex/context/base/context-debug.lmx | 28 +-
tex/context/base/context-error.lmx | 4 +-
tex/context/base/context.tex | 3 +-
tex/context/base/core-buf.lua | 4 +
tex/context/base/core-fig.tex | 1348 +------------------------------
tex/context/base/core-inc.lua | 819 +++++++++++++++++++
tex/context/base/core-inc.mkii | 1326 ++++++++++++++++++++++++++++++
tex/context/base/core-inc.mkiv | 399 +++++++++
tex/context/base/core-inc.tex | 18 +
tex/context/base/core-job.lua | 137 +++-
tex/context/base/core-job.mkiv | 6 +
tex/context/base/core-mat.tex | 9 +-
tex/context/base/core-ntb.tex | 29 +-
tex/context/base/core-reg.mkii | 4 +-
tex/context/base/core-reg.mkiv | 6 +-
tex/context/base/core-reg.tex | 55 +-
tex/context/base/core-rul.tex | 10 +-
tex/context/base/core-spa.lua | 25 +-
tex/context/base/core-spa.tex | 4 +-
tex/context/base/core-tsp.tex | 17 +-
tex/context/base/core-two.mkii | 24 +-
tex/context/base/core-two.mkiv | 13 +-
tex/context/base/core-two.tex | 1 +
tex/context/base/core-uti.tex | 1 +
tex/context/base/enco-utf.tex | 8 +-
tex/context/base/font-afm.lua | 47 +-
tex/context/base/font-def.lua | 13 +-
tex/context/base/font-enc.lua | 70 +-
tex/context/base/font-ext.lua | 225 ++++++
tex/context/base/font-fbk.lua | 173 +---
tex/context/base/font-ini.mkiv | 10 +-
tex/context/base/font-otf.lua | 994 ++++++++++++++---------
tex/context/base/font-run.tex | 7 +-
tex/context/base/font-syn.lua | 4 +-
tex/context/base/font-tfm.lua | 115 +--
tex/context/base/hand-ini.mkii | 698 ++++++++++++++++
tex/context/base/hand-ini.mkiv | 50 ++
tex/context/base/hand-ini.tex | 688 +---------------
tex/context/base/l-aux.lua | 15 +
tex/context/base/l-file.lua | 42 +-
tex/context/base/l-io.lua | 28 -
tex/context/base/l-lpeg.lua | 1 -
tex/context/base/l-os.lua | 27 +-
tex/context/base/l-string.lua | 25 +
tex/context/base/l-table.lua | 27 +-
tex/context/base/l-url.lua | 36 +-
tex/context/base/l-xml.lua | 79 +-
tex/context/base/luat-crl.lua | 7 +-
tex/context/base/luat-deb.lua | 74 +-
tex/context/base/luat-deb.tex | 4 +-
tex/context/base/luat-env.lua | 187 +++--
tex/context/base/luat-env.tex | 46 +-
tex/context/base/luat-ini.lua | 2 +-
tex/context/base/luat-inp.lua | 196 ++---
tex/context/base/luat-lib.lua | 12 +-
tex/context/base/luat-lmx.lua | 6 +-
tex/context/base/luat-sta.lua | 183 +++++
tex/context/base/luat-tex.lua | 119 +--
tex/context/base/luat-tmp.lua | 2 +-
tex/context/base/luat-tre.lua | 45 ++
tex/context/base/luat-zip.lua | 259 +++---
tex/context/base/lxml-ini.lua | 63 +-
tex/context/base/lxml-ini.tex | 15 +-
tex/context/base/math-ini.lua | 25 +-
tex/context/base/meta-pdf.lua | 248 +++---
tex/context/base/mult-con.tex | 224 ++---
tex/context/base/mult-ini.lua | 56 ++
tex/context/base/mult-ini.mkii | 131 +++
tex/context/base/mult-ini.mkiv | 41 +
tex/context/base/mult-ini.tex | 307 +++----
tex/context/base/mult-sys.tex | 5 +-
tex/context/base/node-ini.lua | 193 ++++-
tex/context/base/node-ini.tex | 10 +
tex/context/base/page-flt.tex | 33 +-
tex/context/base/page-ini.tex | 2 +-
tex/context/base/page-num.tex | 2 +-
tex/context/base/page-one.tex | 3 +
tex/context/base/prop-ini.tex | 14 -
tex/context/base/prop-mis.tex | 18 +-
tex/context/base/s-abr-01.tex | 1 +
tex/context/base/s-pre-64.tex | 4 +-
tex/context/base/spec-fdf.tex | 4 +-
tex/context/base/syst-ext.tex | 50 +-
tex/context/base/syst-new.tex | 4 +-
tex/context/base/syst-xtx.tex | 4 +
tex/context/base/toks-ini.tex | 12 +-
tex/context/base/type-gyr.tex | 25 +-
tex/context/base/type-ini.tex | 12 +-
tex/context/base/type-one.tex | 1 -
tex/context/base/type-otf.tex | 2 +-
tex/context/base/x-cals.mkiv | 8 +-
tex/context/base/x-fig-00.tex | 144 ++--
tex/context/base/x-mmp.mkiv | 4 +-
tex/context/base/x-res-04.tex | 96 +--
tex/context/base/x-set-11.tex | 4 +-
tex/context/interface/keys-cz.xml | 3 +-
tex/context/interface/keys-de.xml | 3 +-
tex/context/interface/keys-en.xml | 3 +-
tex/context/interface/keys-fr.xml | 3 +-
tex/context/interface/keys-it.xml | 3 +-
tex/context/interface/keys-nl.xml | 3 +-
tex/context/interface/keys-ro.xml | 3 +-
tex/context/patterns/lang-agr.pat | 986 ++++++++++++++++++++--
tex/context/sample/montgomery.tex | 13 +
tex/context/sample/sample.tex | 7 +-
tex/context/test/x-cals-test.xml | 124 +++
tex/context/user/cont-sys.rme | 1 +
123 files changed, 9519 insertions(+), 5473 deletions(-)
create mode 100644 scripts/context/lua/mtx-check.lua
create mode 100644 tex/context/base/context-characters.lmx
create mode 100644 tex/context/base/core-inc.lua
create mode 100644 tex/context/base/core-inc.mkii
create mode 100644 tex/context/base/core-inc.mkiv
create mode 100644 tex/context/base/core-inc.tex
create mode 100644 tex/context/base/font-ext.lua
create mode 100644 tex/context/base/hand-ini.mkii
create mode 100644 tex/context/base/hand-ini.mkiv
create mode 100644 tex/context/base/luat-sta.lua
create mode 100644 tex/context/base/luat-tre.lua
create mode 100644 tex/context/base/mult-ini.lua
create mode 100644 tex/context/base/mult-ini.mkii
create mode 100644 tex/context/base/mult-ini.mkiv
create mode 100644 tex/context/sample/montgomery.tex
diff --git a/metapost/context/base/mp-tool.mp b/metapost/context/base/mp-tool.mp
index a98f73922..567ff16fd 100644
--- a/metapost/context/base/mp-tool.mp
+++ b/metapost/context/base/mp-tool.mp
@@ -2220,9 +2220,10 @@ enddef ;
% handy for myself
def addbackground text t =
- begingroup ; save p ; picture p ;
+ begingroup ; save p, b ; picture p ; path b ;
+ b := boundingbox currentpicture ;
p := currentpicture ; currentpicture := nullpicture ;
- fill boundingbox p t ; addto currentpicture also p ;
+ fill b t ; setbounds currentpicture to b ; addto currentpicture also p ;
endgroup ;
enddef ;
diff --git a/scripts/context/lua/luatools.lua b/scripts/context/lua/luatools.lua
index b6a158f6e..24e3bda9d 100644
--- a/scripts/context/lua/luatools.lua
+++ b/scripts/context/lua/luatools.lua
@@ -363,6 +363,31 @@ function string:split_settings() -- no {} handling, see l-aux for lpeg variant
end
end
+local patterns_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["+"] = "%+",
+ ["*"] = "%*",
+ ["%"] = "%%",
+ ["("] = "%)",
+ [")"] = "%)",
+ ["["] = "%[",
+ ["]"] = "%]",
+}
+
+
+function string:pattesc()
+ return (self:gsub(".",patterns_escapes))
+end
+
+function string:tohash()
+ local t = { }
+ for s in self:gmatch("([^, ]+)") do -- lpeg
+ t[s] = true
+ end
+ return t
+end
+
-- filename : l-lpeg.lua
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -406,7 +431,6 @@ end
-
-- filename : l-table.lua
-- comment : split off from luat-lib
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -488,7 +512,8 @@ end
--~ return t
--~ end
-function table.merge(t, ...)
+function table.merge(t, ...) -- first one is target
+ t = t or {}
local lst = {...}
for i=1,#lst do
for k, v in pairs(lst[i]) do
@@ -1017,6 +1042,14 @@ function table.tohash(t)
return h
end
+function table.fromhash(t)
+ local h = { }
+ for k, v in pairs(t) do -- no ipairs here
+ if v then h[#h+1] = k end
+ end
+ return h
+end
+
function table.contains(t, v)
if t then
for i=1, #t do
@@ -1048,6 +1081,22 @@ end
--~ return table.serialize(a) == table.serialize(b)
--~ end
+function table.clone(t,p) -- t is optional or nil or table
+ if not p then
+ t, p = { }, t or { }
+ elseif not t then
+ t = { }
+ end
+ setmetatable(t, { __index = function(_,key) return p[key] end })
+ return t
+end
+
+
+function table.hexed(t,seperator)
+ local tt = { }
+ for i=1,#t do tt[i] = string.format("0x%04X",t[i]) end
+ return table.concat(tt,seperator or " ")
+end
-- filename : l-io.lua
@@ -1119,38 +1168,10 @@ function io.noflines(f)
return n
end
---~ t, f, n = os.clock(), io.open("testbed/sample-utf16-bigendian-big.txt",'rb'), 0
---~ for a in io.characters(f) do n = n + 1 end
---~ print(string.format("characters: %s, time: %s", n, os.clock()-t))
-
do
local sb = string.byte
---~ local nextchar = {
---~ [ 4] = function(f)
---~ return f:read(1), f:read(1), f:read(1), f:read(1)
---~ end,
---~ [ 2] = function(f)
---~ return f:read(1), f:read(1)
---~ end,
---~ [ 1] = function(f)
---~ return f:read(1)
---~ end,
---~ [-2] = function(f)
---~ local a = f:read(1)
---~ local b = f:read(1)
---~ return b, a
---~ end,
---~ [-4] = function(f)
---~ local a = f:read(1)
---~ local b = f:read(1)
---~ local c = f:read(1)
---~ local d = f:read(1)
---~ return d, c, b, a
---~ end
---~ }
-
local nextchar = {
[ 4] = function(f)
return f:read(1,1,1,1)
@@ -1457,6 +1478,19 @@ end
if not os.exec then os.exec = os.execute end
if not os.spawn then os.spawn = os.execute end
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+
+if not io.fileseparator then
+ if string.find(os.getenv("PATH"),";") then
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ else
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ end
+end
+
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+
function os.launch(str)
if os.platform == "windows" then
os.execute("start " .. str) -- os.spawn ?
@@ -1476,19 +1510,15 @@ if not os.times then
-- cstime = children system time
function os.times()
return {
- utime = os.clock(), -- user
- stime = 0, -- system
- cutime = 0, -- children user
- cstime = 0, -- children system
+ utime = os.gettimeofday(), -- user
+ stime = 0, -- system
+ cutime = 0, -- children user
+ cstime = 0, -- children system
}
end
end
-if os.gettimeofday then
- os.clock = os.gettimeofday
-else
- os.gettimeofday = os.clock
-end
+os.gettimeofday = os.gettimeofday or os.clock
do
local startuptime = os.gettimeofday()
@@ -1535,11 +1565,11 @@ if not versions then versions = { } end versions['l-file'] = 1.001
if not file then file = { } end
function file.removesuffix(filename)
- return filename:gsub("%.%a+$", "")
+ return filename:gsub("%.[%a%d]+$", "")
end
function file.addsuffix(filename, suffix)
- if not filename:find("%.%a-$") then
+ if not filename:find("%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1547,7 +1577,11 @@ function file.addsuffix(filename, suffix)
end
function file.replacesuffix(filename, suffix)
- return (filename:gsub("%.%a+$", "." .. suffix))
+ if not filename:find("%.[%a%d]+$") then
+ return filename .. "." .. suffix
+ else
+ return (filename:gsub("%.[%a%d]+$","."..suffix))
+ end
end
function file.dirname(name)
@@ -1566,12 +1600,36 @@ function file.extname(name)
return name:match("^.+%.([^/\\]-)$") or ""
end
+function file.stripsuffix(name)
+ return (name:gsub("%.[%a%d]+$",""))
+end
+
+--~ function file.join(...)
+--~ local t = { ... }
+--~ for i=1,#t do
+--~ t[i] = (t[i]:gsub("\\","/")):gsub("/+$","")
+--~ end
+--~ return table.concat(t,"/")
+--~ end
+
+--~ print(file.join("x/","/y"))
+--~ print(file.join("http://","/y"))
+--~ print(file.join("http://a","/y"))
+--~ print(file.join("http:///a","/y"))
+--~ print(file.join("//nas-1","/y"))
+
function file.join(...)
- local t = { ... }
- for i=1,#t do
- t[i] = (t[i]:gsub("\\","/")):gsub("/+$","")
+ local pth = table.concat({...},"/")
+ pth = pth:gsub("\\","/")
+ local a, b = pth:match("^(.*://)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
+ end
+ a, b = pth:match("^(//)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
end
- return table.concat(t,"/")
+ return (pth:gsub("//+","/"))
end
function file.is_writable(name)
@@ -1650,6 +1708,111 @@ file.readdata = io.loaddata
file.savedata = io.savedata
+-- filename : l-url.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-url'] = 1.001
+if not url then url = { } end
+
+-- from the spec (on the web):
+--
+-- foo://example.com:8042/over/there?name=ferret#nose
+-- \_/ \______________/\_________/ \_________/ \__/
+-- | | | | |
+-- scheme authority path query fragment
+-- | _____________________|__
+-- / \ / \
+-- urn:example:animal:ferret:nose
+
+do
+
+ local function tochar(s)
+ return string.char(tonumber(s,16))
+ end
+
+ local colon, qmark, hash, slash, percent, endofstring = lpeg.P(":"), lpeg.P("?"), lpeg.P("#"), lpeg.P("/"), lpeg.P("%"), lpeg.P(-1)
+
+ local hexdigit = lpeg.R("09","AF","af")
+ local escaped = percent * lpeg.C(hexdigit * hexdigit) / tochar
+
+ local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+ local authority = slash * slash * lpeg.Cs((escaped+(1- slash-qmark-hash))^0) + lpeg.Cc("")
+ local path = slash * lpeg.Cs((escaped+(1- qmark-hash))^0) + lpeg.Cc("")
+ local query = qmark * lpeg.Cs((escaped+(1- hash))^0) + lpeg.Cc("")
+ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0) + lpeg.Cc("")
+
+ local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+
+ function url.split(str)
+ return (type(str) == "string" and parser:match(str)) or str
+ end
+
+end
+
+function url.hashed(str)
+ local s = url.split(str)
+ return {
+ scheme = (s[1] ~= "" and s[1]) or "file",
+ authority = s[2],
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original=str
+ }
+end
+
+function url.filename(filename)
+ local t = url.hashed(filename)
+ return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+end
+
+function url.query(str)
+ if type(str) == "string" then
+ local t = { }
+ for k, v in str:gmatch("([^&=]*)=([^&=]*)") do
+ t[k] = v
+ end
+ return t
+ else
+ return str
+ end
+end
+
+--~ print(url.filename("file:///c:/oeps.txt"))
+--~ print(url.filename("c:/oeps.txt"))
+--~ print(url.filename("file:///oeps.txt"))
+--~ print(url.filename("file:///etc/test.txt"))
+--~ print(url.filename("/oeps.txt"))
+
+-- from the spec on the web (sort of):
+--~
+--~ function test(str)
+--~ print(table.serialize(url.hashed(str)))
+--~ end
+---~
+--~ test("%56pass%20words")
+--~ test("file:///c:/oeps.txt")
+--~ test("file:///c|/oeps.txt")
+--~ test("file:///etc/oeps.txt")
+--~ test("file://./etc/oeps.txt")
+--~ test("file:////etc/oeps.txt")
+--~ test("ftp://ftp.is.co.za/rfc/rfc1808.txt")
+--~ test("http://www.ietf.org/rfc/rfc2396.txt")
+--~ test("ldap://[2001:db8::7]/c=GB?objectClass?one#what")
+--~ test("mailto:John.Doe@example.com")
+--~ test("news:comp.infosystems.www.servers.unix")
+--~ test("tel:+1-816-555-1212")
+--~ test("telnet://192.0.2.16:80/")
+--~ test("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")
+--~ test("/etc/passwords")
+--~ test("http://www.pragma-ade.com/spaced%20name")
+
+--~ test("zip:///oeps/oeps.zip#bla/bla.tex")
+--~ test("zip:///oeps/oeps.zip?bla/bla.tex")
+
+
-- filename : l-dir.lua
-- comment : split off from luat-lib
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -2112,6 +2275,8 @@ function utils.lua.compile(luafile, lucfile)
end
end
+
+
-- filename : luat-lib.lua
-- comment : companion to luat-lib.tex
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -2135,19 +2300,13 @@ os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
if not io.fileseparator then
if string.find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", "windows"
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", "unix"
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
end
end
-if not os.platform then
- if io.pathseparator == ";" then
- os.platform = "windows"
- else
- os.platform = "unix"
- end
-end
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
-- arg normalization
--
@@ -2346,17 +2505,22 @@ input.formats ['lua'] = 'LUAINPUTS' -- new
input.suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
-- here we catch a few new thingies (todo: add these paths to context.tmf)
+--
+-- FONTFEATURES = .;$TEXMF/fonts/fea//
+-- FONTCIDMAPS = .;$TEXMF/fonts/cid//
-function input.checkconfigdata(instance)
+function input.checkconfigdata(instance) -- not yet ok, no time for debugging now
local function fix(varname,default)
local proname = varname .. "." .. instance.progname or "crap"
- if not instance.environment[proname] and not instance.variables[proname] == "" and not instance.environment[varname] and not instance.variables[varname] == "" then
- instance.variables[varname] = default
+ local p = instance.environment[proname]
+ local v = instance.environment[varname]
+ if not ((p and p ~= "") or (v and v ~= "")) then
+ instance.variables[varname] = default -- or environment?
end
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS")
- fix("FONTFEATURES", ".;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
end
-- backward compatible ones
@@ -2457,6 +2621,11 @@ function input.reset()
end
+function input.reset_hashes(instance)
+ instance.lists = { }
+ instance.found = { }
+end
+
function input.bare_variable(str)
-- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
@@ -2522,7 +2691,7 @@ input.settrace(tonumber(os.getenv("MTX.INPUT.TRACE") or os.getenv("MTX_INPUT_TRA
-- loading the database files.
do
- local clock = os.clock
+ local clock = os.gettimeofday or os.clock
function input.starttiming(instance)
if instance then
@@ -2796,6 +2965,7 @@ function input.aux.extend_texmf_var(instance,specification) -- crap
instance.variables['TEXMF'] = "{" .. instance.variables['TEXMF'] .. "}"
end
input.expand_variables(instance)
+ input.reset_hashes(instance)
end
-- locators
@@ -2811,28 +2981,6 @@ function input.locatedatabase(instance,specification)
return input.methodhandler('locators', instance, specification)
end
---~ poor mans solution, from before we had lfs.isdir
---~
---~ function input.locators.tex(instance,specification)
---~ if specification and specification ~= '' then
---~ local files = {
---~ file.join(specification,'files'..input.lucsuffix),
---~ file.join(specification,'files'..input.luasuffix),
---~ file.join(specification,input.lsrname)
---~ }
---~ for _, filename in pairs(files) do
---~ local f = io.open(filename)
---~ if f then
---~ input.logger('! tex locator', specification..' found')
---~ input.aux.append_hash(instance,'file',specification,filename)
---~ f:close()
---~ return
---~ end
---~ end
---~ input.logger('? tex locator', specification..' not found')
---~ end
---~ end
-
function input.locators.tex(instance,specification)
if specification and specification ~= '' and lfs.isdir(specification) then
input.logger('! tex locator', specification..' found')
@@ -3191,8 +3339,6 @@ function input.expand_variables(instance)
for k,v in pairs(instance.expansions) do
instance.expansions[k] = v:gsub("\\", '/')
end
- -- ##########
- --~ input.splitexpansions(instance) -- better not, fuzzy
end
function input.aux.expand_vars(instance,lst) -- simple vars
@@ -3350,15 +3496,12 @@ do
end
function input.register_extra_path(instance,paths,subpaths)
+ local ep = instance.extra_paths or { }
+ local n = #ep
if paths and paths ~= "" then
- local ep = instance.extra_paths
- if not ep then
- ep = { }
- instance.extra_paths = ep
- end
- local n = #ep
- if subpath and subpaths ~= "" then
+ if subpaths and subpaths ~= "" then
for p in paths:gmatch("[^,]+") do
+ -- we gmatch each step again, not that fast, but used seldom
for s in subpaths:gmatch("[^,]+") do
local ps = p .. "/" .. s
if not done[ps] then
@@ -3375,10 +3518,24 @@ do
end
end
end
- if n < #ep then
- instance.lists = { }
+ elseif subpaths and subpaths ~= "" then
+ for i=1,n do
+ -- we gmatch each step again, not that fast, but used seldom
+ for s in subpaths:gmatch("[^,]+") do
+ local ps = ep[i] .. "/" .. s
+ if not done[ps] then
+ ep[#ep+1] = input.clean_path(ps)
+ done[ps] = true
+ end
+ end
end
end
+ if #ep > 0 then
+ instance.extra_paths = ep -- register paths
+ end
+ if #ep > n then
+ instance.lists = { } -- erase the cache
+ end
end
end
@@ -3633,7 +3790,7 @@ input.is_readable.tex = input.is_readable.file
-- name/name
function input.aux.collect_files(instance,names)
- local filelist = nil
+ local filelist = { }
for _, fname in pairs(names) do
if fname then
if input.trace > 2 then
@@ -3665,15 +3822,20 @@ function input.aux.collect_files(instance,names)
if blobfile then
if type(blobfile) == 'string' then
if not dname or blobfile:find(dname) then
- if not filelist then filelist = { } end
- -- input.logger('= collected', blobpath.." | "..blobfile.." | "..bname)
- filelist[#filelist+1] = file.join(blobpath,blobfile,bname)
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,blobfile,bname), -- search
+ input.concatinators[hash.type](blobpath,blobfile,bname) -- result
+ }
end
else
for _, vv in pairs(blobfile) do
if not dname or vv:find(dname) then
- if not filelist then filelist = { } end
- filelist[#filelist+1] = file.join(blobpath,vv,bname)
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,vv,bname), -- search
+ input.concatinators[hash.type](blobpath,vv,bname) -- result
+ }
end
end
end
@@ -3684,7 +3846,11 @@ function input.aux.collect_files(instance,names)
end
end
end
- return filelist
+ if #filelist > 0 then
+ return filelist
+ else
+ return nil
+ end
end
function input.suffix_of_format(str)
@@ -3703,54 +3869,30 @@ function input.suffixes_of_format(str)
end
end
---~ function input.aux.qualified_path(filename) -- make platform dependent / not good yet
---~ return
---~ filename:find("^%.+/") or
---~ filename:find("^/") or
---~ filename:find("^%a+%:") or
---~ filename:find("^%a+##")
---~ end
-
---~ function input.normalize_name(original)
---~ -- internally we use type##spec##subspec ; this hackery slightly slows down searching
---~ local str = original or ""
---~ str = str:gsub("::", "##") -- :: -> ##
---~ str = str:gsub("^(%a+)://" ,"%1##") -- zip:// -> zip##
---~ str = str:gsub("(.+)##(.+)##/(.+)","%1##%2##%3") -- ##/spec -> ##spec
---~ if (input.trace>1) and (original ~= str) then
---~ input.logger('= normalizer',original.." -> "..str)
---~ end
---~ return str
---~ end
+do
-do -- called about 700 times for an empty doc (font initializations etc)
+ -- called about 700 times for an empty doc (font initializations etc)
-- i need to weed the font files for redundant calls
local letter = lpeg.R("az","AZ")
- local separator = lpeg.P("##")
+ local separator = lpeg.P("://")
- local qualified = lpeg.P(".")^0 * lpeg.P("/") + letter*lpeg.P(":") + letter^1*separator
- local normalized = lpeg.Cs(
- (letter^1*(lpeg.P("://")/"##") * (1-lpeg.P(false))^1) +
- (lpeg.P("::")/"##" + (1-separator)^1*separator*(1-separator)^1*separator*(lpeg.P("/")/"") + 1)^0
- )
+ local qualified = lpeg.P(".")^0 * lpeg.P("/") + letter*lpeg.P(":") + letter^1*separator
+ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
- -- ./name ../name /name c: zip## (todo: use url internally and get rid of ##)
+ -- ./name ../name /name c: ://
function input.aux.qualified_path(filename)
return qualified:match(filename)
end
+ function input.aux.rootbased_path(filename)
+ return rootbased:match(filename)
+ end
- -- zip:// -> zip## ; :: -> ## ; aa##bb##/cc -> aa##bb##cc
function input.normalize_name(original)
- local str = normalized:match(original or "")
- if input.trace > 1 and original ~= str then
- input.logger('= normalizer',original.." -> "..str)
- end
- return str
+ return original
end
-end
--- split the next one up, better for jit
+end
function input.aux.register_in_trees(instance,name)
if not name:find("^%.") then
@@ -3758,11 +3900,13 @@ function input.aux.register_in_trees(instance,name)
end
end
+-- split the next one up, better for jit
+
function input.aux.find_file(instance,filename) -- todo : plugin (scanners, checkers etc)
local result = { }
local stamp = nil
- filename = input.normalize_name(filename)
- filename = file.collapse_path(filename:gsub("\\","/"))
+ filename = input.normalize_name(filename) -- elsewhere
+ filename = file.collapse_path(filename:gsub("\\","/")) -- elsewhere
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
@@ -3834,7 +3978,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local typespec = input.variable_of_format(filetype)
local pathlist = input.expanded_path_list(instance,typespec)
if not pathlist or #pathlist == 0 then
- -- no pathlist, access check only
+ -- no pathlist, access check only / todo == wildcard
if input.trace > 2 then
input.logger('? filename',filename)
input.logger('? filetype',filetype or '?')
@@ -3849,8 +3993,9 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
-- this is actually 'other text files' or 'any' or 'whatever'
local filelist = input.aux.collect_files(instance,wantedfiles)
- filename = filelist and filelist[1]
- if filename then
+ local lf = filelist and filelist[1]
+ if fl then
+ filename = fl[3]
result[#result+1] = filename
done = true
end
@@ -3860,8 +4005,8 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local doscan, recurse
if input.trace > 2 then
input.logger('? filename',filename)
- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
+ -- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
+ -- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
end
-- a bit messy ... esp the doscan setting here
for _, path in pairs(pathlist) do
@@ -3874,16 +4019,18 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
-- compare list entries with permitted pattern
pathname = pathname:gsub("([%-%.])","%%%1") -- this also influences
pathname = pathname:gsub("/+$", '/.*') -- later usage of pathname
- pathname = pathname:gsub("//", '/.-/')
+ pathname = pathname:gsub("//", '/.-/') -- not ok for /// but harmless
local expr = "^" .. pathname
-- input.debug('?',expr)
- for _, f in pairs(filelist) do
+ for _, fl in ipairs(filelist) do
+ local f = fl[2]
if f:find(expr) then
-- input.debug('T',' '..f)
if input.trace > 2 then
input.logger('= found in hash',f)
end
- result[#result+1] = f
+ --- todo, test for readable
+ result[#result+1] = fl[3]
input.aux.register_in_trees(instance,f) -- for tracing used files
done = true
if not instance.allresults then break end
@@ -3893,7 +4040,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
if not done and doscan then
- -- check if on disk / unchecked / does not work at all
+ -- check if on disk / unchecked / does not work at all / also zips
if input.method_is_file(pathname) then -- ?
local pname = pathname:gsub("%.%*$",'')
if not pname:find("%*") then
@@ -3970,10 +4117,7 @@ end
if not input.concatinators then input.concatinators = { } end
-function input.concatinators.tex(tag,path,name)
- return tag .. '/' .. path .. '/' .. name
-end
-
+input.concatinators.tex = file.join
input.concatinators.file = input.concatinators.tex
function input.find_files(instance,filename,filetype,mustexist)
@@ -4175,15 +4319,6 @@ function input.aux.register_file(files, name, path)
end
end
--- zip:: zip## zip://
--- zip::pathtozipfile::pathinzipfile (also: pathtozipfile/pathinzipfile)
--- file::name
--- tex::name
--- kpse::name
--- kpse::format::name
--- parent::n::name
--- parent::name (default 2)
-
if not input.finders then input.finders = { } end
if not input.openers then input.openers = { } end
if not input.loaders then input.loaders = { } end
@@ -4193,30 +4328,37 @@ input.openers.notfound = { nil }
input.loaders.notfound = { false, nil, 0 }
function input.splitmethod(filename)
- local method, specification = filename:match("^(.-)##(.+)$")
- if method and specification then
- return method, specification
+ if not filename then
+ return { } -- safeguard
+ elseif type(filename) == "table" then
+ return filename -- already split
+ elseif not filename:find("://") then
+ return { scheme="file", path = filename, original=filename } -- quick hack
else
- return 'tex', filename
+ return url.hashed(filename)
end
end
function input.method_is_file(filename)
- local method, specification = input.splitmethod(filename)
- return method == 'tex' or method == 'file'
+ return input.splitmethod(filename).scheme == 'file'
+end
+
+function table.sequenced(t,sep) -- temp here
+ local s = { }
+ for k, v in pairs(t) do
+ s[#s+1] = k .. "=" .. v
+ end
+ return table.concat(s, sep or " | ")
end
function input.methodhandler(what, instance, filename, filetype) -- ...
- local method, specification = input.splitmethod(filename)
- if method and specification then -- redundant
- if input[what][method] then
- input.logger('= handler',filename.." -> "..what.." | "..method.." | "..specification)
- return input[what][method](instance,specification,filetype)
- else
- return nil
- end
+ local specification = (type(filename) == "string" and input.splitmethod(filename)) or filename -- no or { }, let it bomb
+ local scheme = specification.scheme
+ if input[what][scheme] then
+ input.logger('= handler',specification.original .." -> " .. what .. " -> " .. table.sequenced(specification))
+ return input[what][scheme](instance,filename,filetype) -- todo: specification
else
- return input[what].tex(instance,filename,filetype)
+ return input[what].tex(instance,filename,filetype) -- todo: specification
end
end
@@ -4250,6 +4392,8 @@ function input.texdatablob(instance, filename, filetype)
return data or ""
end
+input.loadtexfile = input.texdatablob
+
function input.openfile(filename) -- brrr texmf.instance here / todo ! ! ! ! !
local fullname = input.findtexfile(texmf.instance, filename)
if fullname and (fullname ~= "") then
@@ -4828,7 +4972,7 @@ function input.aux.load_data(instance,pathname,dataname,filename)
end
end
--- we will make a better format, maybe something xml or just text
+-- we will make a better format, maybe something xml or just text or lua
input.automounted = input.automounted or { }
@@ -4957,80 +5101,117 @@ if not zip.supported then
function zip.openarchive (...) return nil end -- needed ?
function zip.closenarchive (...) end -- needed ?
- function input.registerzipfile (...) end -- needed ?
function input.usezipfile (...) end -- needed ?
else
- function input.locators.zip(instance,specification)
- local name, spec = specification:match("^(.-)##(.-)$")
- local f = io.open(name or specification)
- if f then -- todo: reuse code
- input.logger('! zip locator', specification..' found')
- if name and spec then
- input.aux.append_hash(instance,'zip',"zip##"..specification,name)
- input.aux.extend_texmf_var(instance, "zip##"..specification)
+ -- zip:///oeps.zip?name=bla/bla.tex
+ -- zip:///oeps.zip?tree=tex/texmf-local
+
+ local function validzip(str)
+ if not str:find("^zip://") then
+ return "zip:///" .. str
+ else
+ return str
+ end
+ end
+
+ zip.archives = { }
+ zip.registeredfiles = { }
+
+ function zip.openarchive(instance,name)
+ if not name or name == "" then
+ return nil
+ else
+ local arch = zip.archives[name]
+ if arch then
+ return arch
else
- input.aux.append_hash(instance,'zip',"zip##"..specification.."##",specification)
- input.aux.extend_texmf_var(instance, "zip##"..specification.."##")
+ local full = input.find_file(instance,name) or ""
+ local arch = (full ~= "" and zip.open(full)) or false
+ zip.archives[name] = arch
+ return arch
end
- f:close()
+ end
+ end
+
+ function zip.closearchive(instance,name)
+ if not name or name == "" and zip.archives[name] then
+ zip.close(zip.archives[name])
+ zip.archives[name] = nil
+ end
+ end
+
+ -- zip:///texmf.zip?tree=/tex/texmf
+ -- zip:///texmf.zip?tree=/tex/texmf-local
+ -- zip:///texmf-mine.zip?tree=/tex/texmf-projects
+
+ function input.locators.zip(instance,specification) -- where is this used? startup zips (untested)
+ specification = input.splitmethod(specification)
+ local zipfile = specification.path
+ local zfile = zip.openarchive(instance,name) -- tricky, could be in to be initialized tree
+ if zfile then
+ input.logger('! zip locator', specification.original ..' found')
else
- input.logger('? zip locator', specification..' not found')
+ input.logger('? zip locator', specification.original ..' not found')
end
end
function input.hashers.zip(instance,tag,name)
input.report("loading zip file",name,"as",tag)
- input.registerzipfile(instance,name,tag)
+ input.usezipfile(instance,tag .."?tree=" .. name)
end
function input.concatinators.zip(tag,path,name)
- return tag .. path .. '/' .. name
+ if not path or path == "" then
+ return tag .. '?name=' .. name
+ else
+ return tag .. '?name=' .. path .. "/" .. name
+ end
end
function input.is_readable.zip(name)
return true
end
- function input.finders.zip(instance,filename,filetype)
- local archive, dataname = filename:match("^(.+)##/*(.+)$")
- if archive and dataname then
- local zfile = zip.openarchive(archive)
- if not zfile then
- archive = input.find_file(instance,archive,filetype)
- zfile = zip.openarchive(archive)
- end
- if zfile then
- input.logger('! zip finder',archive)
- local dfile = zfile:open(dataname)
- if dfile then
- dfile = zfile:close()
- input.logger('+ zip finder',filename)
- return 'zip##' .. filename
+ function input.finders.zip(instance,specification,filetype)
+ specification = input.splitmethod(specification)
+ if specification.path then
+ local q = url.query(specification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,specification.path)
+ if zfile then
+ input.logger('! zip finder',specification.path)
+ local dfile = zfile:open(q.name)
+ if dfile then
+ dfile = zfile:close()
+ input.logger('+ zip finder',q.name)
+ return specification.original
+ end
+ else
+ input.logger('? zip finder',specification.path)
end
- else
- input.logger('? zip finder',archive)
end
end
input.logger('- zip finder',filename)
return unpack(input.finders.notfound)
end
- function input.openers.zip(instance,filename)
- if filename and filename ~= "" then
- local archive, dataname = filename:match("^(.-)##/*(.+)$")
- if archive and dataname then
- local zfile= zip.openarchive(archive)
+ function input.openers.zip(instance,specification)
+ local zipspecification = input.splitmethod(specification)
+ if zipspecification.path then
+ local q = url.query(zipspecification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,zipspecification.path)
if zfile then
- input.logger('+ zip starter',archive)
- local dfile = zfile:open(dataname)
+ input.logger('+ zip starter',zipspecification.path)
+ local dfile = zfile:open(q.name)
if dfile then
- input.show_open(filename)
- return input.openers.text_opener(filename,dfile,'zip')
+ input.show_open(specification)
+ return input.openers.text_opener(specification,dfile,'zip')
end
else
- input.logger('- zip starter',archive)
+ input.logger('- zip starter',zipspecification.path)
end
end
end
@@ -5038,15 +5219,15 @@ else
return unpack(input.openers.notfound)
end
- function input.loaders.zip(instance, filename) -- we could use input.openers.zip
- if filename and filename ~= "" then
- input.logger('= zip loader',filename)
- local archive, dataname = filename:match("^(.+)##/*(.+)$")
- if archive and dataname then
- local zfile = zip.openarchive(archive)
+ function input.loaders.zip(instance,specification)
+ specification = input.splitmethod(specification)
+ if specification.path then
+ local q = url.query(specification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,specification.path)
if zfile then
- input.logger('= zip starter',archive)
- local dfile = zfile:open(dataname)
+ input.logger('+ zip starter',specification.path)
+ local dfile = zfile:open(q.name)
if dfile then
input.show_load(filename)
input.logger('+ zip loader',filename)
@@ -5055,105 +5236,67 @@ else
return true, s, #s
end
else
- input.logger('- zip starter',archive)
+ input.logger('- zip starter',specification.path)
end
end
end
input.logger('- zip loader',filename)
- return unpack(input.loaders.notfound)
- end
-
- zip.archives = { }
- zip.registeredfiles = { }
-
- function zip.openarchive(name)
- if name and name ~= "" and not zip.archives[name] then
- zip.archives[name] = zip.open(name)
- end
- return zip.archives[name]
- end
-
- function zip.closearchive(name)
- if zip.archives[name] then
- zip.close(archives[name])
- zip.archives[name] = nil
- end
+ return unpack(input.openers.notfound)
end
- -- aparte register maken voor user (register tex / zip), runtime tree register
- -- todo: alleen url syntax toestaan
- -- user function: also handle zip::name::path
+ -- zip:///somefile.zip
+ -- zip:///somefile.zip?tree=texmf-local -> mount
- function input.usezipfile(instance,zipname) -- todo zip://
- zipname = input.normalize_name(zipname)
- if not zipname:find("^zip##") then
- zipname = "zip##"..zipname
- end
- input.logger('! zip user','file '..zipname)
- if not zipname:find("^zip##(.+)##(.-)$") then
- zipname = zipname .. "##" -- dummy spec
- end
- local tag = zipname
- local name = zipname:match("zip##(.+)##.-")
- input.aux.prepend_hash(instance,'zip',tag,name)
- input.aux.extend_texmf_var(instance, tag)
- input.registerzipfile(instance,name,tag)
- end
-
- function input.registerzipfile(instance,zipname,tag)
- if not zip.registeredfiles[zipname] then
- input.starttiming(instance)
- local z = zip.open(zipname)
- if not z then
- zipname = input.find_file(instance,zipname)
- z = zip.open(zipname)
- end
+ function input.usezipfile(instance,zipname)
+ zipname = validzip(zipname)
+ input.logger('! zip use','file '..zipname)
+ local specification = input.splitmethod(zipname)
+ local zipfile = specification.path
+ if zipfile and not zip.registeredfiles[zipname] then
+ local tree = url.query(specification.query).tree or ""
+ input.logger('! zip register','file '..zipname)
+ local z = zip.openarchive(instance,zipfile)
if z then
input.logger("= zipfile","registering "..zipname)
+ input.starttiming(instance)
+ input.aux.prepend_hash(instance,'zip',zipname,zipfile)
+ input.aux.extend_texmf_var(instance,zipname) -- resets hashes too
zip.registeredfiles[zipname] = z
- input.aux.register_zip_file(instance,zipname,tag)
+ instance.files[zipname] = input.aux.register_zip_file(z,tree or "")
+ input.stoptiming(instance)
else
input.logger("? zipfile","unknown "..zipname)
end
- input.stoptiming(instance)
+ else
+ input.logger('! zip register','no file '..zipname)
end
end
- function input.aux.register_zip_file(instance,zipname,tagname)
- if zip.registeredfiles[zipname] then
- if not tagname:find("^zip##") then
- tagname = "zip##" .. tagname
- end
- local path, name, n = nil, nil, 0
- if not instance.files[tagname] then
- instance.files[tagname] = { }
- end
- local files, filter = instance.files[tagname], ""
- local subtree = tagname:match("^zip##.+##(.+)$")
- if subtree then
- filter = "^"..subtree.."/(.+)/(.-)$"
- else
- filter = "^(.+)/(.-)$"
- end
- input.logger('= zip filter',filter)
- -- we can consider putting a files.luc in the file
- local register = input.aux.register_file
- for i, _ in zip.registeredfiles[zipname]:files() do
- path, name = i.filename:match(filter)
- if path then
- if name and name ~= '' then
- register(files, name, path)
- n = n + 1
- else
- -- directory
- end
- else
- register(files, i.filename, '')
+ function input.aux.register_zip_file(z,tree)
+ local files, filter = { }, ""
+ if tree == "" then
+ filter = "^(.+)/(.-)$"
+ else
+ filter = "^"..tree.."/(.+)/(.-)$"
+ end
+ input.logger('= zip filter',filter)
+ local register, n = input.aux.register_file, 0
+ for i in z:files() do
+ local path, name = i.filename:match(filter)
+ if path then
+ if name and name ~= '' then
+ register(files, name, path)
n = n + 1
+ else
+ -- directory
end
+ else
+ register(files, i.filename, '')
+ n = n + 1
end
- input.report(n, 'entries in', zipname)
end
+ input.report('= zip entries',n)
+ return files
end
end
@@ -5348,6 +5491,8 @@ if texconfig and not texlua then do
texio.write_nl(s .. b .. "\n")
end
+ -- this will become: ctx.install_statistics(fnc() return ..,.. end) etc
+
function ctx.show_statistics()
local function ws(...)
ctx.writestatus("mkiv lua stats",string.format(...))
@@ -5383,6 +5528,12 @@ if texconfig and not texlua then do
if languages then
ws("language load time - %s seconds (n=%s)", input.loadtime(languages), languages.hyphenation.n())
end
+ if figures then
+ ws("graphics processing time - %s seconds (n=%s) (including tex)", input.loadtime(figures), figures.n or "?")
+ end
+ if metapost then
+ ws("metapost processing time - %s seconds (+ loading: %s seconds)", input.loadtime(metapost), input.loadtime(mplib))
+ end
if status.luastate_bytes then
ws("current memory usage - %s bytes", status.luastate_bytes)
end
@@ -5583,7 +5734,7 @@ if texconfig and not texlua then
'hash_extra', 'max_strings', 'pool_free', 'pool_size', 'string_vacancies',
'obj_tab_size', 'pdf_mem_size', 'dest_names_size',
'nest_size', 'param_size', 'save_size', 'stack_size',
- 'trie_size', 'hyph_size',
+ 'trie_size', 'hyph_size', 'max_in_open',
'ocp_stack_size', 'ocp_list_size', 'ocp_buf_size'
}
@@ -5610,6 +5761,7 @@ if texconfig and not texlua then
end
texconfig.max_print_line = 100000
+ texconfig.max_in_open = 127
end
@@ -5637,114 +5789,6 @@ function cs.testcase(b)
end
end
--- This is not the most ideal place, but it will do. Maybe we need to move
--- attributes to node-att.lua.
-
-if node then
-
- nodes = nodes or { }
-
- do
-
- -- just for testing
-
- local reserved = { }
-
- function nodes.register(n)
- reserved[#reserved+1] = n
- end
-
- function nodes.cleanup_reserved(nofboxes) -- todo
- local nr, free = #reserved, node.free
- for i=1,nr do
- free(reserved[i])
- end
- local nl, tb, flush = 0, tex.box, node.flush_list
- if nofboxes then
- for i=1,nofboxes do
- local l = tb[i]
- if l then
- -- flush(l)
- tb[i] = nil
- nl = nl + 1
- end
- end
- end
- reserved = { }
- return nr, nl, nofboxes
- end
-
- end
-
- do
-
- local pdfliteral = node.new("whatsit",8) pdfliteral.next, pdfliteral.prev = nil, nil pdfliteral.mode = 1
- local disc = node.new("disc") disc.next, disc.prev = nil, nil
- local kern = node.new("kern",1) kern.next, kern.prev = nil, nil
- local penalty = node.new("penalty") penalty.next, penalty.prev = nil, nil
- local glue = node.new("glue") glue.next, glue.prev = nil, nil
- local glue_spec = node.new("glue_spec") glue_spec.next, glue_spec.prev = nil, nil
-
- nodes.register(pdfliteral)
- nodes.register(disc)
- nodes.register(kern)
- nodes.register(penalty)
- nodes.register(glue)
- nodes.register(glue_spec)
-
- local copy = node.copy
-
- function nodes.penalty(p)
- local n = copy(penalty)
- n.penalty = p
- return n
- end
- function nodes.kern(k)
- local n = copy(kern)
- n.kern = k
- return n
- end
- function nodes.glue(width,stretch,shrink)
- local n = copy(glue)
- local s = copy(glue_spec)
- s.width, s.stretch, s.shrink = width, stretch, shrink
- n.spec = s
- return n
- end
- function nodes.glue_spec(width,stretch,shrink)
- local s = copy(glue_spec)
- s.width, s.stretch, s.shrink = width, stretch, shrink
- return s
- end
-
- function nodes.disc()
- return copy(disc)
- end
-
- function nodes.pdfliteral(str)
- local t = copy(pdfliteral)
- t.data = str
- return t
- end
-
- end
-
-end
-
-if tex then
-
- function tex.node_mem_status()
- -- todo: lpeg
- local s = status.node_mem_usage
- local t = { }
- for n, tag in s:gmatch("(%d+) ([a-z_]+)") do
- t[tag] = n
- end
- return t
- end
-
-end
-
if not modules then modules = { } end modules ['luat-kps'] = {
version = 1.001,
@@ -5869,6 +5913,7 @@ own.libs = { -- todo: check which ones are really needed
'l-os.lua',
'l-md5.lua',
'l-file.lua',
+ 'l-url.lua',
'l-dir.lua',
'l-boolean.lua',
'l-unicode.lua',
@@ -5935,7 +5980,8 @@ utils.report = input.report
input.defaultlibs = { -- not all are needed
'l-string.lua', 'l-lpeg.lua', 'l-table.lua', 'l-boolean.lua', 'l-number.lua', 'l-set.lua', 'l-unicode.lua',
- 'l-md5.lua', 'l-os.lua', 'l-io.lua', 'l-file.lua', 'l-dir.lua', 'l-utils.lua', 'l-tex.lua',
+ 'l-md5.lua', 'l-os.lua', 'l-io.lua', 'l-file.lua', 'l-url.lua', 'l-dir.lua', 'l-utils.lua', 'l-tex.lua',
+'luat-env.lua',
'luat-lib.lua', 'luat-inp.lua', 'luat-tmp.lua', 'luat-zip.lua', 'luat-tex.lua'
}
diff --git a/scripts/context/lua/mtx-check.lua b/scripts/context/lua/mtx-check.lua
new file mode 100644
index 000000000..dd8a71264
--- /dev/null
+++ b/scripts/context/lua/mtx-check.lua
@@ -0,0 +1,138 @@
+if not modules then modules = { } end modules ['mtx-check'] = {
+ version = 1.001,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
+
+scripts = scripts or { }
+scripts.checker = scripts.checker or { }
+
+local validator = { }
+
+do
+
+ validator.n = 1
+ validator.errors = { }
+ validator.trace = false
+ validator.direct = false
+
+ validator.printer = print
+ validator.tracer = print
+
+ local message = function(position, kind)
+ local ve = validator.errors
+ ve[#ve+1] = { kind, position, validator.n }
+ if validator.direct then
+ validator.printer(string.format("%s error at position %s (line %s)", kind, position, validator.n))
+ end
+ end
+ local progress = function(position, data, kind)
+ if validator.trace then
+ validator.tracer(string.format("%s at position %s: %s", kind, position, data or ""))
+ end
+ end
+
+ local P, S, V, C, CP, CC = lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Cp, lpeg.Cc
+
+ local i_m, d_m = P("$"), P("$$")
+ local l_s, r_s = P("["), P("]")
+ local l_g, r_g = P("{"), P("}")
+
+ local esc = P("\\")
+ local cr = P("\r")
+ local lf = P("\n")
+ local crlf = P("\r\n")
+ local space = S(" \t\f\v")
+ local newline = crlf + cr + lf
+
+ local line = newline / function() validator.n = validator.n + 1 end
+
+ local grammar = P { "tokens",
+ ["tokens"] = (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + V("errors") + 1)^0,
+ ["whatever"] = line + esc * 1 + C(P("%") * (1-line)^0),
+ ["grouped"] = CP() * C(l_g * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_g - r_g))^0 * r_g) * CC("group") / progress,
+ ["setup"] = CP() * C(l_s * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s) * CC("setup") / progress,
+ ["display"] = CP() * C(d_m * (V("whatever") + V("grouped") + (1 - d_m))^0 * d_m) * CC("display") / progress,
+ ["inline"] = CP() * C(i_m * (V("whatever") + V("grouped") + (1 - i_m))^0 * i_m) * CC("inline") / progress,
+ ["errors"] = (V("gerror") + V("serror") + V("derror") + V("ierror")) * true,
+ ["gerror"] = CP() * (l_g + r_g) * CC("grouping") / message,
+ ["serror"] = CP() * (l_s + r_g) * CC("setup error") / message,
+ ["derror"] = CP() * d_m * CC("display math error") / message,
+ ["ierror"] = CP() * i_m * CC("inline math error") / message,
+ }
+
+ local grammar = P { "tokens",
+ ["tokens"] = (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + V("errors") + 1)^0,
+ ["whatever"] = line + esc * 1 + C(P("%") * (1-line)^0),
+ ["grouped"] = l_g * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_g - r_g))^0 * r_g,
+ ["setup"] = l_s * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s,
+ ["display"] = d_m * (V("whatever") + V("grouped") + (1 - d_m))^0 * d_m,
+ ["inline"] = i_m * (V("whatever") + V("grouped") + (1 - i_m))^0 * i_m,
+ ["errors"] = (V("gerror")+ V("serror") + V("derror") + V("ierror")),
+ ["gerror"] = CP() * (l_g + r_g) * CC("grouping") / message,
+ ["serror"] = CP() * (l_s + r_g) * CC("setup error") / message,
+ ["derror"] = CP() * d_m * CC("display math error") / message,
+ ["ierror"] = CP() * i_m * CC("inline math error") / message,
+ }
+
+ function validator.check(str)
+ validator.n = 1
+ validator.errors = { }
+ grammar:match(str)
+ end
+
+end
+
+--~ str = [[
+--~ a{oeps {oe\{\}ps} }
+--~ test { oeps \} \[\] oeps \setupxxx[oeps=bla]}
+--~ test $$ \hbox{$ oeps \} \[\] oeps $} $$
+--~ {$x\$xx$ $
+--~ ]]
+--~ str = string.rep(str,10)
+
+function scripts.checker.check(filename)
+ local str = io.loaddata(filename)
+ if str then
+ validator.check(str)
+ if #validator.errors > 0 then
+ for k, v in ipairs(validator.errors) do
+ local kind, position, line = v[1], v[2], v[3]
+ local data = str:sub(position-30,position+30)
+ data = data:gsub("(.)", {
+ ["\n"] = " ",
+ ["\r"] = " ",
+ ["\t"] = " ",
+ })
+ data = data:gsub("^ *","")
+ print(string.format("% 5i %s %s", line,string.rpadd(kind,10," "),data))
+ end
+ else
+ print("no error")
+ end
+ else
+ print("no file")
+ end
+end
+
+
+banner = banner .. " | tex check tools "
+
+messages.help = [[
+--convert check tex file for errors
+]]
+
+input.verbose = true
+
+if environment.argument("check") then
+ scripts.checker.check(environment.files[1])
+elseif environment.argument("help") then
+ input.help(banner,messages.help)
+elseif environment.files[1] then
+ scripts.checker.check(environment.files[1])
+end
+
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 3abd270aa..e0aa7d086 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -549,6 +549,10 @@ function scripts.context.run(ctxdata)
filename = makestub("\\xmlprocess{%s}",filename)
end
--
+ if environment.argument("autopdf") then
+ os.spawn(string.format('pdfclose --file "%s" 2>&1', file.replacesuffix(filename,"pdf")))
+ end
+ --
local command = "luatex --fmt=" .. string.quote(formatfile) .. " --lua=" .. string.quote(scriptfile) .. " " .. string.quote(filename)
local oldhash, newhash = scripts.context.multipass.hashfiles(jobname), { }
scripts.context.multipass.makeoptionfile(jobname,ctxdata)
@@ -570,6 +574,13 @@ function scripts.context.run(ctxdata)
end
end
end
+ --
+ -- todo: result
+ --
+ if environment.argument("autopdf") then
+ os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(filename,"pdf")))
+ end
+ --
end
else
input.error("no format found with name " .. formatname)
@@ -578,8 +589,8 @@ function scripts.context.run(ctxdata)
end
function scripts.context.make()
- -- hack, should also be a shared function
- for _, name in ipairs( { "cont-en", "cont-nl", "mptopdf" } ) do
+ local list = (environment.files[1] and environment.files) or { "cont-en", "cont-nl", "mptopdf" }
+ for _, name in ipairs(list) do
local command = "luatools --make --compile " .. name
input.report("running command: " .. command)
os.spawn(command)
@@ -588,7 +599,7 @@ end
function scripts.context.generate()
-- hack, should also be a shared function
- local command = "luatools --generate " .. name
+ local command = "luatools --generate "
input.report("running command: " .. command)
os.spawn(command)
end
@@ -607,8 +618,11 @@ messages.help = [[
--make create context formats formats
--generate generate file database etc.
--ctx=name use ctx file
+--autopdf open pdf file afterwards
]]
+input.verbose = true
+
input.starttiming(scripts.context)
if environment.argument("run") then
diff --git a/scripts/context/lua/mtx-update.lua b/scripts/context/lua/mtx-update.lua
index cfe553731..008ad68e3 100644
--- a/scripts/context/lua/mtx-update.lua
+++ b/scripts/context/lua/mtx-update.lua
@@ -19,75 +19,105 @@ scripts.update = scripts.update or { }
minimals = minimals or { }
minimals.config = minimals.config or { }
-scripts.update.collections = {
+os.setenv("CYGWIN","nontsec")
+
+scripts.update.formats = {
+ "cont-en",
+ "cont-nl",
+ "cont-cz",
+ "cont-de",
+ "cont-fa",
+ "cont-it",
+ "cont-ro",
+ "cont-uk",
+ "metafun",
+ "mptopdf",
+ "plain"
+}
+
+scripts.update.repositories = {
+ "current",
+ "experimental"
+}
+
+scripts.update.versions = {
+ "current",
+ "latest"
+}
+
+scripts.update.engines = {
["luatex"] = {
- { "base/tex/", "texmf" },
- { "base/metapost/", "texmf" },
- { "fonts/new/", "texmf" },
- { "fonts/common/", "texmf" },
- { "fonts/other/", "texmf" },
- { "context/current/", "texmf-context" },
- { "context/img/", "texmf-context" },
- { "misc/setuptex/", "." },
- { "misc/web2c", "texmf" },
- { "bin/common/%s/", "texmf-%s" },
- { "bin/context/%s/", "texmf-%s" },
- { "bin/metapost/%s/", "texmf-%s" },
- { "bin/luatex/%s/", "texmf-%s" },
- { "bin/man/", "texmf-%s" }
+ { "base/tex/", "texmf" },
+ { "base/metapost/", "texmf" },
+ { "fonts/new/", "texmf" },
+ { "fonts/common/", "texmf" },
+ { "fonts/other/", "texmf" },
+ { "context//", "texmf-context" },
+ { "context/img/", "texmf-context" },
+ { "context/config/", "texmf-context" },
+ { "misc/setuptex/", "." },
+ { "misc/web2c", "texmf" },
+ { "bin/common//", "texmf-" },
+ { "bin/context//", "texmf-" },
+ { "bin/metapost//", "texmf-" },
+ { "bin/luatex//", "texmf-" },
+ { "bin/man/", "texmf-" }
},
["xetex"] = {
- { "base/tex/", "texmf" },
- { "base/metapost/", "texmf" },
- { "base/xetex/", "texmf" },
- { "fonts/new/", "texmf" },
- { "fonts/common/", "texmf" },
- { "fonts/other/", "texmf" },
- { "context/current/", "texmf-context" },
- { "context/img/", "texmf-context" },
- { "misc/setuptex/", "." },
- { "misc/web2c", "texmf" },
- { "bin/common/%s/", "texmf-%s" },
- { "bin/context/%s/", "texmf-%s" },
- { "bin/metapost/%s/", "texmf-%s" },
- { "bin/xetex/%s/", "texmf-%s" },
- { "bin/man/", "texmf-%s" }
+ { "base/tex/", "texmf" },
+ { "base/metapost/", "texmf" },
+ { "base/xetex/", "texmf" },
+ { "fonts/new/", "texmf" },
+ { "fonts/common/", "texmf" },
+ { "fonts/other/", "texmf" },
+ { "context//", "texmf-context" },
+ { "context/img/", "texmf-context" },
+ { "context/config/", "texmf-context" },
+ { "misc/setuptex/", "." },
+ { "misc/web2c", "texmf" },
+ { "bin/common//", "texmf-" },
+ { "bin/context//", "texmf-" },
+ { "bin/metapost//", "texmf-" },
+ { "bin/xetex//", "texmf-" },
+ { "bin/man/", "texmf-" }
},
["pdftex"] = {
- { "base/tex/", "texmf" },
- { "base/metapost/", "texmf" },
- { "fonts/old/", "texmf" },
- { "fonts/common/", "texmf" },
- { "fonts/other/", "texmf" },
- { "context/current/", "texmf-context" },
- { "context/img/", "texmf-context" },
- { "misc/setuptex/", "." },
- { "misc/web2c", "texmf" },
- { "bin/common/%s/", "texmf-%s" },
- { "bin/context/%s/", "texmf-%s" },
- { "bin/metapost/%s/", "texmf-%s" },
- { "bin/pdftex/%s/", "texmf-%s" },
- { "bin/man/", "texmf-%s" }
+ { "base/tex/", "texmf" },
+ { "base/metapost/", "texmf" },
+ { "fonts/old/", "texmf" },
+ { "fonts/common/", "texmf" },
+ { "fonts/other/", "texmf" },
+ { "context//", "texmf-context" },
+ { "context/img/", "texmf-context" },
+ { "context/config/", "texmf-context" },
+ { "misc/setuptex/", "." },
+ { "misc/web2c", "texmf" },
+ { "bin/common//", "texmf-" },
+ { "bin/context//", "texmf-" },
+ { "bin/metapost//", "texmf-" },
+ { "bin/pdftex//", "texmf-" },
+ { "bin/man/", "texmf-" }
},
["all"] = {
- { "base/tex/", "texmf" },
- { "base/metapost/", "texmf" },
- { "base/xetex/", "texmf" },
- { "fonts/old/", "texmf" },
- { "fonts/new/", "texmf" },
- { "fonts/common/", "texmf" },
- { "fonts/other/", "texmf" },
- { "context/current/", "texmf-context" },
- { "context/img/", "texmf-context" },
- { "misc/setuptex/", "." },
- { "misc/web2c", "texmf" },
- { "bin/common/%s/", "texmf-%s" },
- { "bin/context/%s/", "texmf-%s" },
- { "bin/metapost/%s/", "texmf-%s" },
- { "bin/luatex/%s/", "texmf-%s" },
- { "bin/xetex/%s/", "texmf-%s" },
- { "bin/pdftex/%s/", "texmf-%s" },
- { "bin/man/", "texmf-%s" }
+ { "base/tex/", "texmf" },
+ { "base/metapost/", "texmf" },
+ { "base/xetex/", "texmf" },
+ { "fonts/old/", "texmf" },
+ { "fonts/new/", "texmf" },
+ { "fonts/common/", "texmf" },
+ { "fonts/other/", "texmf" },
+ { "context//", "texmf-context" },
+ { "context/img/", "texmf-context" },
+ { "context/config/", "texmf-context" },
+ { "misc/setuptex/", "." },
+ { "misc/web2c", "texmf" },
+ { "bin/common//", "texmf-" },
+ { "bin/context//", "texmf-" },
+ { "bin/metapost//", "texmf-" },
+ { "bin/luatex//", "texmf-" },
+ { "bin/xetex//", "texmf-" },
+ { "bin/pdftex//", "texmf-" },
+ { "bin/man/", "texmf-" }
},
}
@@ -104,73 +134,59 @@ scripts.update.platforms = {
["osx-ppc"] = "osx-ppc",
}
-scripts.update.rsyncflagspath = "-rpztlv --stats --delete"
-scripts.update.rsyncflagsroot = "-rpztlv --stats"
-
-function scripts.update.prepare()
- local texroot = environment.argument("texroot") or "tex"
- local engines = environment.argument("engine")
- if engines then
- engines = engines:split(",")
- else
- engines = minimals.config.engines or { "all" }
- end
- local platforms = environment.argument("platform")
- if platforms then
- platforms = platforms:split(",")
- else
- platforms = minimals.config.platform or { os.currentplatform() }
- end
- return texroot, engines, platforms
-end
-
function scripts.update.run(str)
- if environment.argument("dryrun") then
- logs.report("run", str)
- else
+ logs.report("run", str)
+ if environment.argument("force") then
-- important, otherwise formats fly to a weird place
-- (texlua sets luatex as the engine, we need to reset that or to fix texexec :)
os.setenv("engine",nil)
- os.spawn(str)
+ os.execute(str)
+ end
+end
+
+function scripts.update.fullpath(path)
+ if input.aux.rootbased_path(path) then
+ return path
+ else
+ return lfs.currentdir() .. "/" .. path
end
end
function scripts.update.synchronize()
- local texroot, engines, platforms = scripts.update.prepare()
- local dryrun = environment.argument("dryrun")
- os.setenv("CYGWIN","nontsec")
- local rsyncbin = environment.argument("rsync") or "rsync"
- local url = environment.argument("url") or "contextgarden.net::"
+ logs.report("update","start")
+ local texroot = scripts.update.fullpath(states.get("paths.root"))
+ local engines = states.get('engines')
+ local platforms = states.get('platforms')
+ local repositories = states.get('repositories')
+ local bin = states.get("rsync.program")
+ local url = states.get("rsync.server")
+ local version = states.get("context.version")
+ local force = environment.argument("force")
if not url:find("::$") then url = url .. "::" end
local ok = lfs.attributes(texroot,"mode") == "directory"
- if not ok and not dryrun then
+ if not ok and force then
dir.mkdirs(texroot)
ok = lfs.attributes(texroot,"mode") == "directory"
end
- if ok or dryrun then
- if not dryrun then
+ if ok or not force then
+ if force then
dir.mkdirs(string.format("%s/%s", texroot, "texmf-cache"))
end
- local fetched = { }
- local individual = { }
- local context = environment.argument("context")
- for _, engine in ipairs(engines) do
- local collections = scripts.update.collections[engine]
+ local fetched, individual = { }, { }
+ for engine, _ in pairs(engines) do
+ local collections = scripts.update.engines[engine]
if collections then
for _, collection in ipairs(collections) do
- for _, platform in ipairs(platforms) do
+ for platform, _ in pairs(platforms) do
platform = scripts.update.platforms[platform]
if platform then
- local archive = string.format(collection[1], platform)
- local destination = string.format("%s/%s", texroot, string.format(collection[2], platform))
+ local archive = collection[1]:gsub("", platform)
+ local destination = string.format("%s/%s", texroot, collection[2]:gsub("", platform))
destination = destination:gsub("\\","/")
+ archive = archive:gsub("",version)
if platform == "windows" or platform == "mswin" then
destination = destination:gsub("([a-zA-Z]):/", "/cygdrive/%1/")
end
- -- if one uses experimental, context=... has no effect
- if context and not environment.argument("experimental") then
- archive = archive:gsub("/current/", "/" .. context .. "/")
- end
individual[#individual+1] = { archive, destination }
end
end
@@ -178,20 +194,17 @@ function scripts.update.synchronize()
end
end
local combined = { }
- local distributions = { "current" }
- -- we need to fetch files from both "current" and "experimental" branch
- if environment.argument("experimental") then
- distributions = { "experimental", "current" }
- end
- for _, d in pairs(distributions) do
- for _, v in pairs(individual) do
- local archive, destination = v[1], v[2]
- local cd = combined[destination]
- if not cd then
- cd = { }
- combined[destination] = cd
+ for _, repository in ipairs(scripts.update.repositories) do
+ if repositories[repository] then
+ for _, v in pairs(individual) do
+ local archive, destination = v[1], v[2]
+ local cd = combined[destination]
+ if not cd then
+ cd = { }
+ combined[destination] = cd
+ end
+ cd[#cd+1] = string.format("%s/%s/%s",states.get('rsync.module'),repository,archive)
end
- cd[#cd+1] = 'minimals/' .. d .. '/' .. archive
end
end
if input.verbose then
@@ -204,10 +217,11 @@ function scripts.update.synchronize()
end
for destination, archive in pairs(combined) do
local archives, command = table.concat(archive," "), ""
- if not environment.argument("delete") or destination:find("%.$") then
- command = string.format("%s %s %s'%s' %s", rsyncbin, scripts.update.rsyncflagsroot, url, archives, destination)
+ local normalflags, deleteflags = states.get("rsync.flags.normal"), states.get("rsync.flags.delete")
+ if true then -- environment.argument("keep") or destination:find("%.$") then
+ command = string.format("%s %s %s'%s' %s", bin, normalflags, url, archives, destination)
else
- command = string.format("%s %s %s'%s' %s", rsyncbin, scripts.update.rsyncflagspath, url, archives, destination)
+ command = string.format("%s %s %s %s'%s' %s", bin, normalflags, deleteflags, url, archives, destination)
end
logs.report("mtx update", string.format("running command: %s",command))
if not fetched[command] then
@@ -218,51 +232,141 @@ function scripts.update.synchronize()
else
logs.report("mtx update", string.format("no valid texroot: %s",texroot))
end
- if environment.argument("make") then
- scripts.update.make()
+ if not force then
+ logs.report("update", "use --force to really update")
+ end
+ logs.report("update","done")
+end
+
+function table.fromhash(t)
+ local h = { }
+ for k, v in pairs(t) do -- no ipairs here
+ if v then h[#h+1] = k end
end
+ return h
end
+
function scripts.update.make()
- local texroot, engines, platforms = scripts.update.prepare()
+ logs.report("make","start")
+ local force = environment.argument("force")
+ local texroot = scripts.update.fullpath(states.get("paths.root"))
+ local engines = states.get('engines')
+ local platforms = states.get('platforms')
+ local formats = states.get('formats')
input.load_tree(texroot)
scripts.update.run("mktexlsr")
scripts.update.run("luatools --generate")
- engines = (engines[1] and engines[1] == "all" and { "pdftex", "xetex", "luatex" }) or engines
- for _, engine in ipairs(engines) do
- scripts.update.run(string.format("texexec --make --all --fast --%s",engine))
+ local formatlist = table.concat(table.fromhash(formats), " ")
+ if formatlist ~= "" then
+ for engine in pairs(engines) do
+ -- todo: just handle make here or in mtxrun --script context --make
+--~ os.execute("set")
+ scripts.update.run(string.format("texexec --make --all --fast --%s %s",engine,formatlist))
+ end
+ end
+ if not force then
+ logs.report("make", "use --force to really make")
end
+ logs.report("make","done")
end
banner = banner .. " | download tools "
-input.runners.save_list = {
- "update", "engine", "platform", "url", "rsync", "texroot", "dryrun", "make", "delete", "context"
-}
-
messages.help = [[
---update update minimal tree
---engine tex engine (luatex, pdftex, xetex)
---platform platform (windows, linux, linux-64, osx-intel, osx-ppc)
---url repository url (rsync://contextgarden.net/minimals)
---rsync rsync binary (rsync)
+--platform=string platform (windows, linux, linux-64, osx-intel, osx-ppc)
+--server=string repository url (rsync://contextgarden.net)
+--module=string repository url (minimals)
+--repository=string specify version (current, experimental)
+--context=string specify version (current, latest, yyyy.mm.dd)
+--rsync=string rsync binary (rsync)
--texroot installation directory (not guessed for the moment)
---dryrun just show what will be done
+--engine tex engine (luatex, pdftex, xetex)
+--force instead of a dryrun, do the real thing
+--update update minimal tree
--make also make formats and generate file databases
---delete delete unused files
---context=string specify version (current, experimental, yyyy.mm.dd)
+--keep don't delete unused or obsolete files
]]
input.verbose = true
+scripts.savestate = true
+
+if scripts.savestate then
+
+ states.load("status-of-update.lua")
+
+ -- tag, value, default, persistent
+
+ input.starttiming(states)
+
+ states.set("info.version",0.1) -- ok
+ states.set("info.count",(states.get("info.count") or 0) + 1,1,false) -- ok
+ states.set("info.comment","this file contains the settings of the last 'mtxrun --script update ' run",false) -- ok
+ states.set("info.date",os.date("!%Y-%m-%d %H:%M:%S")) -- ok
+
+ states.set("rsync.program", environment.argument("rsync"), "rsync", true) -- ok
+ states.set("rsync.server", environment.argument("server"), "contextgarden.net::", true) -- ok
+ states.set("rsync.module", environment.argument("module"), "minimals", true) -- ok
+ states.set("rsync.flags.normal", environment.argument("flags"), "-rpztlv --stats", true) -- ok
+ states.set("rsync.flags.delete", nil, "--delete", true) -- ok
+
+ states.set("paths.root", environment.argument("texroot"), "tex", true) -- ok
+
+ states.set("context.version", environment.argument("context"), "current", true) -- ok
+
+ local valid = table.tohash(scripts.update.repositories)
+ for r in string.gmatch(environment.argument("repository") or "current","([^, ]+)") do
+ if valid[r] then states.set("repositories." .. r, true) end
+ end
+ local valid = scripts.update.engines
+ for r in string.gmatch(environment.argument("engine") or "all","([^, ]+)") do
+ if r == "all" then
+ for k, v in pairs(valid) do
+ if k ~= "all" then
+ states.set("engines." .. k, true)
+ end
+ end
+ elseif valid[r] then
+ states.set("engines." .. r, true)
+ end
+ end
+ local valid = scripts.update.platforms
+ for r in string.gmatch(environment.argument("platform") or os.currentplatform(),"([^, ]+)") do
+ if valid[r] then states.set("platforms." .. r, true) end
+ end
+
+ local valid = table.tohash(scripts.update.formats)
+ for r in string.gmatch(environment.argument("formats") or "","([^, ]+)") do
+ if valid[r] then states.set("formats." .. r, true) end
+ end
+
+ states.set("formats.cont-en", true)
+ states.set("formats.cont-nl", true)
+ states.set("formats.metafun", true)
+
+ -- modules
+
+ logs.report("state","loaded")
+
+end
+
if environment.argument("update") then
- logs.report("update","start")
scripts.update.synchronize()
- logs.report("update","done")
+ if environment.argument("make") then
+ scripts.update.make()
+ end
elseif environment.argument("make") then
- logs.report("make","start")
scripts.update.make()
- logs.report("make","done")
else
input.help(banner,messages.help)
end
+
+if scripts.savestate then
+ input.stoptiming(states)
+ states.set("info.runtime",tonumber(input.elapsedtime(states)))
+ if environment.argument("force") then
+ states.save()
+ logs.report("state","saved")
+ end
+end
diff --git a/scripts/context/lua/mtx-watch.lua b/scripts/context/lua/mtx-watch.lua
index 96f6f7eb2..f9e81da42 100644
--- a/scripts/context/lua/mtx-watch.lua
+++ b/scripts/context/lua/mtx-watch.lua
@@ -11,119 +11,123 @@ texmf.instance = instance -- we need to get rid of this / maybe current instance
scripts = scripts or { }
scripts.watch = scripts.watch or { }
-function scripts.watch.watch()
- local delay = environment.argument("delay") or 5
- local logpath = environment.argument("logpath") or ""
- local pipe = environment.argument("pipe") or false
- if #environment.files > 0 then
- for _, path in ipairs(environment.files) do
- logs.report("watch", "watching path ".. path)
- end
- local function glob(files,path)
- for name in lfs.dir(path) do
- if name:find("^%.") then
- -- skip . and ..
- else
- name = path .. "/" .. name
- local a = lfs.attributes(name)
- if not a then
- -- weird
- elseif a.mode == "directory" then
- if name:find("graphics$") or name:find("figures$") or name:find("resources$") then
- -- skip these too
- else
- glob(files,name)
+do
+
+ function scripts.watch.watch()
+ local delay = environment.argument("delay") or 5
+ local logpath = environment.argument("logpath") or ""
+ local pipe = environment.argument("pipe") or false
+ if #environment.files > 0 then
+ for _, path in ipairs(environment.files) do
+ logs.report("watch", "watching path ".. path)
+ end
+ local function glob(files,path)
+ for name in lfs.dir(path) do
+ if name:find("^%.") then
+ -- skip . and ..
+ else
+ name = path .. "/" .. name
+ local a = lfs.attributes(name)
+ if not a then
+ -- weird
+ elseif a.mode == "directory" then
+ if name:find("graphics$") or name:find("figures$") or name:find("resources$") then
+ -- skip these too
+ else
+ glob(files,name)
+ end
+ elseif name:find(".%luj$") then
+ files[name] = a.change or a.ctime or a.modification or a.mtime
end
- elseif name:find(".%luj$") then
- files[name] = a.change or a.ctime or a.modification or a.mtime
end
end
end
- end
- local n = 0
- local function process()
- local done = false
- for _, path in ipairs(environment.files) do
- lfs.chdir(path)
- local files = { }
- glob(files,path)
- table.sort(files) -- what gets sorted here
- for name, time in pairs(files) do
- --~ local ok, joblog = xpcall(function() return dofile(name) end, function() end )
- local ok, joblog = pcall(dofile,name)
- if ok and joblog then
- if joblog.status == "processing" then
- logs.report("watch",string.format("aborted job, %s added to queue",name))
- joblog.status = "queued"
- io.savedata(name, table.serialize(joblog,true))
- elseif joblog.status == "queued" then
- local command = joblog.command
- if command then
- local replacements = {
- inputpath = (joblog.paths and joblog.paths.input ) or ".",
- outputpath = (joblog.paths and joblog.paths.output) or ".",
- filename = joblog.filename or "",
- }
- command = command:gsub("%%(.-)%%", replacements)
- if command ~= "" then
- joblog.status = "processing"
- joblog.runtime = os.time() -- os.clock()
- io.savedata(name, table.serialize(joblog,true))
- logs.report("watch",string.format("running: %s", command))
- local newpath = file.dirname(name)
- io.flush()
- local result = ""
- if newpath ~= "" and newpath ~= "." then
- local oldpath = lfs.currentdir()
- lfs.chdir(newpath)
- if pipe then result = os.resultof(command) else result = os.spawn(command) end
- lfs.chdir(oldpath)
+ local function process()
+ local done = false
+ for _, path in ipairs(environment.files) do
+ lfs.chdir(path)
+ local files = { }
+ glob(files,path)
+ table.sort(files) -- what gets sorted here
+ for name, time in pairs(files) do
+ --~ local ok, joblog = xpcall(function() return dofile(name) end, function() end )
+ local ok, joblog = pcall(dofile,name)
+ if ok and joblog then
+ if joblog.status == "processing" then
+ logs.report("watch",string.format("aborted job, %s added to queue",name))
+ joblog.status = "queued"
+ io.savedata(name, table.serialize(joblog,true))
+ elseif joblog.status == "queued" then
+ local command = joblog.command
+ if command then
+ local replacements = {
+ inputpath = (joblog.paths and joblog.paths.input ) or ".",
+ outputpath = (joblog.paths and joblog.paths.output) or ".",
+ filename = joblog.filename or "",
+ }
+ command = command:gsub("%%(.-)%%", replacements)
+ if command ~= "" then
+ joblog.status = "processing"
+ joblog.runtime = os.time() -- os.clock()
+ io.savedata(name, table.serialize(joblog,true))
+ logs.report("watch",string.format("running: %s", command))
+ local newpath = file.dirname(name)
+ io.flush()
+ local result = ""
+ if newpath ~= "" and newpath ~= "." then
+ local oldpath = lfs.currentdir()
+ lfs.chdir(newpath)
+ if pipe then result = os.resultof(command) else result = os.spawn(command) end
+ lfs.chdir(oldpath)
+ else
+ if pipe then result = os.resultof(command) else result = os.spawn(command) end
+ end
+ logs.report("watch",string.format("return value: %s", result))
+ done = true
+ local path, base = replacements.outputpath, file.basename(replacements.filename)
+ joblog.runtime = os.time() - joblog.runtime -- os.clock() - joblog.runtime
+ joblog.result = file.replacesuffix(file.join(path,base),"pdf")
+ joblog.size = lfs.attributes(joblog.result,"size")
+ joblog.status = "finished"
else
- if pipe then result = os.resultof(command) else result = os.spawn(command) end
+ joblog.status = "invalid command"
end
- logs.report("watch",string.format("return value: %s", result))
- done = true
- local path, base = replacements.outputpath, file.basename(replacements.filename)
- joblog.runtime = os.time() - joblog.runtime -- os.clock() - joblog.runtime
- joblog.result = file.replacesuffix(file.join(path,base),"pdf")
- joblog.size = lfs.attributes(joblog.result,"size")
- joblog.status = "finished"
else
- joblog.status = "invalid command"
+ joblog.status = "no command"
end
- else
- joblog.status = "no command"
- end
- -- pcall, when error sleep + again
- io.savedata(name, table.serialize(joblog,true))
- if logpath ~= "" then
- local name = string.format("%s/%s%04i%09i.lua", logpath, os.time(), math.floor((os.clock()*100)%1000), math.random(99999999))
+ -- pcall, when error sleep + again
io.savedata(name, table.serialize(joblog,true))
- logs.report("watch", "saving joblog ".. name)
+ if logpath ~= "" then
+ local name = string.format("%s/%s%04i%09i.lua", logpath, os.time(), math.floor((os.clock()*100)%1000), math.random(99999999))
+ io.savedata(name, table.serialize(joblog,true))
+ logs.report("watch", "saving joblog ".. name)
+ end
end
end
end
end
end
- end
- local function wait()
- io.flush()
- if not done then
- n = n + 1
- if n >= 10 then
- logs.report("watch", "still sleeping " .. os.clock())
- n = 0
+ local n, start = 0, os.clock()
+ local function wait()
+ io.flush()
+ if not done then
+ n = n + 1
+ if n >= 10 then
+ logs.report("watch", string.format("run time: %i seconds, memory usage: %0.3g MB", os.clock() - start, (status.luastate_bytes/1024)/1000))
+ n = 0
+ end
+ os.sleep(delay)
end
- os.sleep(delay)
end
+ while true do
+ pcall(process)
+ pcall(wait)
+ end
+ else
+ logs.report("watch", "no paths to watch")
end
- while true do
- pcall(process)
- pcall(wait)
- end
- else
- logs.report("watch", "no paths to watch")
end
+
end
function scripts.watch.collect_logs(path) -- clean 'm up too
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index d0c7469e0..a3cbb35e0 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -377,6 +377,31 @@ function string:split_settings() -- no {} handling, see l-aux for lpeg variant
end
end
+local patterns_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["+"] = "%+",
+ ["*"] = "%*",
+ ["%"] = "%%",
+ ["("] = "%)",
+ [")"] = "%)",
+ ["["] = "%[",
+ ["]"] = "%]",
+}
+
+
+function string:pattesc()
+ return (self:gsub(".",patterns_escapes))
+end
+
+function string:tohash()
+ local t = { }
+ for s in self:gmatch("([^, ]+)") do -- lpeg
+ t[s] = true
+ end
+ return t
+end
+
-- filename : l-lpeg.lua
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -420,7 +445,6 @@ end
-
-- filename : l-table.lua
-- comment : split off from luat-lib
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -502,7 +526,8 @@ end
--~ return t
--~ end
-function table.merge(t, ...)
+function table.merge(t, ...) -- first one is target
+ t = t or {}
local lst = {...}
for i=1,#lst do
for k, v in pairs(lst[i]) do
@@ -1031,6 +1056,14 @@ function table.tohash(t)
return h
end
+function table.fromhash(t)
+ local h = { }
+ for k, v in pairs(t) do -- no ipairs here
+ if v then h[#h+1] = k end
+ end
+ return h
+end
+
function table.contains(t, v)
if t then
for i=1, #t do
@@ -1062,6 +1095,22 @@ end
--~ return table.serialize(a) == table.serialize(b)
--~ end
+function table.clone(t,p) -- t is optional or nil or table
+ if not p then
+ t, p = { }, t or { }
+ elseif not t then
+ t = { }
+ end
+ setmetatable(t, { __index = function(_,key) return p[key] end })
+ return t
+end
+
+
+function table.hexed(t,seperator)
+ local tt = { }
+ for i=1,#t do tt[i] = string.format("0x%04X",t[i]) end
+ return table.concat(tt,seperator or " ")
+end
-- filename : l-io.lua
@@ -1133,38 +1182,10 @@ function io.noflines(f)
return n
end
---~ t, f, n = os.clock(), io.open("testbed/sample-utf16-bigendian-big.txt",'rb'), 0
---~ for a in io.characters(f) do n = n + 1 end
---~ print(string.format("characters: %s, time: %s", n, os.clock()-t))
-
do
local sb = string.byte
---~ local nextchar = {
---~ [ 4] = function(f)
---~ return f:read(1), f:read(1), f:read(1), f:read(1)
---~ end,
---~ [ 2] = function(f)
---~ return f:read(1), f:read(1)
---~ end,
---~ [ 1] = function(f)
---~ return f:read(1)
---~ end,
---~ [-2] = function(f)
---~ local a = f:read(1)
---~ local b = f:read(1)
---~ return b, a
---~ end,
---~ [-4] = function(f)
---~ local a = f:read(1)
---~ local b = f:read(1)
---~ local c = f:read(1)
---~ local d = f:read(1)
---~ return d, c, b, a
---~ end
---~ }
-
local nextchar = {
[ 4] = function(f)
return f:read(1,1,1,1)
@@ -1488,18 +1509,27 @@ function os.resultof(command)
return io.popen(command,"r"):read("*all")
end
-if not os.exec then -- still not ok
- os.exec = os.execute
-end
-if not os.spawn then -- still not ok
- os.spawn = os.execute
+if not os.exec then os.exec = os.execute end
+if not os.spawn then os.spawn = os.execute end
+
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+
+if not io.fileseparator then
+ if string.find(os.getenv("PATH"),";") then
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ else
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ end
end
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+
function os.launch(str)
if os.platform == "windows" then
- os.spawn("start " .. str)
+ os.execute("start " .. str) -- os.spawn ?
else
- os.spawn(str .. " &")
+ os.execute(str .. " &") -- os.spawn ?
end
end
@@ -1514,19 +1544,15 @@ if not os.times then
-- cstime = children system time
function os.times()
return {
- utime = os.clock(), -- user
- stime = 0, -- system
- cutime = 0, -- children user
- cstime = 0, -- children system
+ utime = os.gettimeofday(), -- user
+ stime = 0, -- system
+ cutime = 0, -- children user
+ cstime = 0, -- children system
}
end
end
-if os.gettimeofday then
- os.clock = os.gettimeofday
-else
- os.gettimeofday = os.clock
-end
+os.gettimeofday = os.gettimeofday or os.clock
do
local startuptime = os.gettimeofday()
@@ -1553,11 +1579,11 @@ if not versions then versions = { } end versions['l-file'] = 1.001
if not file then file = { } end
function file.removesuffix(filename)
- return filename:gsub("%.%a+$", "")
+ return filename:gsub("%.[%a%d]+$", "")
end
function file.addsuffix(filename, suffix)
- if not filename:find("%.%a-$") then
+ if not filename:find("%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1565,7 +1591,11 @@ function file.addsuffix(filename, suffix)
end
function file.replacesuffix(filename, suffix)
- return (filename:gsub("%.%a+$", "." .. suffix))
+ if not filename:find("%.[%a%d]+$") then
+ return filename .. "." .. suffix
+ else
+ return (filename:gsub("%.[%a%d]+$","."..suffix))
+ end
end
function file.dirname(name)
@@ -1584,12 +1614,36 @@ function file.extname(name)
return name:match("^.+%.([^/\\]-)$") or ""
end
+function file.stripsuffix(name)
+ return (name:gsub("%.[%a%d]+$",""))
+end
+
+--~ function file.join(...)
+--~ local t = { ... }
+--~ for i=1,#t do
+--~ t[i] = (t[i]:gsub("\\","/")):gsub("/+$","")
+--~ end
+--~ return table.concat(t,"/")
+--~ end
+
+--~ print(file.join("x/","/y"))
+--~ print(file.join("http://","/y"))
+--~ print(file.join("http://a","/y"))
+--~ print(file.join("http:///a","/y"))
+--~ print(file.join("//nas-1","/y"))
+
function file.join(...)
- local t = { ... }
- for i=1,#t do
- t[i] = (t[i]:gsub("\\","/")):gsub("/+$","")
+ local pth = table.concat({...},"/")
+ pth = pth:gsub("\\","/")
+ local a, b = pth:match("^(.*://)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
+ end
+ a, b = pth:match("^(//)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
end
- return table.concat(t,"/")
+ return (pth:gsub("//+","/"))
end
function file.is_writable(name)
@@ -1888,6 +1942,8 @@ xml.trace_lpath = false
xml.trace_print = false
xml.trace_remap = false
+-- todo: some things per xml file, liek namespace remapping
+
--[[ldx--
First a hack to enable namespace resolving. A namespace is characterized by
a . The following function associates a namespace prefix with a
@@ -2506,7 +2562,7 @@ function xml.text(root)
return (root and xml.tostring(root)) or ""
end
-function xml.content(root)
+function xml.content(root) -- bugged
return (root and root.dt and xml.tostring(root.dt)) or ""
end
@@ -2837,14 +2893,13 @@ do
local t = {...} for i=1,#t do if s == t[i] then return true end end return false
end
- function xml.traverse(root,pattern,handle,reverse,index,parent,wildcard)
+ local function traverse(root,pattern,handle,reverse,index,parent,wildcard)
if not root then -- error
return false
elseif pattern == false then -- root
handle(root,root.dt,root.ri)
return false
elseif pattern == true then -- wildcard
- local traverse = xml.traverse
local rootdt = root.dt
if rootdt then
local start, stop, step = 1, #rootdt, 1
@@ -2875,7 +2930,7 @@ do
elseif command == 11 then -- parent
local ep = root.__p__ or parent
if index < #pattern then
- if not xml.traverse(ep,pattern,handle,reverse,index+1,root) then return false end
+ if not traverse(ep,pattern,handle,reverse,index+1,root) then return false end
elseif handle(root,rootdt,k) then
return false
end
@@ -2890,12 +2945,11 @@ do
if command == 11 then -- parent
local ep = root.__p__ or parent
if index < #pattern then
- if not xml.traverse(ep,pattern,handle,reverse,index+1,root) then return false end
+ if not traverse(ep,pattern,handle,reverse,index+1,root) then return false end
elseif handle(root,rootdt,k) then
return false
end
else
- local traverse = xml.traverse
local rootdt = root.dt
local start, stop, step, n, dn = 1, #rootdt, 1, 0, 1
if command == 30 then
@@ -2989,6 +3043,7 @@ do
if index == #pattern then
if handle(root,rootdt,root.ri or k) then return false end
if wildcard and multiple then
+--~ if wildcard or multiple then
if not traverse(e,pattern,handle,reverse,index,root,true) then return false end
end
else
@@ -3049,6 +3104,8 @@ do
return true
end
+ xml.traverse = traverse
+
end
--[[ldx--
@@ -3119,7 +3176,7 @@ do
traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end, 'reverse')
return dt and dt[dk], rt, dt, dk
end
- function xml.filters.count(root, pattern,everything)
+ function xml.filters.count(root,pattern,everything)
local n = 0
traverse(root, lpath(pattern), function(r,d,t)
if everything or type(d[t]) == "table" then
@@ -3189,13 +3246,15 @@ do
local rt, dt, dk
traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end)
local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at)
- return (ekat and ekat[arguments]) or ""
+ return (ekat and (ekat[arguments] or ekat[arguments:gsub("^([\"\'])(.*)%1$","%2")])) or ""
end
- function xml.filters.text(root,pattern,arguments)
+ function xml.filters.text(root,pattern,arguments) -- ?? why index
local dtk, rt, dt, dk = xml.filters.index(root,pattern,arguments)
if dtk then
local dtkdt = dtk.dt
- if #dtkdt == 1 and type(dtkdt[1]) == "string" then
+ if not dtkdt then
+ return "", rt, dt, dk
+ elseif #dtkdt == 1 and type(dtkdt[1]) == "string" then
return dtkdt[1], rt, dt, dk
else
return xml.tostring(dtkdt), rt, dt, dk
@@ -3260,7 +3319,7 @@ do
Which will print all the titles in the document. The iterator variant takes
- 1.5 times the runtime of the function variant which si due to the overhead in
+ 1.5 times the runtime of the function variant which is due to the overhead in
creating the wrapper. So, instead of:
@@ -3279,6 +3338,10 @@ do
return coroutine.wrap(function() traverse(root, lpath(pattern), coroutine.yield, reverse) end)
end
+ function xml.elements_only(root,pattern,reverse)
+ return coroutine.wrap(function() traverse(root, lpath(pattern), function(r,d,k) coroutine.yield(d[k]) end, reverse) end)
+ end
+
function xml.each_element(root, pattern, handle, reverse)
local ok
traverse(root, lpath(pattern), function(r,d,k) ok = true handle(r,d,k) end, reverse)
@@ -3424,10 +3487,20 @@ do
end
end
- function xml.include(xmldata,pattern,attribute,recursive,findfile)
+ local function load_data(name) -- == io.loaddata
+ local f, data = io.open(name), ""
+ if f then
+ data = f:read("*all",'b') -- 'b' ?
+ f:close()
+ end
+ return data
+ end
+
+ function xml.include(xmldata,pattern,attribute,recursive,loaddata)
-- parse="text" (default: xml), encoding="" (todo)
- pattern = pattern or 'include'
-- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or load_data
local function include(r,d,k)
local ek, name = d[k], nil
if not attribute or attribute == "" then
@@ -3442,29 +3515,21 @@ do
end
end
end
- if name then
- name = (findfile and findfile(name)) or name
- if name ~= "" then
- local f = io.open(name)
- if f then
- if ek.at["parse"] == "text" then -- for the moment hard coded
- d[k] = xml.escaped(f:read("*all"))
- else
- local xi = xml.load(f)
- if recursive then
- xml.include(xi,pattern,attribute,recursive,findfile)
- end
- xml.assign(d,k,xi)
- end
- f:close()
- else
- xml.empty(d,k)
- end
- else
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ xml.empty(d,k)
+ elseif ek.at["parse"] == "text" then -- for the moment hard coded
+ d[k] = xml.escaped(data)
+ else
+ local xi = xml.convert(data)
+ if not xi then
xml.empty(d,k)
+ else
+ if recursive then
+ xml.include(xi,pattern,attribute,recursive,loaddata)
+ end
+ xml.assign(d,k,xi)
end
- else
- xml.empty(d,k)
end
end
xml.each_element(xmldata, pattern, include)
@@ -3948,19 +4013,13 @@ os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
if not io.fileseparator then
if string.find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", "windows"
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", "unix"
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
end
end
-if not os.platform then
- if io.pathseparator == ";" then
- os.platform = "windows"
- else
- os.platform = "unix"
- end
-end
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
-- arg normalization
--
@@ -4159,17 +4218,22 @@ input.formats ['lua'] = 'LUAINPUTS' -- new
input.suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
-- here we catch a few new thingies (todo: add these paths to context.tmf)
+--
+-- FONTFEATURES = .;$TEXMF/fonts/fea//
+-- FONTCIDMAPS = .;$TEXMF/fonts/cid//
-function input.checkconfigdata(instance)
+function input.checkconfigdata(instance) -- not yet ok, no time for debugging now
local function fix(varname,default)
local proname = varname .. "." .. instance.progname or "crap"
- if not instance.environment[proname] and not instance.variables[proname] == "" and not instance.environment[varname] and not instance.variables[varname] == "" then
- instance.variables[varname] = default
+ local p = instance.environment[proname]
+ local v = instance.environment[varname]
+ if not ((p and p ~= "") or (v and v ~= "")) then
+ instance.variables[varname] = default -- or environment?
end
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS")
- fix("FONTFEATURES", ".;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
end
-- backward compatible ones
@@ -4270,6 +4334,11 @@ function input.reset()
end
+function input.reset_hashes(instance)
+ instance.lists = { }
+ instance.found = { }
+end
+
function input.bare_variable(str)
-- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
@@ -4335,7 +4404,7 @@ input.settrace(tonumber(os.getenv("MTX.INPUT.TRACE") or os.getenv("MTX_INPUT_TRA
-- loading the database files.
do
- local clock = os.clock
+ local clock = os.gettimeofday or os.clock
function input.starttiming(instance)
if instance then
@@ -4609,6 +4678,7 @@ function input.aux.extend_texmf_var(instance,specification) -- crap
instance.variables['TEXMF'] = "{" .. instance.variables['TEXMF'] .. "}"
end
input.expand_variables(instance)
+ input.reset_hashes(instance)
end
-- locators
@@ -4624,28 +4694,6 @@ function input.locatedatabase(instance,specification)
return input.methodhandler('locators', instance, specification)
end
---~ poor mans solution, from before we had lfs.isdir
---~
---~ function input.locators.tex(instance,specification)
---~ if specification and specification ~= '' then
---~ local files = {
---~ file.join(specification,'files'..input.lucsuffix),
---~ file.join(specification,'files'..input.luasuffix),
---~ file.join(specification,input.lsrname)
---~ }
---~ for _, filename in pairs(files) do
---~ local f = io.open(filename)
---~ if f then
---~ input.logger('! tex locator', specification..' found')
---~ input.aux.append_hash(instance,'file',specification,filename)
---~ f:close()
---~ return
---~ end
---~ end
---~ input.logger('? tex locator', specification..' not found')
---~ end
---~ end
-
function input.locators.tex(instance,specification)
if specification and specification ~= '' and lfs.isdir(specification) then
input.logger('! tex locator', specification..' found')
@@ -5004,8 +5052,6 @@ function input.expand_variables(instance)
for k,v in pairs(instance.expansions) do
instance.expansions[k] = v:gsub("\\", '/')
end
- -- ##########
- --~ input.splitexpansions(instance) -- better not, fuzzy
end
function input.aux.expand_vars(instance,lst) -- simple vars
@@ -5163,15 +5209,12 @@ do
end
function input.register_extra_path(instance,paths,subpaths)
+ local ep = instance.extra_paths or { }
+ local n = #ep
if paths and paths ~= "" then
- local ep = instance.extra_paths
- if not ep then
- ep = { }
- instance.extra_paths = ep
- end
- local n = #ep
- if subpath and subpaths ~= "" then
+ if subpaths and subpaths ~= "" then
for p in paths:gmatch("[^,]+") do
+ -- we gmatch each step again, not that fast, but used seldom
for s in subpaths:gmatch("[^,]+") do
local ps = p .. "/" .. s
if not done[ps] then
@@ -5188,10 +5231,24 @@ do
end
end
end
- if n < #ep then
- instance.lists = { }
+ elseif subpaths and subpaths ~= "" then
+ for i=1,n do
+ -- we gmatch each step again, not that fast, but used seldom
+ for s in subpaths:gmatch("[^,]+") do
+ local ps = ep[i] .. "/" .. s
+ if not done[ps] then
+ ep[#ep+1] = input.clean_path(ps)
+ done[ps] = true
+ end
+ end
end
end
+ if #ep > 0 then
+ instance.extra_paths = ep -- register paths
+ end
+ if #ep > n then
+ instance.lists = { } -- erase the cache
+ end
end
end
@@ -5446,7 +5503,7 @@ input.is_readable.tex = input.is_readable.file
-- name/name
function input.aux.collect_files(instance,names)
- local filelist = nil
+ local filelist = { }
for _, fname in pairs(names) do
if fname then
if input.trace > 2 then
@@ -5478,15 +5535,20 @@ function input.aux.collect_files(instance,names)
if blobfile then
if type(blobfile) == 'string' then
if not dname or blobfile:find(dname) then
- if not filelist then filelist = { } end
- -- input.logger('= collected', blobpath.." | "..blobfile.." | "..bname)
- filelist[#filelist+1] = file.join(blobpath,blobfile,bname)
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,blobfile,bname), -- search
+ input.concatinators[hash.type](blobpath,blobfile,bname) -- result
+ }
end
else
for _, vv in pairs(blobfile) do
if not dname or vv:find(dname) then
- if not filelist then filelist = { } end
- filelist[#filelist+1] = file.join(blobpath,vv,bname)
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,vv,bname), -- search
+ input.concatinators[hash.type](blobpath,vv,bname) -- result
+ }
end
end
end
@@ -5497,7 +5559,11 @@ function input.aux.collect_files(instance,names)
end
end
end
- return filelist
+ if #filelist > 0 then
+ return filelist
+ else
+ return nil
+ end
end
function input.suffix_of_format(str)
@@ -5516,54 +5582,30 @@ function input.suffixes_of_format(str)
end
end
---~ function input.aux.qualified_path(filename) -- make platform dependent / not good yet
---~ return
---~ filename:find("^%.+/") or
---~ filename:find("^/") or
---~ filename:find("^%a+%:") or
---~ filename:find("^%a+##")
---~ end
-
---~ function input.normalize_name(original)
---~ -- internally we use type##spec##subspec ; this hackery slightly slows down searching
---~ local str = original or ""
---~ str = str:gsub("::", "##") -- :: -> ##
---~ str = str:gsub("^(%a+)://" ,"%1##") -- zip:// -> zip##
---~ str = str:gsub("(.+)##(.+)##/(.+)","%1##%2##%3") -- ##/spec -> ##spec
---~ if (input.trace>1) and (original ~= str) then
---~ input.logger('= normalizer',original.." -> "..str)
---~ end
---~ return str
---~ end
+do
-do -- called about 700 times for an empty doc (font initializations etc)
+ -- called about 700 times for an empty doc (font initializations etc)
-- i need to weed the font files for redundant calls
local letter = lpeg.R("az","AZ")
- local separator = lpeg.P("##")
+ local separator = lpeg.P("://")
- local qualified = lpeg.P(".")^0 * lpeg.P("/") + letter*lpeg.P(":") + letter^1*separator
- local normalized = lpeg.Cs(
- (letter^1*(lpeg.P("://")/"##") * (1-lpeg.P(false))^1) +
- (lpeg.P("::")/"##" + (1-separator)^1*separator*(1-separator)^1*separator*(lpeg.P("/")/"") + 1)^0
- )
+ local qualified = lpeg.P(".")^0 * lpeg.P("/") + letter*lpeg.P(":") + letter^1*separator
+ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
- -- ./name ../name /name c: zip## (todo: use url internally and get rid of ##)
+ -- ./name ../name /name c: ://
function input.aux.qualified_path(filename)
return qualified:match(filename)
end
+ function input.aux.rootbased_path(filename)
+ return rootbased:match(filename)
+ end
- -- zip:// -> zip## ; :: -> ## ; aa##bb##/cc -> aa##bb##cc
function input.normalize_name(original)
- local str = normalized:match(original or "")
- if input.trace > 1 and original ~= str then
- input.logger('= normalizer',original.." -> "..str)
- end
- return str
+ return original
end
-end
--- split the next one up, better for jit
+end
function input.aux.register_in_trees(instance,name)
if not name:find("^%.") then
@@ -5571,11 +5613,13 @@ function input.aux.register_in_trees(instance,name)
end
end
+-- split the next one up, better for jit
+
function input.aux.find_file(instance,filename) -- todo : plugin (scanners, checkers etc)
local result = { }
local stamp = nil
- filename = input.normalize_name(filename)
- filename = file.collapse_path(filename:gsub("\\","/"))
+ filename = input.normalize_name(filename) -- elsewhere
+ filename = file.collapse_path(filename:gsub("\\","/")) -- elsewhere
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
@@ -5647,7 +5691,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local typespec = input.variable_of_format(filetype)
local pathlist = input.expanded_path_list(instance,typespec)
if not pathlist or #pathlist == 0 then
- -- no pathlist, access check only
+ -- no pathlist, access check only / todo == wildcard
if input.trace > 2 then
input.logger('? filename',filename)
input.logger('? filetype',filetype or '?')
@@ -5662,8 +5706,9 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
-- this is actually 'other text files' or 'any' or 'whatever'
local filelist = input.aux.collect_files(instance,wantedfiles)
- filename = filelist and filelist[1]
- if filename then
+ local lf = filelist and filelist[1]
+ if fl then
+ filename = fl[3]
result[#result+1] = filename
done = true
end
@@ -5673,8 +5718,8 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local doscan, recurse
if input.trace > 2 then
input.logger('? filename',filename)
- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
+ -- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
+ -- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
end
-- a bit messy ... esp the doscan setting here
for _, path in pairs(pathlist) do
@@ -5687,16 +5732,18 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
-- compare list entries with permitted pattern
pathname = pathname:gsub("([%-%.])","%%%1") -- this also influences
pathname = pathname:gsub("/+$", '/.*') -- later usage of pathname
- pathname = pathname:gsub("//", '/.-/')
+ pathname = pathname:gsub("//", '/.-/') -- not ok for /// but harmless
local expr = "^" .. pathname
-- input.debug('?',expr)
- for _, f in pairs(filelist) do
+ for _, fl in ipairs(filelist) do
+ local f = fl[2]
if f:find(expr) then
-- input.debug('T',' '..f)
if input.trace > 2 then
input.logger('= found in hash',f)
end
- result[#result+1] = f
+ --- todo, test for readable
+ result[#result+1] = fl[3]
input.aux.register_in_trees(instance,f) -- for tracing used files
done = true
if not instance.allresults then break end
@@ -5706,7 +5753,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
if not done and doscan then
- -- check if on disk / unchecked / does not work at all
+ -- check if on disk / unchecked / does not work at all / also zips
if input.method_is_file(pathname) then -- ?
local pname = pathname:gsub("%.%*$",'')
if not pname:find("%*") then
@@ -5783,10 +5830,7 @@ end
if not input.concatinators then input.concatinators = { } end
-function input.concatinators.tex(tag,path,name)
- return tag .. '/' .. path .. '/' .. name
-end
-
+input.concatinators.tex = file.join
input.concatinators.file = input.concatinators.tex
function input.find_files(instance,filename,filetype,mustexist)
@@ -5988,15 +6032,6 @@ function input.aux.register_file(files, name, path)
end
end
--- zip:: zip## zip://
--- zip::pathtozipfile::pathinzipfile (also: pathtozipfile/pathinzipfile)
--- file::name
--- tex::name
--- kpse::name
--- kpse::format::name
--- parent::n::name
--- parent::name (default 2)
-
if not input.finders then input.finders = { } end
if not input.openers then input.openers = { } end
if not input.loaders then input.loaders = { } end
@@ -6006,30 +6041,37 @@ input.openers.notfound = { nil }
input.loaders.notfound = { false, nil, 0 }
function input.splitmethod(filename)
- local method, specification = filename:match("^(.-)##(.+)$")
- if method and specification then
- return method, specification
+ if not filename then
+ return { } -- safeguard
+ elseif type(filename) == "table" then
+ return filename -- already split
+ elseif not filename:find("://") then
+ return { scheme="file", path = filename, original=filename } -- quick hack
else
- return 'tex', filename
+ return url.hashed(filename)
end
end
function input.method_is_file(filename)
- local method, specification = input.splitmethod(filename)
- return method == 'tex' or method == 'file'
+ return input.splitmethod(filename).scheme == 'file'
+end
+
+function table.sequenced(t,sep) -- temp here
+ local s = { }
+ for k, v in pairs(t) do
+ s[#s+1] = k .. "=" .. v
+ end
+ return table.concat(s, sep or " | ")
end
function input.methodhandler(what, instance, filename, filetype) -- ...
- local method, specification = input.splitmethod(filename)
- if method and specification then -- redundant
- if input[what][method] then
- input.logger('= handler',filename.." -> "..what.." | "..method.." | "..specification)
- return input[what][method](instance,specification,filetype)
- else
- return nil
- end
+ local specification = (type(filename) == "string" and input.splitmethod(filename)) or filename -- no or { }, let it bomb
+ local scheme = specification.scheme
+ if input[what][scheme] then
+ input.logger('= handler',specification.original .." -> " .. what .. " -> " .. table.sequenced(specification))
+ return input[what][scheme](instance,filename,filetype) -- todo: specification
else
- return input[what].tex(instance,filename,filetype)
+ return input[what].tex(instance,filename,filetype) -- todo: specification
end
end
@@ -6063,6 +6105,8 @@ function input.texdatablob(instance, filename, filetype)
return data or ""
end
+input.loadtexfile = input.texdatablob
+
function input.openfile(filename) -- brrr texmf.instance here / todo ! ! ! ! !
local fullname = input.findtexfile(texmf.instance, filename)
if fullname and (fullname ~= "") then
@@ -6641,7 +6685,7 @@ function input.aux.load_data(instance,pathname,dataname,filename)
end
end
--- we will make a better format, maybe something xml or just text
+-- we will make a better format, maybe something xml or just text or lua
input.automounted = input.automounted or { }
@@ -6879,6 +6923,191 @@ logs.set_level('error')
logs.set_method('tex')
+if not modules then modules = { } end modules ['luat-sta'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+states = states or { }
+states.data = states.data or { }
+states.hash = states.hash or { }
+states.tag = states.tag or ""
+states.filename = states.filename or ""
+
+function states.save(filename,tag)
+ tag = tag or states.tag
+ filename = file.addsuffix(filename or states.filename,'lus')
+ io.savedata(filename,
+ "-- generator : luat-sta.lua\n" ..
+ "-- state tag : " .. tag .. "\n\n" ..
+ table.serialize(states.data[tag or states.tag] or {},true)
+ )
+end
+
+function states.load(filename,tag)
+ states.filename = filename
+ states.tag = tag or "whatever"
+ states.filename = file.addsuffix(states.filename,'lus')
+ states.data[states.tag], states.hash[states.tag] = (io.exists(filename) and dofile(filename)) or { }, { }
+end
+
+function states.set_by_tag(tag,key,value,default,persistent)
+ local d, h = states.data[tag], states.hash[tag]
+ if d then
+ local dkey, hkey = key, key
+ local pre, post = key:match("(.+)%.([^%.]+)$")
+ if pre and post then
+ for k in pre:gmatch("[^%.]+") do
+ local dk = d[k]
+ if not dk then
+ dk = { }
+ d[k] = dk
+ end
+ d = dk
+ end
+ dkey, hkey = post, key
+ end
+ if type(value) == nil then
+ value = value or default
+ elseif persistent then
+ value = value or d[dkey] or default
+ else
+ value = value or default
+ end
+ d[dkey], h[hkey] = value, value
+ end
+end
+
+function states.get_by_tag(tag,key,default)
+ local h = states.hash[tag]
+ if h and h[key] then
+ return h[key]
+ else
+ local d = states.data[tag]
+ if d then
+ for k in key:gmatch("[^%.]+") do
+ local dk = d[k]
+ if dk then
+ d = dk
+ else
+ return default
+ end
+ end
+ return d or default
+ end
+ end
+end
+
+function states.set(key,value,default,persistent)
+ states.set_by_tag(states.tag,key,value,default,persistent)
+end
+
+function states.get(key,default)
+ return states.get_by_tag(states.tag,key,default)
+end
+
+--~ states.data.update = {
+--~ ["version"] = {
+--~ ["major"] = 0,
+--~ ["minor"] = 1,
+--~ },
+--~ ["rsync"] = {
+--~ ["server"] = "contextgarden.net",
+--~ ["module"] = "minimals",
+--~ ["repository"] = "current",
+--~ ["flags"] = "-rpztlv --stats",
+--~ },
+--~ ["tasks"] = {
+--~ ["update"] = true,
+--~ ["make"] = true,
+--~ ["delete"] = false,
+--~ },
+--~ ["platform"] = {
+--~ ["host"] = true,
+--~ ["other"] = {
+--~ ["mswin"] = false,
+--~ ["linux"] = false,
+--~ ["linux-64"] = false,
+--~ ["osx-intel"] = false,
+--~ ["osx-ppc"] = false,
+--~ ["sun"] = false,
+--~ },
+--~ },
+--~ ["context"] = {
+--~ ["available"] = {"current", "beta", "alpha", "experimental"},
+--~ ["selected"] = "current",
+--~ },
+--~ ["formats"] = {
+--~ ["cont-en"] = true,
+--~ ["cont-nl"] = true,
+--~ ["cont-de"] = false,
+--~ ["cont-cz"] = false,
+--~ ["cont-fr"] = false,
+--~ ["cont-ro"] = false,
+--~ },
+--~ ["engine"] = {
+--~ ["pdftex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["pdftex"] = true,
+--~ },
+--~ },
+--~ ["luatex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ },
+--~ },
+--~ ["xetex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["xetex"] = false,
+--~ },
+--~ },
+--~ ["metapost"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["mpost"] = true,
+--~ ["metafun"] = true,
+--~ },
+--~ },
+--~ },
+--~ ["fonts"] = {
+--~ },
+--~ ["doc"] = {
+--~ },
+--~ ["modules"] = {
+--~ ["f-urwgaramond"] = false,
+--~ ["f-urwgothic"] = false,
+--~ ["t-bnf"] = false,
+--~ ["t-chromato"] = false,
+--~ ["t-cmscbf"] = false,
+--~ ["t-cmttbf"] = false,
+--~ ["t-construction-plan"] = false,
+--~ ["t-degrade"] = false,
+--~ ["t-french"] = false,
+--~ ["t-lettrine"] = false,
+--~ ["t-lilypond"] = false,
+--~ ["t-mathsets"] = false,
+--~ ["t-tikz"] = false,
+--~ ["t-typearea"] = false,
+--~ ["t-vim"] = false,
+--~ },
+--~ }
+
+
+--~ states.save("teststate", "update")
+--~ states.load("teststate", "update")
+
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
+--~ states.set_by_tag("update","rsync.server","oeps")
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
+--~ states.save("teststate", "update")
+--~ states.load("teststate", "update")
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
+
+
-- end library merge
own = { }
@@ -6906,6 +7135,7 @@ own.libs = { -- todo: check which ones are really needed
-- 'luat-kps.lua',
'luat-tmp.lua',
'luat-log.lua',
+ 'luat-sta.lua',
}
-- We need this hack till luatex is fixed.
@@ -7185,6 +7415,7 @@ input.runners.registered = {
if not messages then messages = { } end
messages.help = [[
+--script run an mtx script
--execute run a script or program
--resolve resolve prefixed arguments
--ctxlua run internally (using preloaded libs)
diff --git a/scripts/context/ruby/ctxtools.rb b/scripts/context/ruby/ctxtools.rb
index 4998b21b9..de64679ac 100644
--- a/scripts/context/ruby/ctxtools.rb
+++ b/scripts/context/ruby/ctxtools.rb
@@ -44,7 +44,7 @@
# it cannot do that (it tries to hyphenate as if the "ffi" was a
# character), and the result is wrong hyphenation.
-banner = ['CtxTools', 'version 1.3.3', '2004/2006', 'PRAGMA ADE/POD']
+banner = ['CtxTools', 'version 1.3.5', '2004/2008', 'PRAGMA ADE']
$: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq!
@@ -866,6 +866,7 @@ class Language
@filenames = filenames
@remapping = Array.new
@demapping = Array.new
+ @cloning = Array.new
@unicode = Hash.new
@encoding = encoding
@data = ''
@@ -895,6 +896,9 @@ class Language
def demap(from, to)
@demapping.push([from,to])
end
+ def clone(from, to)
+ @cloning.push([from,to])
+ end
def load(filenames=@filenames)
found = false
@@ -957,6 +961,22 @@ class Language
@remapping[$1.to_i][1]
end
report(" nothing remapped") unless done
+ @cloning.each_index do |i|
+ c = 0
+ f, s = @cloning[i][0], @cloning[i][1]
+ str = "#{f}|#{s}"
+ str.gsub!(/([\[\]])/) do "\\" + "#{$1}" end
+ reg = /(#{str})/
+ content.gsub!(/(\S*(#{str})\S*)/) do
+ a, b = $1, $1
+ a.gsub!(reg, f)
+ b.gsub!(reg, s)
+ c = c + 1
+ "#{a} #{b}"
+ end
+ report("#{c.to_s.rjust(5)} times #{f} cloned to #{s}")
+ n += c
+ end
report("")
content.to_s
end
@@ -1300,6 +1320,14 @@ class Language
remap(/\\a\s*/, "[aeligature]")
remap(/\\o\s*/, "[oeligature]")
when 'agr' then
+ # bug fix
+ remap("a2|", "[greekalphaiotasub]")
+ remap("h2|", "[greeketaiotasub]")
+ remap("w2|", "[greekomegaiotasub]")
+ remap(">2r1<2r", "[2ῤ1ῥ]")
+ remap(">a2n1wdu'", "[ἀ2ν1ωδύ]")
+ remap(">e3s2ou'", "[ἐ3σ2ού]")
+ # main conversion
remap(/\<\'a\|/, "[greekalphaiotasubdasiatonos]")
# remap(/\<\'a\|/, "[greekdasiatonos][greekAlpha][greekiota]")
remap(/\>\'a\|/, "[greekalphaiotasubpsilitonos]")
@@ -1399,7 +1427,7 @@ class Language
remap(/\<\'u/, "[greekupsilondasiatonos]")
remap(/\>\'u/, "[greekupsilonpsilitonos]")
remap(/\<\`u/, "[greekupsilondasiavaria]")
- remap(/\>\'u/, "[greekupsilonpsilivaria]")
+ remap(/\>\`u/, "[greekupsilonpsilivaria]")
remap(/\<\~u/, "[greekupsilondasiaperispomeni]")
remap(/\>\~u/, "[greekupsilonpsiliperispomeni]")
remap(/\"\'u/, "[greekupsilondialytikatonos]")
@@ -1433,14 +1461,15 @@ class Language
remap(/\"\'/, "[greekdialytikatonos]")
remap(/\"\`/, "[greekdialytikavaria]")
remap(/\"\~/, "[greekdialytikaperispomeni]")
- remap(/\, "[dasia]")
- remap(/\>/, "[psili]")
- remap(/\'/, "[oxia]")
+ remap(/\, "[greekdasia]")
+ remap(/\>/, "[greekpsili]")
+ remap(/\d.{0,2}''/, "")
+ remap(/\'/, "[greekoxia]")
remap(/\`/, "[greekvaria]")
remap(/\~/, "[perispomeni]")
- remap(/\"/, "[dialytika]")
+ remap(/\"/, "[greekdialytika]")
# unknown
- remap(/\|/, "[greekIotadialytika]")
+ # remap(/\|/, "[greekIotadialytika]")
# next
remap(/A/, "[greekAlpha]")
remap(/B/, "[greekBeta]")
@@ -1491,6 +1520,13 @@ class Language
remap(/x/, "[greekxi]")
remap(/y/, "[greekpsi]")
remap(/z/, "[greekzeta]")
+ clone("[greekalphatonos]", "[greekalphaoxia]")
+ clone("[greekepsilontonos]", "[greekepsilonoxia]")
+ clone("[greeketatonos]", "[greeketaoxia]")
+ clone("[greekiotatonos]", "[greekiotaoxia]")
+ clone("[greekomicrontonos]", "[greekomicronoxia]")
+ clone("[greekupsilontonos]", "[greekupsilonoxia]")
+ clone("[greekomegatonos]", "[greekomegaoxia]")
when 'ru' then
remap(/\xC1/, "[cyrillica]")
remap(/\xC2/, "[cyrillicb]")
diff --git a/tex/context/base/attr-ini.lua b/tex/context/base/attr-ini.lua
index b0cb0a10e..c701740e3 100644
--- a/tex/context/base/attr-ini.lua
+++ b/tex/context/base/attr-ini.lua
@@ -15,6 +15,104 @@ if not modules then modules = { } end modules ['attr-ini'] = {
nodes = nodes or { }
+-- This is not the most ideal place, but it will do. Maybe we need to move
+-- attributes to node-att.lua.
+
+do
+
+ -- just for testing
+
+ local reserved = { }
+
+ function nodes.register(n)
+ reserved[#reserved+1] = n
+ end
+
+ function nodes.cleanup_reserved(nofboxes) -- todo
+ local nr, free = #reserved, node.free
+ for i=1,nr do
+ free(reserved[i])
+ end
+ local nl, tb, flush = 0, tex.box, node.flush_list
+ if nofboxes then
+ for i=1,nofboxes do
+ local l = tb[i]
+ if l then
+ -- flush(l)
+ tb[i] = nil
+ nl = nl + 1
+ end
+ end
+ end
+ reserved = { }
+ return nr, nl, nofboxes
+ end
+
+end
+
+do
+
+ local pdfliteral = node.new("whatsit",8) pdfliteral.next, pdfliteral.prev = nil, nil pdfliteral.mode = 1
+ local disc = node.new("disc") disc.next, disc.prev = nil, nil
+ local kern = node.new("kern",1) kern.next, kern.prev = nil, nil
+ local penalty = node.new("penalty") penalty.next, penalty.prev = nil, nil
+ local glue = node.new("glue") glue.next, glue.prev = nil, nil
+ local glue_spec = node.new("glue_spec") glue_spec.next, glue_spec.prev = nil, nil
+
+ nodes.register(pdfliteral)
+ nodes.register(disc)
+ nodes.register(kern)
+ nodes.register(penalty)
+ nodes.register(glue)
+ nodes.register(glue_spec)
+
+ local copy = node.copy
+
+ function nodes.penalty(p)
+ local n = copy(penalty)
+ n.penalty = p
+ return n
+ end
+ function nodes.kern(k)
+ local n = copy(kern)
+ n.kern = k
+ return n
+ end
+ function nodes.glue(width,stretch,shrink)
+ local n = copy(glue)
+ local s = copy(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ n.spec = s
+ return n
+ end
+ function nodes.glue_spec(width,stretch,shrink)
+ local s = copy(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ return s
+ end
+
+ function nodes.disc()
+ return copy(disc)
+ end
+
+ function nodes.pdfliteral(str)
+ local t = copy(pdfliteral)
+ t.data = str
+ return t
+ end
+
+end
+
+function tex.node_mem_status()
+ -- todo: lpeg
+ local s = status.node_mem_usage
+ local t = { }
+ for n, tag in s:gmatch("(%d+) ([a-z_]+)") do
+ t[tag] = n
+ end
+ return t
+end
+
--
-- attributes
--
@@ -742,13 +840,6 @@ function effects.register(effect,stretch,rulethickness)
return effects.registered[stamp]
end
---~ backends.pdf.effects = {
---~ normal = 1,
---~ inner = 1,
---~ outer = 2,
---~ both = 3,
---~ hidden = 4,
---~ }
backends.pdf.effects = {
normal = 0,
inner = 0,
@@ -757,28 +848,20 @@ backends.pdf.effects = {
hidden = 3,
}
-function effects.reference(effect,stretch,rulethickness) -- will move, test code, we will develop a proper model for that
+function effects.reference(effect,stretch,rulethickness)
+ -- always, no zero test (removed)
+ rulethickness = number.dimenfactors["bp"]*rulethickness
effect = backends.pdf.effects[effect] or backends.pdf.effects['normal']
- if rulethickness > 0 then
- rulethickness = number.dimenfactors["bp"]*rulethickness .. " w "
- else
- rulethickness = ""
- end
- if stretch > 0 then
- stretch = stretch.. " Tc "
- else
- stretch = ""
- end
- return backends.pdf.literal(string.format("%s%s%s Tr",stretch,rulethickness,effect)) -- watch order
+ return backends.pdf.literal(string.format("%s Tc %s w %s Tr",stretch,rulethickness,effect)) -- watch order
end
-effects.none = effects.reference(effect,0,0)
+effects.none = effects.reference(0,0,0) -- faster: backends.pdf.literal("0 Tc 0 w 0 Tr")
shipouts.plugins.effect = {
namespace = effects,
initializer = states.initialize,
- finalizer = states.finalize ,
- processor = states.process ,
+ finalizer = states.finalize,
+ processor = states.process,
}
-- layers
diff --git a/tex/context/base/attr-ini.tex b/tex/context/base/attr-ini.tex
index 80a9e66cb..f7d01b1fd 100644
--- a/tex/context/base/attr-ini.tex
+++ b/tex/context/base/attr-ini.tex
@@ -157,10 +157,6 @@
{\setxvalue{(es:#1:#2:\number\dimexpr#3\relax)}%
{\dosetattribute{effect}{\ctxlua{tex.print(effects.register('#1',#2,\number\dimexpr#3\relax))}}}}
-% \def\dotriggereffect#1#2#3%
-% {\ifcsname(es:#1:#2:\number\dimexpr#3\relax)\endcsname\else\registereffect{#1}{#2}{#3}\fi
-% \csname(es:#1:#2:\number\dimexpr#3\relax)\endcsname}
-
\def\dotriggereffect
{\ctxlua{effects.enabled=true}%
\gdef\dotriggereffect##1##2##3%
diff --git a/tex/context/base/char-cmp.lua b/tex/context/base/char-cmp.lua
index 412f1a073..e995f510f 100644
--- a/tex/context/base/char-cmp.lua
+++ b/tex/context/base/char-cmp.lua
@@ -195,10 +195,13 @@ function characters.uncompose(n) -- n == string|number, returns string
end
-- return characters.shape(n)
if cdn then
- if cdn.shcode then
- return utf.char(cdn.shcode)
- else
+ local shcode = cdn.shcode
+ if not shcode then
return characters.uncomposed.both[cdn.contextname] or n
+ elseif type(shcode) == "table" then
+ return utf.char(unpack(cdn.shcode))
+ else
+ return utf.char(cdn.shcode)
end
end
return n
diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua
index 697b33c90..4f55dbed8 100644
--- a/tex/context/base/char-def.lua
+++ b/tex/context/base/char-def.lua
@@ -1678,6 +1678,7 @@ characters.data={
["description"]="LATIN CAPITAL LETTER AE",
["lccode"]=0x00E6,
["linebreak"]="al",
+ ["shcode"]= { 0x0041, 0x0045 },
["unicodeslot"]=0x00C6, -- Æ
},
{
@@ -2026,6 +2027,7 @@ characters.data={
["contextname"]="aeligature",
["description"]="LATIN SMALL LETTER AE",
["linebreak"]="al",
+ ["shcode"]= { 0x00E6, 0x00EA },
["uccode"]=0x00C6,
["unicodeslot"]=0x00E6, -- æ
},
@@ -2870,6 +2872,7 @@ characters.data={
["description"]="LATIN CAPITAL LIGATURE IJ",
["lccode"]=0x0133,
["linebreak"]="al",
+ ["shcode"]={ 0x0049, 0x004A },
["specials"]={ "compat", 0x0049, 0x004A },
["unicodeslot"]=0x0132, -- IJ
},
@@ -2880,6 +2883,7 @@ characters.data={
["contextname"]="ijligature",
["description"]="LATIN SMALL LIGATURE IJ",
["linebreak"]="al",
+ ["shcode"]={ 0x0069, 0x006A },
["specials"]={ "compat", 0x0069, 0x006A },
["uccode"]=0x0132,
["unicodeslot"]=0x0133, -- ij
@@ -3222,6 +3226,7 @@ characters.data={
["description"]="LATIN CAPITAL LIGATURE OE",
["lccode"]=0x0153,
["linebreak"]="al",
+ ["shcode"]={ 0x004F, 0x0045 },
["unicodeslot"]=0x0152, -- Œ
},
{
@@ -3231,6 +3236,7 @@ characters.data={
["contextname"]="oeligature",
["description"]="LATIN SMALL LIGATURE OE",
["linebreak"]="al",
+ ["shcode"]={ 0x006F, 0x0065 },
["uccode"]=0x0152,
["unicodeslot"]=0x0153, -- œ
},
@@ -4292,6 +4298,7 @@ characters.data={
["description"]="LATIN CAPITAL LETTER LJ",
["lccode"]=0x01C9,
["linebreak"]="al",
+ ["shcode"]={ 0x004C, 0x004A },
["specials"]={ "compat", 0x004C, 0x004A },
["uccode"]=0x01C8,
["unicodeslot"]=0x01C7, -- LJ
@@ -4302,7 +4309,7 @@ characters.data={
["description"]="LATIN CAPITAL LETTER L WITH SMALL LETTER J",
["lccode"]=0x01C9,
["linebreak"]="al",
- ["shcode"]=0x004C,
+ ["shcode"]={ 0x004C, 0x006A },
["specials"]={ "compat", 0x004C, 0x006A },
["uccode"]=0x01C7,
["unicodeslot"]=0x01C8, -- Lj
@@ -4312,6 +4319,7 @@ characters.data={
["contextname"]="ljligature",
["description"]="LATIN SMALL LETTER LJ",
["linebreak"]="al",
+ ["shcode"]={ 0x006C, 0x006A },
["specials"]={ "compat", 0x006C, 0x006A },
["uccode"]=0x01C7,
["unicodeslot"]=0x01C9, -- lj
@@ -4322,6 +4330,7 @@ characters.data={
["description"]="LATIN CAPITAL LETTER NJ",
["lccode"]=0x01CC,
["linebreak"]="al",
+ ["shcode"]={ 0x004E, 0x004A },
["specials"]={ "compat", 0x004E, 0x004A },
["uccode"]=0x01CB,
["unicodeslot"]=0x01CA, -- NJ
@@ -4332,6 +4341,7 @@ characters.data={
["description"]="LATIN CAPITAL LETTER N WITH SMALL LETTER J",
["lccode"]=0x01CC,
["linebreak"]="al",
+ ["shcode"]={ 0x004E, 0x006A },
["shcode"]=0x004E,
["specials"]={ "compat", 0x004E, 0x006A },
["uccode"]=0x01CA,
@@ -4342,6 +4352,7 @@ characters.data={
["contextname"]="njligature",
["description"]="LATIN SMALL LETTER NJ",
["linebreak"]="al",
+ ["shcode"]={ 0x006E, 0x006A },
["specials"]={ "compat", 0x006E, 0x006A },
["uccode"]=0x01CA,
["unicodeslot"]=0x01CC, -- nj
@@ -6294,14 +6305,14 @@ characters.data={
["unicodeslot"]=0x02BB, -- ʻ
},
{
- ["adobename"]="afii0xE249",
+ ["adobename"]="afii57929",
["category"]="lm",
["description"]="MODIFIER LETTER APOSTROPHE",
["linebreak"]="al",
["unicodeslot"]=0x02BC, -- ʼ
},
{
- ["adobename"]="afii0xFDA9",
+ ["adobename"]="afii64937",
["category"]="lm",
["description"]="MODIFIER LETTER REVERSED COMMA",
["linebreak"]="al",
@@ -6362,6 +6373,7 @@ characters.data={
["contextname"]="textcircumflex",
["description"]="MODIFIER LETTER CIRCUMFLEX ACCENT",
["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0302 }, -- added by hh
["unicodeslot"]=0x02C6, -- ˆ
},
{
@@ -6371,6 +6383,7 @@ characters.data={
["contextname"]="textcaron",
["description"]="CARON",
["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x030C }, -- added by hh
["unicodeslot"]=0x02C7, -- ˇ
},
{
@@ -8264,7 +8277,7 @@ characters.data={
["unicodeslot"]=0x03C1, -- ρ
},
[0x03C2]={
- ["adobename"]="sigma0x0001",
+ ["adobename"]="sigma1",
["category"]="ll",
["contextname"]="greekfinalsigma",
["description"]="GREEK SMALL LETTER FINAL SIGMA",
@@ -8422,7 +8435,7 @@ characters.data={
["unicodeslot"]=0x03D0, -- ϐ
},
[0x03D1]={
- ["adobename"]="theta0x0001",
+ ["adobename"]="theta1",
["category"]="ll",
["contextname"]="greekthetaalt",
["description"]="GREEK THETA SYMBOL",
@@ -8434,7 +8447,7 @@ characters.data={
["unicodeslot"]=0x03D1, -- ϑ
},
[0x03D2]={
- ["adobename"]="Upsilon0x0001",
+ ["adobename"]="Upsilon1",
["category"]="lu",
["description"]="GREEK UPSILON WITH HOOK SYMBOL",
["linebreak"]="al",
@@ -8456,7 +8469,7 @@ characters.data={
["unicodeslot"]=0x03D4, -- ϔ
},
[0x03D5]={
- ["adobename"]="phi0x0001",
+ ["adobename"]="phi1",
["category"]="ll",
["contextname"]="greekphialt",
["description"]="GREEK PHI SYMBOL",
@@ -8467,7 +8480,7 @@ characters.data={
["unicodeslot"]=0x03D5, -- ϕ
},
[0x03D6]={
- ["adobename"]="omega0x0001",
+ ["adobename"]="omega1",
["category"]="ll",
["contextname"]="greekpialt",
["description"]="GREEK PI SYMBOL",
@@ -8789,7 +8802,7 @@ characters.data={
["unicodeslot"]=0x0400, -- Ѐ
},
[0x0401]={
- ["adobename"]="afii0x2727",
+ ["adobename"]="afii10023",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicYO",
@@ -8800,7 +8813,7 @@ characters.data={
["unicodeslot"]=0x0401, -- Ё
},
[0x0402]={
- ["adobename"]="afii0x2743",
+ ["adobename"]="afii10051",
["category"]="lu",
["contextname"]="cyrillicDJE",
["description"]="CYRILLIC CAPITAL LETTER DJE",
@@ -8809,7 +8822,7 @@ characters.data={
["unicodeslot"]=0x0402, -- Ђ
},
[0x0403]={
- ["adobename"]="afii0x2744",
+ ["adobename"]="afii10052",
["category"]="lu",
["contextname"]="cyrillicGJE",
["description"]="CYRILLIC CAPITAL LETTER GJE",
@@ -8819,7 +8832,7 @@ characters.data={
["unicodeslot"]=0x0403, -- Ѓ
},
[0x0404]={
- ["adobename"]="afii0x2745",
+ ["adobename"]="afii10053",
["category"]="lu",
["contextname"]="cyrillicIE",
["description"]="CYRILLIC CAPITAL LETTER UKRAINIAN IE",
@@ -8828,7 +8841,7 @@ characters.data={
["unicodeslot"]=0x0404, -- Є
},
[0x0405]={
- ["adobename"]="afii0x2746",
+ ["adobename"]="afii10054",
["category"]="lu",
["contextname"]="cyrillicDZE",
["description"]="CYRILLIC CAPITAL LETTER DZE",
@@ -8837,7 +8850,7 @@ characters.data={
["unicodeslot"]=0x0405, -- Ѕ
},
[0x0406]={
- ["adobename"]="afii0x2747",
+ ["adobename"]="afii10055",
["category"]="lu",
["contextname"]="cyrillicII",
["description"]="CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I",
@@ -8846,7 +8859,7 @@ characters.data={
["unicodeslot"]=0x0406, -- І
},
[0x0407]={
- ["adobename"]="afii0x2748",
+ ["adobename"]="afii10056",
["category"]="lu",
["contextname"]="cyrillicYI",
["description"]="CYRILLIC CAPITAL LETTER YI",
@@ -8856,7 +8869,7 @@ characters.data={
["unicodeslot"]=0x0407, -- Ї
},
[0x0408]={
- ["adobename"]="afii0x2749",
+ ["adobename"]="afii10057",
["category"]="lu",
["contextname"]="cyrillicJE",
["description"]="CYRILLIC CAPITAL LETTER JE",
@@ -8865,7 +8878,7 @@ characters.data={
["unicodeslot"]=0x0408, -- Ј
},
[0x0409]={
- ["adobename"]="afii0x274A",
+ ["adobename"]="afii10058",
["category"]="lu",
["contextname"]="cyrillicLJE",
["description"]="CYRILLIC CAPITAL LETTER LJE",
@@ -8874,7 +8887,7 @@ characters.data={
["unicodeslot"]=0x0409, -- Љ
},
[0x040A]={
- ["adobename"]="afii0x274B",
+ ["adobename"]="afii10059",
["category"]="lu",
["contextname"]="cyrillicNJE",
["description"]="CYRILLIC CAPITAL LETTER NJE",
@@ -8883,7 +8896,7 @@ characters.data={
["unicodeslot"]=0x040A, -- Њ
},
[0x040B]={
- ["adobename"]="afii0x274C",
+ ["adobename"]="afii10060",
["category"]="lu",
["contextname"]="cyrillicTSHE",
["description"]="CYRILLIC CAPITAL LETTER TSHE",
@@ -8892,7 +8905,7 @@ characters.data={
["unicodeslot"]=0x040B, -- Ћ
},
[0x040C]={
- ["adobename"]="afii0x274D",
+ ["adobename"]="afii10061",
["category"]="lu",
["contextname"]="cyrillicKJE",
["description"]="CYRILLIC CAPITAL LETTER KJE",
@@ -8912,7 +8925,7 @@ characters.data={
["unicodeslot"]=0x040D, -- Ѝ
},
[0x040E]={
- ["adobename"]="afii0x274E",
+ ["adobename"]="afii10062",
["category"]="lu",
["contextname"]="cyrillicUSHRT",
["description"]="CYRILLIC CAPITAL LETTER SHORT U",
@@ -8922,7 +8935,7 @@ characters.data={
["unicodeslot"]=0x040E, -- Ў
},
[0x040F]={
- ["adobename"]="afii0x27A1",
+ ["adobename"]="afii10145",
["category"]="lu",
["contextname"]="cyrillicDZHE",
["description"]="CYRILLIC CAPITAL LETTER DZHE",
@@ -8931,7 +8944,7 @@ characters.data={
["unicodeslot"]=0x040F, -- Џ
},
[0x0410]={
- ["adobename"]="afii0x2721",
+ ["adobename"]="afii10017",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicA",
@@ -8941,7 +8954,7 @@ characters.data={
["unicodeslot"]=0x0410, -- А
},
[0x0411]={
- ["adobename"]="afii0x2722",
+ ["adobename"]="afii10018",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicB",
@@ -8951,7 +8964,7 @@ characters.data={
["unicodeslot"]=0x0411, -- Б
},
[0x0412]={
- ["adobename"]="afii0x2723",
+ ["adobename"]="afii10019",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicV",
@@ -8961,7 +8974,7 @@ characters.data={
["unicodeslot"]=0x0412, -- В
},
[0x0413]={
- ["adobename"]="afii0x2724",
+ ["adobename"]="afii10020",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicG",
@@ -8971,7 +8984,7 @@ characters.data={
["unicodeslot"]=0x0413, -- Г
},
[0x0414]={
- ["adobename"]="afii0x2725",
+ ["adobename"]="afii10021",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicD",
@@ -8981,7 +8994,7 @@ characters.data={
["unicodeslot"]=0x0414, -- Д
},
[0x0415]={
- ["adobename"]="afii0x2726",
+ ["adobename"]="afii10022",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicE",
@@ -8991,7 +9004,7 @@ characters.data={
["unicodeslot"]=0x0415, -- Е
},
[0x0416]={
- ["adobename"]="afii0x2728",
+ ["adobename"]="afii10024",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicZH",
@@ -9001,7 +9014,7 @@ characters.data={
["unicodeslot"]=0x0416, -- Ж
},
[0x0417]={
- ["adobename"]="afii0x2729",
+ ["adobename"]="afii10025",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicZ",
@@ -9011,7 +9024,7 @@ characters.data={
["unicodeslot"]=0x0417, -- З
},
[0x0418]={
- ["adobename"]="afii0x272A",
+ ["adobename"]="afii10026",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicI",
@@ -9021,7 +9034,7 @@ characters.data={
["unicodeslot"]=0x0418, -- И
},
[0x0419]={
- ["adobename"]="afii0x272B",
+ ["adobename"]="afii10027",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicISHRT",
@@ -9032,7 +9045,7 @@ characters.data={
["unicodeslot"]=0x0419, -- Й
},
[0x041A]={
- ["adobename"]="afii0x272C",
+ ["adobename"]="afii10028",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicK",
@@ -9042,7 +9055,7 @@ characters.data={
["unicodeslot"]=0x041A, -- К
},
[0x041B]={
- ["adobename"]="afii0x272D",
+ ["adobename"]="afii10029",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicL",
@@ -9052,7 +9065,7 @@ characters.data={
["unicodeslot"]=0x041B, -- Л
},
[0x041C]={
- ["adobename"]="afii0x272E",
+ ["adobename"]="afii10030",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicM",
@@ -9062,7 +9075,7 @@ characters.data={
["unicodeslot"]=0x041C, -- М
},
[0x041D]={
- ["adobename"]="afii0x272F",
+ ["adobename"]="afii10031",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicN",
@@ -9072,7 +9085,7 @@ characters.data={
["unicodeslot"]=0x041D, -- Н
},
[0x041E]={
- ["adobename"]="afii0x2730",
+ ["adobename"]="afii10032",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicO",
@@ -9082,7 +9095,7 @@ characters.data={
["unicodeslot"]=0x041E, -- О
},
[0x041F]={
- ["adobename"]="afii0x2731",
+ ["adobename"]="afii10033",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicP",
@@ -9092,7 +9105,7 @@ characters.data={
["unicodeslot"]=0x041F, -- П
},
[0x0420]={
- ["adobename"]="afii0x2732",
+ ["adobename"]="afii10034",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicR",
@@ -9102,7 +9115,7 @@ characters.data={
["unicodeslot"]=0x0420, -- Р
},
[0x0421]={
- ["adobename"]="afii0x2733",
+ ["adobename"]="afii10035",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicS",
@@ -9112,7 +9125,7 @@ characters.data={
["unicodeslot"]=0x0421, -- С
},
[0x0422]={
- ["adobename"]="afii0x2734",
+ ["adobename"]="afii10036",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicT",
@@ -9122,7 +9135,7 @@ characters.data={
["unicodeslot"]=0x0422, -- Т
},
[0x0423]={
- ["adobename"]="afii0x2735",
+ ["adobename"]="afii10037",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicU",
@@ -9132,7 +9145,7 @@ characters.data={
["unicodeslot"]=0x0423, -- У
},
[0x0424]={
- ["adobename"]="afii0x2736",
+ ["adobename"]="afii10038",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicF",
@@ -9142,7 +9155,7 @@ characters.data={
["unicodeslot"]=0x0424, -- Ф
},
[0x0425]={
- ["adobename"]="afii0x2737",
+ ["adobename"]="afii10039",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicH",
@@ -9152,7 +9165,7 @@ characters.data={
["unicodeslot"]=0x0425, -- Х
},
[0x0426]={
- ["adobename"]="afii0x2738",
+ ["adobename"]="afii10040",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicC",
@@ -9162,7 +9175,7 @@ characters.data={
["unicodeslot"]=0x0426, -- Ц
},
[0x0427]={
- ["adobename"]="afii0x2739",
+ ["adobename"]="afii10041",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicCH",
@@ -9172,7 +9185,7 @@ characters.data={
["unicodeslot"]=0x0427, -- Ч
},
[0x0428]={
- ["adobename"]="afii0x273A",
+ ["adobename"]="afii10042",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicSH",
@@ -9182,7 +9195,7 @@ characters.data={
["unicodeslot"]=0x0428, -- Ш
},
[0x0429]={
- ["adobename"]="afii0x273B",
+ ["adobename"]="afii10043",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicSHCH",
@@ -9192,7 +9205,7 @@ characters.data={
["unicodeslot"]=0x0429, -- Щ
},
[0x042A]={
- ["adobename"]="afii0x273C",
+ ["adobename"]="afii10044",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicHRDSN",
@@ -9202,7 +9215,7 @@ characters.data={
["unicodeslot"]=0x042A, -- Ъ
},
[0x042B]={
- ["adobename"]="afii0x273D",
+ ["adobename"]="afii10045",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicERY",
@@ -9212,7 +9225,7 @@ characters.data={
["unicodeslot"]=0x042B, -- Ы
},
[0x042C]={
- ["adobename"]="afii0x273E",
+ ["adobename"]="afii10046",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicSFTSN",
@@ -9222,7 +9235,7 @@ characters.data={
["unicodeslot"]=0x042C, -- Ь
},
[0x042D]={
- ["adobename"]="afii0x273F",
+ ["adobename"]="afii10047",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicEREV",
@@ -9232,7 +9245,7 @@ characters.data={
["unicodeslot"]=0x042D, -- Э
},
[0x042E]={
- ["adobename"]="afii0x2740",
+ ["adobename"]="afii10048",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicYU",
@@ -9242,7 +9255,7 @@ characters.data={
["unicodeslot"]=0x042E, -- Ю
},
[0x042F]={
- ["adobename"]="afii0x2741",
+ ["adobename"]="afii10049",
["category"]="lu",
["cjkwd"]="a",
["contextname"]="cyrillicYA",
@@ -9252,7 +9265,7 @@ characters.data={
["unicodeslot"]=0x042F, -- Я
},
[0x0430]={
- ["adobename"]="afii0x2751",
+ ["adobename"]="afii10065",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillica",
@@ -9262,7 +9275,7 @@ characters.data={
["unicodeslot"]=0x0430, -- а
},
[0x0431]={
- ["adobename"]="afii0x2752",
+ ["adobename"]="afii10066",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicb",
@@ -9272,7 +9285,7 @@ characters.data={
["unicodeslot"]=0x0431, -- б
},
[0x0432]={
- ["adobename"]="afii0x2753",
+ ["adobename"]="afii10067",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicv",
@@ -9282,7 +9295,7 @@ characters.data={
["unicodeslot"]=0x0432, -- в
},
[0x0433]={
- ["adobename"]="afii0x2754",
+ ["adobename"]="afii10068",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicg",
@@ -9292,7 +9305,7 @@ characters.data={
["unicodeslot"]=0x0433, -- г
},
[0x0434]={
- ["adobename"]="afii0x2755",
+ ["adobename"]="afii10069",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicd",
@@ -9302,7 +9315,7 @@ characters.data={
["unicodeslot"]=0x0434, -- д
},
[0x0435]={
- ["adobename"]="afii0x2756",
+ ["adobename"]="afii10070",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillice",
@@ -9312,7 +9325,7 @@ characters.data={
["unicodeslot"]=0x0435, -- е
},
[0x0436]={
- ["adobename"]="afii0x2758",
+ ["adobename"]="afii10072",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrilliczh",
@@ -9322,7 +9335,7 @@ characters.data={
["unicodeslot"]=0x0436, -- ж
},
[0x0437]={
- ["adobename"]="afii0x2759",
+ ["adobename"]="afii10073",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicz",
@@ -9332,7 +9345,7 @@ characters.data={
["unicodeslot"]=0x0437, -- з
},
[0x0438]={
- ["adobename"]="afii0x275A",
+ ["adobename"]="afii10074",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillici",
@@ -9342,7 +9355,7 @@ characters.data={
["unicodeslot"]=0x0438, -- и
},
[0x0439]={
- ["adobename"]="afii0x275B",
+ ["adobename"]="afii10075",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicishrt",
@@ -9353,7 +9366,7 @@ characters.data={
["unicodeslot"]=0x0439, -- й
},
[0x043A]={
- ["adobename"]="afii0x275C",
+ ["adobename"]="afii10076",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillick",
@@ -9363,7 +9376,7 @@ characters.data={
["unicodeslot"]=0x043A, -- к
},
[0x043B]={
- ["adobename"]="afii0x275D",
+ ["adobename"]="afii10077",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicl",
@@ -9373,7 +9386,7 @@ characters.data={
["unicodeslot"]=0x043B, -- л
},
[0x043C]={
- ["adobename"]="afii0x275E",
+ ["adobename"]="afii10078",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicm",
@@ -9383,7 +9396,7 @@ characters.data={
["unicodeslot"]=0x043C, -- м
},
[0x043D]={
- ["adobename"]="afii0x275F",
+ ["adobename"]="afii10079",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicn",
@@ -9393,7 +9406,7 @@ characters.data={
["unicodeslot"]=0x043D, -- н
},
[0x043E]={
- ["adobename"]="afii0x2760",
+ ["adobename"]="afii10080",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillico",
@@ -9403,7 +9416,7 @@ characters.data={
["unicodeslot"]=0x043E, -- о
},
[0x043F]={
- ["adobename"]="afii0x2761",
+ ["adobename"]="afii10081",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicp",
@@ -9413,7 +9426,7 @@ characters.data={
["unicodeslot"]=0x043F, -- п
},
[0x0440]={
- ["adobename"]="afii0x2762",
+ ["adobename"]="afii10082",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicr",
@@ -9423,7 +9436,7 @@ characters.data={
["unicodeslot"]=0x0440, -- р
},
[0x0441]={
- ["adobename"]="afii0x2763",
+ ["adobename"]="afii10083",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillics",
@@ -9433,7 +9446,7 @@ characters.data={
["unicodeslot"]=0x0441, -- с
},
[0x0442]={
- ["adobename"]="afii0x2764",
+ ["adobename"]="afii10084",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillict",
@@ -9443,7 +9456,7 @@ characters.data={
["unicodeslot"]=0x0442, -- т
},
[0x0443]={
- ["adobename"]="afii0x2765",
+ ["adobename"]="afii10085",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicu",
@@ -9453,7 +9466,7 @@ characters.data={
["unicodeslot"]=0x0443, -- у
},
[0x0444]={
- ["adobename"]="afii0x2766",
+ ["adobename"]="afii10086",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicf",
@@ -9463,7 +9476,7 @@ characters.data={
["unicodeslot"]=0x0444, -- ф
},
[0x0445]={
- ["adobename"]="afii0x2767",
+ ["adobename"]="afii10087",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillich",
@@ -9473,7 +9486,7 @@ characters.data={
["unicodeslot"]=0x0445, -- х
},
[0x0446]={
- ["adobename"]="afii0x2768",
+ ["adobename"]="afii10088",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicc",
@@ -9483,7 +9496,7 @@ characters.data={
["unicodeslot"]=0x0446, -- ц
},
[0x0447]={
- ["adobename"]="afii0x2769",
+ ["adobename"]="afii10089",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicch",
@@ -9493,7 +9506,7 @@ characters.data={
["unicodeslot"]=0x0447, -- ч
},
[0x0448]={
- ["adobename"]="afii0x276A",
+ ["adobename"]="afii10090",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicsh",
@@ -9503,7 +9516,7 @@ characters.data={
["unicodeslot"]=0x0448, -- ш
},
[0x0449]={
- ["adobename"]="afii0x276B",
+ ["adobename"]="afii10091",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicshch",
@@ -9513,7 +9526,7 @@ characters.data={
["unicodeslot"]=0x0449, -- щ
},
[0x044A]={
- ["adobename"]="afii0x276C",
+ ["adobename"]="afii10092",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillichrdsn",
@@ -9523,7 +9536,7 @@ characters.data={
["unicodeslot"]=0x044A, -- ъ
},
[0x044B]={
- ["adobename"]="afii0x276D",
+ ["adobename"]="afii10093",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicery",
@@ -9533,7 +9546,7 @@ characters.data={
["unicodeslot"]=0x044B, -- ы
},
[0x044C]={
- ["adobename"]="afii0x276E",
+ ["adobename"]="afii10094",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicsftsn",
@@ -9543,7 +9556,7 @@ characters.data={
["unicodeslot"]=0x044C, -- ь
},
[0x044D]={
- ["adobename"]="afii0x276F",
+ ["adobename"]="afii10095",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicerev",
@@ -9553,7 +9566,7 @@ characters.data={
["unicodeslot"]=0x044D, -- э
},
[0x044E]={
- ["adobename"]="afii0x2770",
+ ["adobename"]="afii10096",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicyu",
@@ -9563,7 +9576,7 @@ characters.data={
["unicodeslot"]=0x044E, -- ю
},
[0x044F]={
- ["adobename"]="afii0x2771",
+ ["adobename"]="afii10097",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicya",
@@ -9583,7 +9596,7 @@ characters.data={
["unicodeslot"]=0x0450, -- ѐ
},
[0x0451]={
- ["adobename"]="afii0x2757",
+ ["adobename"]="afii10071",
["category"]="ll",
["cjkwd"]="a",
["contextname"]="cyrillicyo",
@@ -9594,7 +9607,7 @@ characters.data={
["unicodeslot"]=0x0451, -- ё
},
[0x0452]={
- ["adobename"]="afii0x2773",
+ ["adobename"]="afii10099",
["category"]="ll",
["contextname"]="cyrillicdje",
["description"]="CYRILLIC SMALL LETTER DJE",
@@ -9603,7 +9616,7 @@ characters.data={
["unicodeslot"]=0x0452, -- ђ
},
[0x0453]={
- ["adobename"]="afii0x2774",
+ ["adobename"]="afii10100",
["category"]="ll",
["contextname"]="cyrillicgje",
["description"]="CYRILLIC SMALL LETTER GJE",
@@ -9613,7 +9626,7 @@ characters.data={
["unicodeslot"]=0x0453, -- ѓ
},
[0x0454]={
- ["adobename"]="afii0x2775",
+ ["adobename"]="afii10101",
["category"]="ll",
["contextname"]="cyrillicie",
["description"]="CYRILLIC SMALL LETTER UKRAINIAN IE",
@@ -9622,7 +9635,7 @@ characters.data={
["unicodeslot"]=0x0454, -- є
},
[0x0455]={
- ["adobename"]="afii0x2776",
+ ["adobename"]="afii10102",
["category"]="ll",
["contextname"]="cyrillicdze",
["description"]="CYRILLIC SMALL LETTER DZE",
@@ -9631,7 +9644,7 @@ characters.data={
["unicodeslot"]=0x0455, -- ѕ
},
[0x0456]={
- ["adobename"]="afii0x2777",
+ ["adobename"]="afii10103",
["category"]="ll",
["contextname"]="cyrillicii",
["description"]="CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I",
@@ -9640,7 +9653,7 @@ characters.data={
["unicodeslot"]=0x0456, -- і
},
[0x0457]={
- ["adobename"]="afii0x2778",
+ ["adobename"]="afii10104",
["category"]="ll",
["contextname"]="cyrillicyi",
["description"]="CYRILLIC SMALL LETTER YI",
@@ -9650,7 +9663,7 @@ characters.data={
["unicodeslot"]=0x0457, -- ї
},
[0x0458]={
- ["adobename"]="afii0x2779",
+ ["adobename"]="afii10105",
["category"]="ll",
["contextname"]="cyrillicje",
["description"]="CYRILLIC SMALL LETTER JE",
@@ -9659,7 +9672,7 @@ characters.data={
["unicodeslot"]=0x0458, -- ј
},
[0x0459]={
- ["adobename"]="afii0x277A",
+ ["adobename"]="afii10106",
["category"]="ll",
["contextname"]="cyrilliclje",
["description"]="CYRILLIC SMALL LETTER LJE",
@@ -9668,7 +9681,7 @@ characters.data={
["unicodeslot"]=0x0459, -- љ
},
[0x045A]={
- ["adobename"]="afii0x277B",
+ ["adobename"]="afii10107",
["category"]="ll",
["contextname"]="cyrillicnje",
["description"]="CYRILLIC SMALL LETTER NJE",
@@ -9677,7 +9690,7 @@ characters.data={
["unicodeslot"]=0x045A, -- њ
},
[0x045B]={
- ["adobename"]="afii0x277C",
+ ["adobename"]="afii10108",
["category"]="ll",
["contextname"]="cyrillictshe",
["description"]="CYRILLIC SMALL LETTER TSHE",
@@ -9686,7 +9699,7 @@ characters.data={
["unicodeslot"]=0x045B, -- ћ
},
[0x045C]={
- ["adobename"]="afii0x277D",
+ ["adobename"]="afii10109",
["category"]="ll",
["contextname"]="cyrillickje",
["description"]="CYRILLIC SMALL LETTER KJE",
@@ -9706,7 +9719,7 @@ characters.data={
["unicodeslot"]=0x045D, -- ѝ
},
[0x045E]={
- ["adobename"]="afii0x277E",
+ ["adobename"]="afii10110",
["category"]="ll",
["contextname"]="cyrillicushrt",
["description"]="CYRILLIC SMALL LETTER SHORT U",
@@ -9716,7 +9729,7 @@ characters.data={
["unicodeslot"]=0x045E, -- ў
},
[0x045F]={
- ["adobename"]="afii0x27D1",
+ ["adobename"]="afii10193",
["category"]="ll",
["contextname"]="cyrillicdzhe",
["description"]="CYRILLIC SMALL LETTER DZHE",
@@ -9741,7 +9754,7 @@ characters.data={
["unicodeslot"]=0x0461, -- ѡ
},
[0x0462]={
- ["adobename"]="afii0x27A2",
+ ["adobename"]="afii10146",
["category"]="lu",
["contextname"]="cyrillicYAT",
["description"]="CYRILLIC CAPITAL LETTER YAT",
@@ -9750,7 +9763,7 @@ characters.data={
["unicodeslot"]=0x0462, -- Ѣ
},
[0x0463]={
- ["adobename"]="afii0x27D2",
+ ["adobename"]="afii10194",
["category"]="ll",
["contextname"]="cyrillicyat",
["description"]="CYRILLIC SMALL LETTER YAT",
@@ -9871,7 +9884,7 @@ characters.data={
["unicodeslot"]=0x0471, -- ѱ
},
[0x0472]={
- ["adobename"]="afii0x27A3",
+ ["adobename"]="afii10147",
["category"]="lu",
["contextname"]="cyrillicFITA",
["description"]="CYRILLIC CAPITAL LETTER FITA",
@@ -9880,7 +9893,7 @@ characters.data={
["unicodeslot"]=0x0472, -- Ѳ
},
[0x0473]={
- ["adobename"]="afii0x27D3",
+ ["adobename"]="afii10195",
["category"]="ll",
["contextname"]="cyrillicfita",
["description"]="CYRILLIC SMALL LETTER FITA",
@@ -9889,7 +9902,7 @@ characters.data={
["unicodeslot"]=0x0473, -- ѳ
},
[0x0474]={
- ["adobename"]="afii0x27A4",
+ ["adobename"]="afii10148",
["category"]="lu",
["contextname"]="cyrillicIZHITSA",
["description"]="CYRILLIC CAPITAL LETTER IZHITSA",
@@ -9898,7 +9911,7 @@ characters.data={
["unicodeslot"]=0x0474, -- Ѵ
},
[0x0475]={
- ["adobename"]="afii0x27D4",
+ ["adobename"]="afii10196",
["category"]="ll",
["contextname"]="cyrillicizhitsa",
["description"]="CYRILLIC SMALL LETTER IZHITSA",
@@ -10105,7 +10118,7 @@ characters.data={
["unicodeslot"]=0x048F, -- ҏ
},
[0x0490]={
- ["adobename"]="afii0x2742",
+ ["adobename"]="afii10050",
["category"]="lu",
["contextname"]="cyrillicGHEupturn",
["description"]="CYRILLIC CAPITAL LETTER GHE WITH UPTURN",
@@ -10115,7 +10128,7 @@ characters.data={
["unicodeslot"]=0x0490, -- Ґ
},
[0x0491]={
- ["adobename"]="afii0x2772",
+ ["adobename"]="afii10098",
["category"]="ll",
["contextname"]="cyrillicgheupturn",
["description"]="CYRILLIC SMALL LETTER GHE WITH UPTURN",
@@ -10746,7 +10759,7 @@ characters.data={
["unicodeslot"]=0x04D8, -- Ә
},
[0x04D9]={
- ["adobename"]="afii0x2A5E",
+ ["adobename"]="afii10846",
["category"]="ll",
["contextname"]="cyrillicschwa",
["description"]="CYRILLIC SMALL LETTER SCHWA",
@@ -12030,70 +12043,70 @@ characters.data={
["unicodeslot"]=0x05AF, -- ֯
},
[0x05B0]={
- ["adobename"]="afii0xE1C7",
+ ["adobename"]="afii57799",
["category"]="mn",
["description"]="HEBREW POINT SHEVA",
["linebreak"]="cm",
["unicodeslot"]=0x05B0, -- ְ
},
[0x05B1]={
- ["adobename"]="afii0xE1C9",
+ ["adobename"]="afii57801",
["category"]="mn",
["description"]="HEBREW POINT HATAF SEGOL",
["linebreak"]="cm",
["unicodeslot"]=0x05B1, -- ֱ
},
[0x05B2]={
- ["adobename"]="afii0xE1C8",
+ ["adobename"]="afii57800",
["category"]="mn",
["description"]="HEBREW POINT HATAF PATAH",
["linebreak"]="cm",
["unicodeslot"]=0x05B2, -- ֲ
},
[0x05B3]={
- ["adobename"]="afii0xE1CA",
+ ["adobename"]="afii57802",
["category"]="mn",
["description"]="HEBREW POINT HATAF QAMATS",
["linebreak"]="cm",
["unicodeslot"]=0x05B3, -- ֳ
},
[0x05B4]={
- ["adobename"]="afii0xE1C1",
+ ["adobename"]="afii57793",
["category"]="mn",
["description"]="HEBREW POINT HIRIQ",
["linebreak"]="cm",
["unicodeslot"]=0x05B4, -- ִ
},
[0x05B5]={
- ["adobename"]="afii0xE1C2",
+ ["adobename"]="afii57794",
["category"]="mn",
["description"]="HEBREW POINT TSERE",
["linebreak"]="cm",
["unicodeslot"]=0x05B5, -- ֵ
},
[0x05B6]={
- ["adobename"]="afii0xE1C3",
+ ["adobename"]="afii57795",
["category"]="mn",
["description"]="HEBREW POINT SEGOL",
["linebreak"]="cm",
["unicodeslot"]=0x05B6, -- ֶ
},
[0x05B7]={
- ["adobename"]="afii0xE1C6",
+ ["adobename"]="afii57798",
["category"]="mn",
["description"]="HEBREW POINT PATAH",
["linebreak"]="cm",
["unicodeslot"]=0x05B7, -- ַ
},
[0x05B8]={
- ["adobename"]="afii0xE1C5",
+ ["adobename"]="afii57797",
["category"]="mn",
["description"]="HEBREW POINT QAMATS",
["linebreak"]="cm",
["unicodeslot"]=0x05B8, -- ָ
},
[0x05B9]={
- ["adobename"]="afii0xE1CE",
+ ["adobename"]="afii57806",
["category"]="mn",
["description"]="HEBREW POINT HOLAM",
["linebreak"]="cm",
@@ -12106,63 +12119,63 @@ characters.data={
["unicodeslot"]=0x05BA, -- ֺ
},
[0x05BB]={
- ["adobename"]="afii0xE1C4",
+ ["adobename"]="afii57796",
["category"]="mn",
["description"]="HEBREW POINT QUBUTS",
["linebreak"]="cm",
["unicodeslot"]=0x05BB, -- ֻ
},
[0x05BC]={
- ["adobename"]="afii0xE1CF",
+ ["adobename"]="afii57807",
["category"]="mn",
["description"]="HEBREW POINT DAGESH OR MAPIQ",
["linebreak"]="cm",
["unicodeslot"]=0x05BC, -- ּ
},
[0x05BD]={
- ["adobename"]="afii0xE1EF",
+ ["adobename"]="afii57839",
["category"]="mn",
["description"]="HEBREW POINT METEG",
["linebreak"]="cm",
["unicodeslot"]=0x05BD, -- ֽ
},
[0x05BE]={
- ["adobename"]="afii0xE12D",
+ ["adobename"]="afii57645",
["category"]="po",
["description"]="HEBREW PUNCTUATION MAQAF",
["linebreak"]="ba",
["unicodeslot"]=0x05BE, -- ־
},
[0x05BF]={
- ["adobename"]="afii0xE1F1",
+ ["adobename"]="afii57841",
["category"]="mn",
["description"]="HEBREW POINT RAFE",
["linebreak"]="cm",
["unicodeslot"]=0x05BF, -- ֿ
},
[0x05C0]={
- ["adobename"]="afii0xE1F2",
+ ["adobename"]="afii57842",
["category"]="po",
["description"]="HEBREW PUNCTUATION PASEQ",
["linebreak"]="al",
["unicodeslot"]=0x05C0, -- ׀
},
[0x05C1]={
- ["adobename"]="afii0xE1CC",
+ ["adobename"]="afii57804",
["category"]="mn",
["description"]="HEBREW POINT SHIN DOT",
["linebreak"]="cm",
["unicodeslot"]=0x05C1, -- ׁ
},
[0x05C2]={
- ["adobename"]="afii0xE1CB",
+ ["adobename"]="afii57803",
["category"]="mn",
["description"]="HEBREW POINT SIN DOT",
["linebreak"]="cm",
["unicodeslot"]=0x05C2, -- ׂ
},
[0x05C3]={
- ["adobename"]="afii0xE13A",
+ ["adobename"]="afii57658",
["category"]="po",
["description"]="HEBREW PUNCTUATION SOF PASUQ",
["linebreak"]="al",
@@ -12193,7 +12206,7 @@ characters.data={
["unicodeslot"]=0x05C7, -- ׇ
},
[0x05D0]={
- ["adobename"]="afii0xE140",
+ ["adobename"]="afii57664",
["category"]="lo",
["contextname"]="hebrewAlef",
["description"]="HEBREW LETTER ALEF",
@@ -12201,7 +12214,7 @@ characters.data={
["unicodeslot"]=0x05D0, -- א
},
[0x05D1]={
- ["adobename"]="afii0xE141",
+ ["adobename"]="afii57665",
["category"]="lo",
["contextname"]="hebrewBet",
["description"]="HEBREW LETTER BET",
@@ -12209,7 +12222,7 @@ characters.data={
["unicodeslot"]=0x05D1, -- ב
},
[0x05D2]={
- ["adobename"]="afii0xE142",
+ ["adobename"]="afii57666",
["category"]="lo",
["contextname"]="hebrewGimel",
["description"]="HEBREW LETTER GIMEL",
@@ -12217,7 +12230,7 @@ characters.data={
["unicodeslot"]=0x05D2, -- ג
},
[0x05D3]={
- ["adobename"]="afii0xE143",
+ ["adobename"]="afii57667",
["category"]="lo",
["contextname"]="hebrewDalet",
["description"]="HEBREW LETTER DALET",
@@ -12225,7 +12238,7 @@ characters.data={
["unicodeslot"]=0x05D3, -- ד
},
[0x05D4]={
- ["adobename"]="afii0xE144",
+ ["adobename"]="afii57668",
["category"]="lo",
["contextname"]="hebrewHe",
["description"]="HEBREW LETTER HE",
@@ -12233,7 +12246,7 @@ characters.data={
["unicodeslot"]=0x05D4, -- ה
},
[0x05D5]={
- ["adobename"]="afii0xE145",
+ ["adobename"]="afii57669",
["category"]="lo",
["contextname"]="hebrewVav",
["description"]="HEBREW LETTER VAV",
@@ -12241,7 +12254,7 @@ characters.data={
["unicodeslot"]=0x05D5, -- ו
},
[0x05D6]={
- ["adobename"]="afii0xE146",
+ ["adobename"]="afii57670",
["category"]="lo",
["contextname"]="hebrewZayin",
["description"]="HEBREW LETTER ZAYIN",
@@ -12249,7 +12262,7 @@ characters.data={
["unicodeslot"]=0x05D6, -- ז
},
[0x05D7]={
- ["adobename"]="afii0xE147",
+ ["adobename"]="afii57671",
["category"]="lo",
["contextname"]="hebrewHet",
["description"]="HEBREW LETTER HET",
@@ -12257,7 +12270,7 @@ characters.data={
["unicodeslot"]=0x05D7, -- ח
},
[0x05D8]={
- ["adobename"]="afii0xE148",
+ ["adobename"]="afii57672",
["category"]="lo",
["contextname"]="hebrewTet",
["description"]="HEBREW LETTER TET",
@@ -12265,7 +12278,7 @@ characters.data={
["unicodeslot"]=0x05D8, -- ט
},
[0x05D9]={
- ["adobename"]="afii0xE149",
+ ["adobename"]="afii57673",
["category"]="lo",
["contextname"]="hebrewYod",
["description"]="HEBREW LETTER YOD",
@@ -12273,7 +12286,7 @@ characters.data={
["unicodeslot"]=0x05D9, -- י
},
[0x05DA]={
- ["adobename"]="afii0xE14A",
+ ["adobename"]="afii57674",
["category"]="lo",
["contextname"]="hebrewKaffinal",
["description"]="HEBREW LETTER FINAL KAF",
@@ -12281,7 +12294,7 @@ characters.data={
["unicodeslot"]=0x05DA, -- ך
},
[0x05DB]={
- ["adobename"]="afii0xE14B",
+ ["adobename"]="afii57675",
["category"]="lo",
["contextname"]="hebrewKaf",
["description"]="HEBREW LETTER KAF",
@@ -12289,7 +12302,7 @@ characters.data={
["unicodeslot"]=0x05DB, -- כ
},
[0x05DC]={
- ["adobename"]="afii0xE14C",
+ ["adobename"]="afii57676",
["category"]="lo",
["contextname"]="hebrewLamed",
["description"]="HEBREW LETTER LAMED",
@@ -12297,7 +12310,7 @@ characters.data={
["unicodeslot"]=0x05DC, -- ל
},
[0x05DD]={
- ["adobename"]="afii0xE14D",
+ ["adobename"]="afii57677",
["category"]="lo",
["contextname"]="hebrewMemfinal",
["description"]="HEBREW LETTER FINAL MEM",
@@ -12305,7 +12318,7 @@ characters.data={
["unicodeslot"]=0x05DD, -- ם
},
[0x05DE]={
- ["adobename"]="afii0xE14E",
+ ["adobename"]="afii57678",
["category"]="lo",
["contextname"]="hebrewMem",
["description"]="HEBREW LETTER MEM",
@@ -12313,7 +12326,7 @@ characters.data={
["unicodeslot"]=0x05DE, -- מ
},
[0x05DF]={
- ["adobename"]="afii0xE14F",
+ ["adobename"]="afii57679",
["category"]="lo",
["contextname"]="hebrewNunfinal",
["description"]="HEBREW LETTER FINAL NUN",
@@ -12321,7 +12334,7 @@ characters.data={
["unicodeslot"]=0x05DF, -- ן
},
[0x05E0]={
- ["adobename"]="afii0xE150",
+ ["adobename"]="afii57680",
["category"]="lo",
["contextname"]="hebrewNun",
["description"]="HEBREW LETTER NUN",
@@ -12329,7 +12342,7 @@ characters.data={
["unicodeslot"]=0x05E0, -- נ
},
[0x05E1]={
- ["adobename"]="afii0xE151",
+ ["adobename"]="afii57681",
["category"]="lo",
["contextname"]="hebrewSamekh",
["description"]="HEBREW LETTER SAMEKH",
@@ -12337,7 +12350,7 @@ characters.data={
["unicodeslot"]=0x05E1, -- ס
},
[0x05E2]={
- ["adobename"]="afii0xE152",
+ ["adobename"]="afii57682",
["category"]="lo",
["contextname"]="hebrewAyin",
["description"]="HEBREW LETTER AYIN",
@@ -12345,7 +12358,7 @@ characters.data={
["unicodeslot"]=0x05E2, -- ע
},
[0x05E3]={
- ["adobename"]="afii0xE153",
+ ["adobename"]="afii57683",
["category"]="lo",
["contextname"]="hebrewPefinal",
["description"]="HEBREW LETTER FINAL PE",
@@ -12353,7 +12366,7 @@ characters.data={
["unicodeslot"]=0x05E3, -- ף
},
[0x05E4]={
- ["adobename"]="afii0xE154",
+ ["adobename"]="afii57684",
["category"]="lo",
["contextname"]="hebrewPe",
["description"]="HEBREW LETTER PE",
@@ -12361,7 +12374,7 @@ characters.data={
["unicodeslot"]=0x05E4, -- פ
},
[0x05E5]={
- ["adobename"]="afii0xE155",
+ ["adobename"]="afii57685",
["category"]="lo",
["contextname"]="hebrewTsadifinal",
["description"]="HEBREW LETTER FINAL TSADI",
@@ -12369,7 +12382,7 @@ characters.data={
["unicodeslot"]=0x05E5, -- ץ
},
[0x05E6]={
- ["adobename"]="afii0xE156",
+ ["adobename"]="afii57686",
["category"]="lo",
["contextname"]="hebrewTsadi",
["description"]="HEBREW LETTER TSADI",
@@ -12377,7 +12390,7 @@ characters.data={
["unicodeslot"]=0x05E6, -- צ
},
[0x05E7]={
- ["adobename"]="afii0xE157",
+ ["adobename"]="afii57687",
["category"]="lo",
["contextname"]="hebrewQof",
["description"]="HEBREW LETTER QOF",
@@ -12385,7 +12398,7 @@ characters.data={
["unicodeslot"]=0x05E7, -- ק
},
[0x05E8]={
- ["adobename"]="afii0xE158",
+ ["adobename"]="afii57688",
["category"]="lo",
["contextname"]="hebrewResh",
["description"]="HEBREW LETTER RESH",
@@ -12393,7 +12406,7 @@ characters.data={
["unicodeslot"]=0x05E8, -- ר
},
[0x05E9]={
- ["adobename"]="afii0xE159",
+ ["adobename"]="afii57689",
["category"]="lo",
["contextname"]="hebrewShin",
["description"]="HEBREW LETTER SHIN",
@@ -12401,7 +12414,7 @@ characters.data={
["unicodeslot"]=0x05E9, -- ש
},
[0x05EA]={
- ["adobename"]="afii0xE15A",
+ ["adobename"]="afii57690",
["category"]="lo",
["contextname"]="hebrewTav",
["description"]="HEBREW LETTER TAV",
@@ -12409,21 +12422,21 @@ characters.data={
["unicodeslot"]=0x05EA, -- ת
},
[0x05F0]={
- ["adobename"]="afii0xE174",
+ ["adobename"]="afii57716",
["category"]="lo",
["description"]="HEBREW LIGATURE YIDDISH DOUBLE VAV",
["linebreak"]="al",
["unicodeslot"]=0x05F0, -- װ
},
[0x05F1]={
- ["adobename"]="afii0xE175",
+ ["adobename"]="afii57717",
["category"]="lo",
["description"]="HEBREW LIGATURE YIDDISH VAV YOD",
["linebreak"]="al",
["unicodeslot"]=0x05F1, -- ױ
},
[0x05F2]={
- ["adobename"]="afii0xE176",
+ ["adobename"]="afii57718",
["category"]="lo",
["description"]="HEBREW LIGATURE YIDDISH DOUBLE YOD",
["linebreak"]="al",
@@ -12472,7 +12485,7 @@ characters.data={
["unicodeslot"]=0x060B, -- ؋
},
[0x060C]={
- ["adobename"]="afii0xE02C",
+ ["adobename"]="afii57388",
["category"]="po",
["description"]="ARABIC COMMA",
["linebreak"]="ex",
@@ -12533,7 +12546,7 @@ characters.data={
["unicodeslot"]=0x0615, -- ؕ
},
[0x061B]={
- ["adobename"]="afii0xE03B",
+ ["adobename"]="afii57403",
["category"]="po",
["description"]="ARABIC SEMICOLON",
["linebreak"]="ex",
@@ -12546,21 +12559,21 @@ characters.data={
["unicodeslot"]=0x061E, -- ؞
},
[0x061F]={
- ["adobename"]="afii0xE03F",
+ ["adobename"]="afii57407",
["category"]="po",
["description"]="ARABIC QUESTION MARK",
["linebreak"]="ex",
["unicodeslot"]=0x061F, -- ؟
},
[0x0621]={
- ["adobename"]="afii0xE041",
+ ["adobename"]="afii57409",
["category"]="lo",
["description"]="ARABIC LETTER HAMZA",
["linebreak"]="al",
["unicodeslot"]=0x0621, -- ء
},
[0x0622]={
- ["adobename"]="afii0xE042",
+ ["adobename"]="afii57410",
["category"]="lo",
["description"]="ARABIC LETTER ALEF WITH MADDA ABOVE",
["linebreak"]="al",
@@ -12569,7 +12582,7 @@ characters.data={
["unicodeslot"]=0x0622, -- آ
},
[0x0623]={
- ["adobename"]="afii0xE043",
+ ["adobename"]="afii57411",
["category"]="lo",
["description"]="ARABIC LETTER ALEF WITH HAMZA ABOVE",
["linebreak"]="al",
@@ -12578,7 +12591,7 @@ characters.data={
["unicodeslot"]=0x0623, -- أ
},
[0x0624]={
- ["adobename"]="afii0xE044",
+ ["adobename"]="afii57412",
["category"]="lo",
["description"]="ARABIC LETTER WAW WITH HAMZA ABOVE",
["linebreak"]="al",
@@ -12587,7 +12600,7 @@ characters.data={
["unicodeslot"]=0x0624, -- ؤ
},
[0x0625]={
- ["adobename"]="afii0xE045",
+ ["adobename"]="afii57413",
["category"]="lo",
["description"]="ARABIC LETTER ALEF WITH HAMZA BELOW",
["linebreak"]="al",
@@ -12596,7 +12609,7 @@ characters.data={
["unicodeslot"]=0x0625, -- إ
},
[0x0626]={
- ["adobename"]="afii0xE046",
+ ["adobename"]="afii57414",
["category"]="lo",
["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE",
["linebreak"]="al",
@@ -12605,273 +12618,273 @@ characters.data={
["unicodeslot"]=0x0626, -- ئ
},
[0x0627]={
- ["adobename"]="afii0xE047",
+ ["adobename"]="afii57415",
["category"]="lo",
["description"]="ARABIC LETTER ALEF",
["linebreak"]="al",
["unicodeslot"]=0x0627, -- ا
},
[0x0628]={
- ["adobename"]="afii0xE048",
+ ["adobename"]="afii57416",
["category"]="lo",
["description"]="ARABIC LETTER BEH",
["linebreak"]="al",
["unicodeslot"]=0x0628, -- ب
},
[0x0629]={
- ["adobename"]="afii0xE049",
+ ["adobename"]="afii57417",
["category"]="lo",
["description"]="ARABIC LETTER TEH MARBUTA",
["linebreak"]="al",
["unicodeslot"]=0x0629, -- ة
},
[0x062A]={
- ["adobename"]="afii0xE04A",
+ ["adobename"]="afii57418",
["category"]="lo",
["description"]="ARABIC LETTER TEH",
["linebreak"]="al",
["unicodeslot"]=0x062A, -- ت
},
[0x062B]={
- ["adobename"]="afii0xE04B",
+ ["adobename"]="afii57419",
["category"]="lo",
["description"]="ARABIC LETTER THEH",
["linebreak"]="al",
["unicodeslot"]=0x062B, -- ث
},
[0x062C]={
- ["adobename"]="afii0xE04C",
+ ["adobename"]="afii57420",
["category"]="lo",
["description"]="ARABIC LETTER JEEM",
["linebreak"]="al",
["unicodeslot"]=0x062C, -- ج
},
[0x062D]={
- ["adobename"]="afii0xE04D",
+ ["adobename"]="afii57421",
["category"]="lo",
["description"]="ARABIC LETTER HAH",
["linebreak"]="al",
["unicodeslot"]=0x062D, -- ح
},
[0x062E]={
- ["adobename"]="afii0xE04E",
+ ["adobename"]="afii57422",
["category"]="lo",
["description"]="ARABIC LETTER KHAH",
["linebreak"]="al",
["unicodeslot"]=0x062E, -- خ
},
[0x062F]={
- ["adobename"]="afii0xE04F",
+ ["adobename"]="afii57423",
["category"]="lo",
["description"]="ARABIC LETTER DAL",
["linebreak"]="al",
["unicodeslot"]=0x062F, -- د
},
[0x0630]={
- ["adobename"]="afii0xE050",
+ ["adobename"]="afii57424",
["category"]="lo",
["description"]="ARABIC LETTER THAL",
["linebreak"]="al",
["unicodeslot"]=0x0630, -- ذ
},
[0x0631]={
- ["adobename"]="afii0xE051",
+ ["adobename"]="afii57425",
["category"]="lo",
["description"]="ARABIC LETTER REH",
["linebreak"]="al",
["unicodeslot"]=0x0631, -- ر
},
[0x0632]={
- ["adobename"]="afii0xE052",
+ ["adobename"]="afii57426",
["category"]="lo",
["description"]="ARABIC LETTER ZAIN",
["linebreak"]="al",
["unicodeslot"]=0x0632, -- ز
},
[0x0633]={
- ["adobename"]="afii0xE053",
+ ["adobename"]="afii57427",
["category"]="lo",
["description"]="ARABIC LETTER SEEN",
["linebreak"]="al",
["unicodeslot"]=0x0633, -- س
},
[0x0634]={
- ["adobename"]="afii0xE054",
+ ["adobename"]="afii57428",
["category"]="lo",
["description"]="ARABIC LETTER SHEEN",
["linebreak"]="al",
["unicodeslot"]=0x0634, -- ش
},
[0x0635]={
- ["adobename"]="afii0xE055",
+ ["adobename"]="afii57429",
["category"]="lo",
["description"]="ARABIC LETTER SAD",
["linebreak"]="al",
["unicodeslot"]=0x0635, -- ص
},
[0x0636]={
- ["adobename"]="afii0xE056",
+ ["adobename"]="afii57430",
["category"]="lo",
["description"]="ARABIC LETTER DAD",
["linebreak"]="al",
["unicodeslot"]=0x0636, -- ض
},
[0x0637]={
- ["adobename"]="afii0xE057",
+ ["adobename"]="afii57431",
["category"]="lo",
["description"]="ARABIC LETTER TAH",
["linebreak"]="al",
["unicodeslot"]=0x0637, -- ط
},
[0x0638]={
- ["adobename"]="afii0xE058",
+ ["adobename"]="afii57432",
["category"]="lo",
["description"]="ARABIC LETTER ZAH",
["linebreak"]="al",
["unicodeslot"]=0x0638, -- ظ
},
[0x0639]={
- ["adobename"]="afii0xE059",
+ ["adobename"]="afii57433",
["category"]="lo",
["description"]="ARABIC LETTER AIN",
["linebreak"]="al",
["unicodeslot"]=0x0639, -- ع
},
[0x063A]={
- ["adobename"]="afii0xE05A",
+ ["adobename"]="afii57434",
["category"]="lo",
["description"]="ARABIC LETTER GHAIN",
["linebreak"]="al",
["unicodeslot"]=0x063A, -- غ
},
[0x0640]={
- ["adobename"]="afii0xE060",
+ ["adobename"]="afii57440",
["category"]="lm",
["description"]="ARABIC TATWEEL",
["linebreak"]="al",
["unicodeslot"]=0x0640, -- ـ
},
[0x0641]={
- ["adobename"]="afii0xE061",
+ ["adobename"]="afii57441",
["category"]="lo",
["description"]="ARABIC LETTER FEH",
["linebreak"]="al",
["unicodeslot"]=0x0641, -- ف
},
[0x0642]={
- ["adobename"]="afii0xE062",
+ ["adobename"]="afii57442",
["category"]="lo",
["description"]="ARABIC LETTER QAF",
["linebreak"]="al",
["unicodeslot"]=0x0642, -- ق
},
[0x0643]={
- ["adobename"]="afii0xE063",
+ ["adobename"]="afii57443",
["category"]="lo",
["description"]="ARABIC LETTER KAF",
["linebreak"]="al",
["unicodeslot"]=0x0643, -- ك
},
[0x0644]={
- ["adobename"]="afii0xE064",
+ ["adobename"]="afii57444",
["category"]="lo",
["description"]="ARABIC LETTER LAM",
["linebreak"]="al",
["unicodeslot"]=0x0644, -- ل
},
[0x0645]={
- ["adobename"]="afii0xE065",
+ ["adobename"]="afii57445",
["category"]="lo",
["description"]="ARABIC LETTER MEEM",
["linebreak"]="al",
["unicodeslot"]=0x0645, -- م
},
[0x0646]={
- ["adobename"]="afii0xE066",
+ ["adobename"]="afii57446",
["category"]="lo",
["description"]="ARABIC LETTER NOON",
["linebreak"]="al",
["unicodeslot"]=0x0646, -- ن
},
[0x0647]={
- ["adobename"]="afii0xE07E",
+ ["adobename"]="afii57470",
["category"]="lo",
["description"]="ARABIC LETTER HEH",
["linebreak"]="al",
["unicodeslot"]=0x0647, -- ه
},
[0x0648]={
- ["adobename"]="afii0xE068",
+ ["adobename"]="afii57448",
["category"]="lo",
["description"]="ARABIC LETTER WAW",
["linebreak"]="al",
["unicodeslot"]=0x0648, -- و
},
[0x0649]={
- ["adobename"]="afii0xE069",
+ ["adobename"]="afii57449",
["category"]="lo",
["description"]="ARABIC LETTER ALEF MAKSURA",
["linebreak"]="al",
["unicodeslot"]=0x0649, -- ى
},
[0x064A]={
- ["adobename"]="afii0xE06A",
+ ["adobename"]="afii57450",
["category"]="lo",
["description"]="ARABIC LETTER YEH",
["linebreak"]="al",
["unicodeslot"]=0x064A, -- ي
},
[0x064B]={
- ["adobename"]="afii0xE06B",
+ ["adobename"]="afii57451",
["category"]="mn",
["description"]="ARABIC FATHATAN",
["linebreak"]="cm",
["unicodeslot"]=0x064B, -- ً
},
[0x064C]={
- ["adobename"]="afii0xE06C",
+ ["adobename"]="afii57452",
["category"]="mn",
["description"]="ARABIC DAMMATAN",
["linebreak"]="cm",
["unicodeslot"]=0x064C, -- ٌ
},
[0x064D]={
- ["adobename"]="afii0xE06D",
+ ["adobename"]="afii57453",
["category"]="mn",
["description"]="ARABIC KASRATAN",
["linebreak"]="cm",
["unicodeslot"]=0x064D, -- ٍ
},
[0x064E]={
- ["adobename"]="afii0xE06E",
+ ["adobename"]="afii57454",
["category"]="mn",
["description"]="ARABIC FATHA",
["linebreak"]="cm",
["unicodeslot"]=0x064E, -- َ
},
[0x064F]={
- ["adobename"]="afii0xE06F",
+ ["adobename"]="afii57455",
["category"]="mn",
["description"]="ARABIC DAMMA",
["linebreak"]="cm",
["unicodeslot"]=0x064F, -- ُ
},
[0x0650]={
- ["adobename"]="afii0xE070",
+ ["adobename"]="afii57456",
["category"]="mn",
["description"]="ARABIC KASRA",
["linebreak"]="cm",
["unicodeslot"]=0x0650, -- ِ
},
[0x0651]={
- ["adobename"]="afii0xE071",
+ ["adobename"]="afii57457",
["category"]="mn",
["description"]="ARABIC SHADDA",
["linebreak"]="cm",
["unicodeslot"]=0x0651, -- ّ
},
[0x0652]={
- ["adobename"]="afii0xE072",
+ ["adobename"]="afii57458",
["category"]="mn",
["description"]="ARABIC SUKUN",
["linebreak"]="cm",
@@ -12950,77 +12963,77 @@ characters.data={
["unicodeslot"]=0x065E, -- ٞ
},
[0x0660]={
- ["adobename"]="afii0xE030",
+ ["adobename"]="afii57392",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT ZERO",
["linebreak"]="nu",
["unicodeslot"]=0x0660, -- ٠
},
[0x0661]={
- ["adobename"]="afii0xE031",
+ ["adobename"]="afii57393",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT ONE",
["linebreak"]="nu",
["unicodeslot"]=0x0661, -- ١
},
[0x0662]={
- ["adobename"]="afii0xE032",
+ ["adobename"]="afii57394",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT TWO",
["linebreak"]="nu",
["unicodeslot"]=0x0662, -- ٢
},
[0x0663]={
- ["adobename"]="afii0xE033",
+ ["adobename"]="afii57395",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT THREE",
["linebreak"]="nu",
["unicodeslot"]=0x0663, -- ٣
},
[0x0664]={
- ["adobename"]="afii0xE034",
+ ["adobename"]="afii57396",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT FOUR",
["linebreak"]="nu",
["unicodeslot"]=0x0664, -- ٤
},
[0x0665]={
- ["adobename"]="afii0xE035",
+ ["adobename"]="afii57397",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT FIVE",
["linebreak"]="nu",
["unicodeslot"]=0x0665, -- ٥
},
[0x0666]={
- ["adobename"]="afii0xE036",
+ ["adobename"]="afii57398",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT SIX",
["linebreak"]="nu",
["unicodeslot"]=0x0666, -- ٦
},
[0x0667]={
- ["adobename"]="afii0xE037",
+ ["adobename"]="afii57399",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT SEVEN",
["linebreak"]="nu",
["unicodeslot"]=0x0667, -- ٧
},
[0x0668]={
- ["adobename"]="afii0xE038",
+ ["adobename"]="afii57400",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT EIGHT",
["linebreak"]="nu",
["unicodeslot"]=0x0668, -- ٨
},
[0x0669]={
- ["adobename"]="afii0xE039",
+ ["adobename"]="afii57401",
["category"]="nd",
["description"]="ARABIC-INDIC DIGIT NINE",
["linebreak"]="nu",
["unicodeslot"]=0x0669, -- ٩
},
[0x066A]={
- ["adobename"]="afii0xE025",
+ ["adobename"]="afii57381",
["category"]="po",
["description"]="ARABIC PERCENT SIGN",
["linebreak"]="ex",
@@ -13039,7 +13052,7 @@ characters.data={
["unicodeslot"]=0x066C, -- ٬
},
[0x066D]={
- ["adobename"]="afii0xF6BF",
+ ["adobename"]="afii63167",
["category"]="po",
["description"]="ARABIC FIVE POINTED STAR",
["linebreak"]="al",
@@ -13119,7 +13132,7 @@ characters.data={
["unicodeslot"]=0x0678, -- ٸ
},
[0x0679]={
- ["adobename"]="afii0xE0A7",
+ ["adobename"]="afii57511",
["category"]="lo",
["description"]="ARABIC LETTER TTEH",
["linebreak"]="al",
@@ -13152,7 +13165,7 @@ characters.data={
["unicodeslot"]=0x067D, -- ٽ
},
[0x067E]={
- ["adobename"]="afii0xE0A2",
+ ["adobename"]="afii57506",
["category"]="lo",
["description"]="ARABIC LETTER PEH",
["linebreak"]="al",
@@ -13204,7 +13217,7 @@ characters.data={
["unicodeslot"]=0x0685, -- څ
},
[0x0686]={
- ["adobename"]="afii0xE0A3",
+ ["adobename"]="afii57507",
["category"]="lo",
["description"]="ARABIC LETTER TCHEH",
["linebreak"]="al",
@@ -13217,7 +13230,7 @@ characters.data={
["unicodeslot"]=0x0687, -- ڇ
},
[0x0688]={
- ["adobename"]="afii0xE0A8",
+ ["adobename"]="afii57512",
["category"]="lo",
["description"]="ARABIC LETTER DDAL",
["linebreak"]="al",
@@ -13277,7 +13290,7 @@ characters.data={
["unicodeslot"]=0x0690, -- ڐ
},
[0x0691]={
- ["adobename"]="afii0xE0A9",
+ ["adobename"]="afii57513",
["category"]="lo",
["description"]="ARABIC LETTER RREH",
["linebreak"]="al",
@@ -13326,7 +13339,7 @@ characters.data={
["unicodeslot"]=0x0697, -- ڗ
},
[0x0698]={
- ["adobename"]="afii0xE0A4",
+ ["adobename"]="afii57508",
["category"]="lo",
["description"]="ARABIC LETTER JEH",
["linebreak"]="al",
@@ -13409,7 +13422,7 @@ characters.data={
["unicodeslot"]=0x06A3, -- ڣ
},
[0x06A4]={
- ["adobename"]="afii0xE0A1",
+ ["adobename"]="afii57505",
["category"]="lo",
["description"]="ARABIC LETTER VEH",
["linebreak"]="al",
@@ -13482,7 +13495,7 @@ characters.data={
["unicodeslot"]=0x06AE, -- ڮ
},
[0x06AF]={
- ["adobename"]="afii0xE0A5",
+ ["adobename"]="afii57509",
["category"]="lo",
["description"]="ARABIC LETTER GAF",
["linebreak"]="al",
@@ -13557,7 +13570,7 @@ characters.data={
["unicodeslot"]=0x06B9, -- ڹ
},
[0x06BA]={
- ["adobename"]="afii0xE0AA",
+ ["adobename"]="afii57514",
["category"]="lo",
["description"]="ARABIC LETTER NOON GHUNNA",
["linebreak"]="al",
@@ -13714,7 +13727,7 @@ characters.data={
["unicodeslot"]=0x06D1, -- ۑ
},
[0x06D2]={
- ["adobename"]="afii0xE0AF",
+ ["adobename"]="afii57519",
["category"]="lo",
["description"]="ARABIC LETTER YEH BARREE",
["linebreak"]="al",
@@ -13734,7 +13747,7 @@ characters.data={
["unicodeslot"]=0x06D4, -- ۔
},
[0x06D5]={
- ["adobename"]="afii0xE0BE",
+ ["adobename"]="afii57534",
["category"]="lo",
["description"]="ARABIC LETTER AE",
["linebreak"]="al",
@@ -42607,28 +42620,28 @@ characters.data={
["unicodeslot"]=0x200B, --
},
[0x200C]={
- ["adobename"]="afii0xF0E0",
+ ["adobename"]="afii61664",
["category"]="cf",
["description"]="ZERO WIDTH NON-JOINER",
["linebreak"]="cm",
["unicodeslot"]=0x200C, --
},
[0x200D]={
- ["adobename"]="afii0x012D",
+ ["adobename"]="afii301",
["category"]="cf",
["description"]="ZERO WIDTH JOINER",
["linebreak"]="cm",
["unicodeslot"]=0x200D, --
},
[0x200E]={
- ["adobename"]="afii0x012B",
+ ["adobename"]="afii299",
["category"]="cf",
["description"]="LEFT-TO-RIGHT MARK",
["linebreak"]="cm",
["unicodeslot"]=0x200E, --
},
[0x200F]={
- ["adobename"]="afii0x012C",
+ ["adobename"]="afii300",
["category"]="cf",
["description"]="RIGHT-TO-LEFT MARK",
["linebreak"]="cm",
@@ -42671,11 +42684,11 @@ characters.data={
["cjkwd"]="a",
["contextname"]="emdash",
["description"]="EM DASH",
- ["linebreak"]="b0x0002",
+ ["linebreak"]="b2",
["unicodeslot"]=0x2014, -- —
},
[0x2015]={
- ["adobename"]="afii0x00D0",
+ ["adobename"]="afii208",
["category"]="pd",
["cjkwd"]="a",
["contextname"]="texthorizontalbar",
@@ -42856,21 +42869,21 @@ characters.data={
["unicodeslot"]=0x202B, --
},
[0x202C]={
- ["adobename"]="afii0xF085",
+ ["adobename"]="afii61573",
["category"]="cf",
["description"]="POP DIRECTIONAL FORMATTING",
["linebreak"]="cm",
["unicodeslot"]=0x202C, --
},
[0x202D]={
- ["adobename"]="afii0xF086",
+ ["adobename"]="afii61574",
["category"]="cf",
["description"]="LEFT-TO-RIGHT OVERRIDE",
["linebreak"]="cm",
["unicodeslot"]=0x202D, --
},
[0x202E]={
- ["adobename"]="afii0xF087",
+ ["adobename"]="afii61575",
["category"]="cf",
["description"]="RIGHT-TO-LEFT OVERRIDE",
["linebreak"]="cm",
@@ -43571,7 +43584,7 @@ characters.data={
["unicodeslot"]=0x20A9, -- ₩
},
[0x20AA]={
- ["adobename"]="afii0xE124",
+ ["adobename"]="afii57636",
["category"]="sc",
["description"]="NEW SHEQEL SIGN",
["linebreak"]="pr",
@@ -43876,7 +43889,7 @@ characters.data={
["unicodeslot"]=0x2104, -- ℄
},
[0x2105]={
- ["adobename"]="afii0xEF40",
+ ["adobename"]="afii61248",
["category"]="so",
["cjkwd"]="a",
["description"]="CARE OF",
@@ -43977,7 +43990,7 @@ characters.data={
["unicodeslot"]=0x2112, -- ℒ
},
[0x2113]={
- ["adobename"]="afii0xEF69",
+ ["adobename"]="afii61289",
["category"]="ll",
["cjkwd"]="a",
["description"]="SCRIPT SMALL L",
@@ -44001,7 +44014,7 @@ characters.data={
["unicodeslot"]=0x2115, -- ℕ
},
[0x2116]={
- ["adobename"]="afii0xEFA8",
+ ["adobename"]="afii61352",
["category"]="so",
["cjkwd"]="a",
["contextname"]="textnumero",
@@ -50251,7 +50264,7 @@ characters.data={
["unicodeslot"]=0x24FF, -- ⓿
},
[0x2500]={
- ["adobename"]="SF0x186A0",
+ ["adobename"]="SF100000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT HORIZONTAL",
@@ -50266,7 +50279,7 @@ characters.data={
["unicodeslot"]=0x2501, -- ━
},
[0x2502]={
- ["adobename"]="SF0x1ADB0",
+ ["adobename"]="SF110000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT VERTICAL",
@@ -50337,7 +50350,7 @@ characters.data={
["unicodeslot"]=0x250B, -- ┋
},
[0x250C]={
- ["adobename"]="SF0x2710",
+ ["adobename"]="SF10000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT DOWN AND RIGHT",
@@ -50366,7 +50379,7 @@ characters.data={
["unicodeslot"]=0x250F, -- ┏
},
[0x2510]={
- ["adobename"]="SF0x7530",
+ ["adobename"]="SF30000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT DOWN AND LEFT",
@@ -50395,7 +50408,7 @@ characters.data={
["unicodeslot"]=0x2513, -- ┓
},
[0x2514]={
- ["adobename"]="SF0x4E20",
+ ["adobename"]="SF20000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT UP AND RIGHT",
@@ -50424,7 +50437,7 @@ characters.data={
["unicodeslot"]=0x2517, -- ┗
},
[0x2518]={
- ["adobename"]="SF0x9C40",
+ ["adobename"]="SF40000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT UP AND LEFT",
@@ -50453,7 +50466,7 @@ characters.data={
["unicodeslot"]=0x251B, -- ┛
},
[0x251C]={
- ["adobename"]="SF0x13880",
+ ["adobename"]="SF80000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT VERTICAL AND RIGHT",
@@ -50510,7 +50523,7 @@ characters.data={
["unicodeslot"]=0x2523, -- ┣
},
[0x2524]={
- ["adobename"]="SF0x15F90",
+ ["adobename"]="SF90000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT VERTICAL AND LEFT",
@@ -50567,7 +50580,7 @@ characters.data={
["unicodeslot"]=0x252B, -- ┫
},
[0x252C]={
- ["adobename"]="SF0xEA60",
+ ["adobename"]="SF60000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT DOWN AND HORIZONTAL",
@@ -50624,7 +50637,7 @@ characters.data={
["unicodeslot"]=0x2533, -- ┳
},
[0x2534]={
- ["adobename"]="SF0x11170",
+ ["adobename"]="SF70000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT UP AND HORIZONTAL",
@@ -50681,7 +50694,7 @@ characters.data={
["unicodeslot"]=0x253B, -- ┻
},
[0x253C]={
- ["adobename"]="SF0xC350",
+ ["adobename"]="SF50000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL",
@@ -50818,7 +50831,7 @@ characters.data={
["unicodeslot"]=0x254F, -- ╏
},
[0x2550]={
- ["adobename"]="SF0x68FB0",
+ ["adobename"]="SF430000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE HORIZONTAL",
@@ -50826,7 +50839,7 @@ characters.data={
["unicodeslot"]=0x2550, -- ═
},
[0x2551]={
- ["adobename"]="SF0x3A980",
+ ["adobename"]="SF240000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE VERTICAL",
@@ -50834,7 +50847,7 @@ characters.data={
["unicodeslot"]=0x2551, -- ║
},
[0x2552]={
- ["adobename"]="SF0x7C830",
+ ["adobename"]="SF510000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE",
@@ -50842,7 +50855,7 @@ characters.data={
["unicodeslot"]=0x2552, -- ╒
},
[0x2553]={
- ["adobename"]="SF0x7EF40",
+ ["adobename"]="SF520000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE",
@@ -50850,7 +50863,7 @@ characters.data={
["unicodeslot"]=0x2553, -- ╓
},
[0x2554]={
- ["adobename"]="SF0x5F370",
+ ["adobename"]="SF390000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE DOWN AND RIGHT",
@@ -50858,7 +50871,7 @@ characters.data={
["unicodeslot"]=0x2554, -- ╔
},
[0x2555]={
- ["adobename"]="SF0x35B60",
+ ["adobename"]="SF220000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE",
@@ -50866,7 +50879,7 @@ characters.data={
["unicodeslot"]=0x2555, -- ╕
},
[0x2556]={
- ["adobename"]="SF0x33450",
+ ["adobename"]="SF210000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE",
@@ -50874,7 +50887,7 @@ characters.data={
["unicodeslot"]=0x2556, -- ╖
},
[0x2557]={
- ["adobename"]="SF0x3D090",
+ ["adobename"]="SF250000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE DOWN AND LEFT",
@@ -50882,7 +50895,7 @@ characters.data={
["unicodeslot"]=0x2557, -- ╗
},
[0x2558]={
- ["adobename"]="SF0x7A120",
+ ["adobename"]="SF500000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE",
@@ -50890,7 +50903,7 @@ characters.data={
["unicodeslot"]=0x2558, -- ╘
},
[0x2559]={
- ["adobename"]="SF0x77A10",
+ ["adobename"]="SF490000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE",
@@ -50898,7 +50911,7 @@ characters.data={
["unicodeslot"]=0x2559, -- ╙
},
[0x255A]={
- ["adobename"]="SF0x5CC60",
+ ["adobename"]="SF380000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE UP AND RIGHT",
@@ -50906,7 +50919,7 @@ characters.data={
["unicodeslot"]=0x255A, -- ╚
},
[0x255B]={
- ["adobename"]="SF0x445C0",
+ ["adobename"]="SF280000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP SINGLE AND LEFT DOUBLE",
@@ -50914,7 +50927,7 @@ characters.data={
["unicodeslot"]=0x255B, -- ╛
},
[0x255C]={
- ["adobename"]="SF0x41EB0",
+ ["adobename"]="SF270000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP DOUBLE AND LEFT SINGLE",
@@ -50922,7 +50935,7 @@ characters.data={
["unicodeslot"]=0x255C, -- ╜
},
[0x255D]={
- ["adobename"]="SF0x3F7A0",
+ ["adobename"]="SF260000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE UP AND LEFT",
@@ -50930,7 +50943,7 @@ characters.data={
["unicodeslot"]=0x255D, -- ╝
},
[0x255E]={
- ["adobename"]="SF0x57E40",
+ ["adobename"]="SF360000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE",
@@ -50938,7 +50951,7 @@ characters.data={
["unicodeslot"]=0x255E, -- ╞
},
[0x255F]={
- ["adobename"]="SF0x5A550",
+ ["adobename"]="SF370000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE",
@@ -50946,7 +50959,7 @@ characters.data={
["unicodeslot"]=0x255F, -- ╟
},
[0x2560]={
- ["adobename"]="SF0x668A0",
+ ["adobename"]="SF420000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE VERTICAL AND RIGHT",
@@ -50954,7 +50967,7 @@ characters.data={
["unicodeslot"]=0x2560, -- ╠
},
[0x2561]={
- ["adobename"]="SF0x2E630",
+ ["adobename"]="SF190000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE",
@@ -50962,7 +50975,7 @@ characters.data={
["unicodeslot"]=0x2561, -- ╡
},
[0x2562]={
- ["adobename"]="SF0x30D40",
+ ["adobename"]="SF200000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE",
@@ -50970,7 +50983,7 @@ characters.data={
["unicodeslot"]=0x2562, -- ╢
},
[0x2563]={
- ["adobename"]="SF0x38270",
+ ["adobename"]="SF230000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE VERTICAL AND LEFT",
@@ -50978,7 +50991,7 @@ characters.data={
["unicodeslot"]=0x2563, -- ╣
},
[0x2564]={
- ["adobename"]="SF0x72BF0",
+ ["adobename"]="SF470000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE",
@@ -50986,7 +50999,7 @@ characters.data={
["unicodeslot"]=0x2564, -- ╤
},
[0x2565]={
- ["adobename"]="SF0x75300",
+ ["adobename"]="SF480000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE",
@@ -50994,7 +51007,7 @@ characters.data={
["unicodeslot"]=0x2565, -- ╥
},
[0x2566]={
- ["adobename"]="SF0x64190",
+ ["adobename"]="SF410000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL",
@@ -51002,7 +51015,7 @@ characters.data={
["unicodeslot"]=0x2566, -- ╦
},
[0x2567]={
- ["adobename"]="SF0x6DDD0",
+ ["adobename"]="SF450000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE",
@@ -51010,7 +51023,7 @@ characters.data={
["unicodeslot"]=0x2567, -- ╧
},
[0x2568]={
- ["adobename"]="SF0x704E0",
+ ["adobename"]="SF460000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE",
@@ -51018,7 +51031,7 @@ characters.data={
["unicodeslot"]=0x2568, -- ╨
},
[0x2569]={
- ["adobename"]="SF0x61A80",
+ ["adobename"]="SF400000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE UP AND HORIZONTAL",
@@ -51026,7 +51039,7 @@ characters.data={
["unicodeslot"]=0x2569, -- ╩
},
[0x256A]={
- ["adobename"]="SF0x83D60",
+ ["adobename"]="SF540000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE",
@@ -51034,7 +51047,7 @@ characters.data={
["unicodeslot"]=0x256A, -- ╪
},
[0x256B]={
- ["adobename"]="SF0x81650",
+ ["adobename"]="SF530000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE",
@@ -51042,7 +51055,7 @@ characters.data={
["unicodeslot"]=0x256B, -- ╫
},
[0x256C]={
- ["adobename"]="SF0x6B6C0",
+ ["adobename"]="SF440000",
["category"]="so",
["cjkwd"]="a",
["description"]="BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL",
@@ -51399,7 +51412,7 @@ characters.data={
["unicodeslot"]=0x25A0, -- ■
},
[0x25A1]={
- ["adobename"]="H0x5639",
+ ["adobename"]="H22073",
["category"]="so",
["cjkwd"]="a",
["description"]="WHITE SQUARE",
@@ -51462,14 +51475,14 @@ characters.data={
["unicodeslot"]=0x25A9, -- ▩
},
[0x25AA]={
- ["adobename"]="H0x486F",
+ ["adobename"]="H18543",
["category"]="so",
["description"]="BLACK SMALL SQUARE",
["linebreak"]="al",
["unicodeslot"]=0x25AA, -- ▪
},
[0x25AB]={
- ["adobename"]="H0x4877",
+ ["adobename"]="H18551",
["category"]="so",
["description"]="WHITE SMALL SQUARE",
["linebreak"]="al",
@@ -51706,7 +51719,7 @@ characters.data={
["unicodeslot"]=0x25CE, -- ◎
},
[0x25CF]={
- ["adobename"]="H0x4865",
+ ["adobename"]="H18533",
["category"]="so",
["cjkwd"]="a",
["description"]="BLACK CIRCLE",
@@ -81796,14 +81809,14 @@ characters.data={
["category"]="lo",
["cjkwd"]="w",
["description"]="",
- ["linebreak"]="h0x0002",
+ ["linebreak"]="h2",
["unicodeslot"]=0xAC00, -- 가
},
[0xD7A3]={
["category"]="lo",
["cjkwd"]="w",
["description"]="",
- ["linebreak"]="h0x0003",
+ ["linebreak"]="h3",
["unicodeslot"]=0xD7A3, -- 힣
},
[0xD800]={
@@ -85591,6 +85604,7 @@ characters.data={
["contextname"]="filigature",
["description"]="LATIN SMALL LIGATURE FI",
["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x0069 },
["specials"]={ "compat", 0x0066, 0x0069 },
["unicodeslot"]=0xFB01, -- fi
},
@@ -85599,6 +85613,7 @@ characters.data={
["contextname"]="flligature",
["description"]="LATIN SMALL LIGATURE FL",
["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x006C },
["specials"]={ "compat", 0x0066, 0x006C },
["unicodeslot"]=0xFB02, -- fl
},
@@ -85607,6 +85622,7 @@ characters.data={
["contextname"]="ffiligature",
["description"]="LATIN SMALL LIGATURE FFI",
["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x0069 },
["specials"]={ "compat", 0x0066, 0x0066, 0x0069 },
["unicodeslot"]=0xFB03, -- ffi
},
@@ -85615,6 +85631,7 @@ characters.data={
["contextname"]="fflligature",
["description"]="LATIN SMALL LIGATURE FFL",
["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x006C },
["specials"]={ "compat", 0x0066, 0x0066, 0x006C },
["unicodeslot"]=0xFB04, -- ffl
},
@@ -85630,6 +85647,7 @@ characters.data={
["contextname"]="stligature",
["description"]="LATIN SMALL LIGATURE ST",
["linebreak"]="al",
+ ["shcode"]={ 0x0073, 0x0074 },
["specials"]={ "compat", 0x0073, 0x0074 },
["unicodeslot"]=0xFB06, -- st
},
diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua
index 8f8f8dc26..4750e929a 100644
--- a/tex/context/base/char-ini.lua
+++ b/tex/context/base/char-ini.lua
@@ -94,14 +94,15 @@ table we derive a few more.
-- used ?
-characters.context.unicodes = characters.context.unicodes or { }
-characters.context.utfcodes = characters.context.utfcodes or { }
-characters.context.enccodes = characters.context.enccodes or { }
+characters.context.unicodes = characters.context.unicodes or { }
+characters.context.utfcodes = characters.context.utfcodes or { }
+characters.context.enccodes = characters.context.enccodes or { }
+characters.context.fallbacks = characters.context.fallbacks or { }
function characters.context.rehash()
- local unicodes, utfcodes, enccodes, utfchar = characters.context.unicodes, characters.context.utfcodes, characters.context.enccodes, utf.char
+ local unicodes, utfcodes, enccodes, fallbacks, utfchar = characters.context.unicodes, characters.context.utfcodes, characters.context.enccodes, characters.context.fallbacks, utf.char
for k,v in pairs(characters.data) do
- local contextname, adobename = v.contextname, v.adobename
+ local contextname, adobename, specials = v.contextname, v.adobename, v.specials
if contextname then
local slot = v.unicodeslot
unicodes[contextname] = slot
@@ -111,6 +112,11 @@ function characters.context.rehash()
if encname then
enccodes[encname] = k
end
+ if specials and specials[1] == "compat" and specials[2] == 0x0020 and specials[3] then
+ local s = specials[3]
+ fallbacks[k] = s
+ fallbacks[s] = k
+ end
end
for name,code in pairs(characters.synonyms) do
if not enccodes[name] then enccodes[name] = code end
@@ -319,15 +325,23 @@ function characters.uccode(n) return characters.data[n].uccode or n end
function characters.lccode(n) return characters.data[n].lccode or n end
function characters.flush(n)
- if characters.data[n].contextname then
- tex.sprint(tex.texcatcodes, "\\"..characters.data[n].contextname)
+ local c = characters.data[n]
+ if c and c.contextname then
+ tex.sprint(tex.texcatcodes, "\\"..c.contextname)
else
tex.sprint(unicode.utf8.char(n))
end
end
function characters.shape(n)
- return characters.data[n].shcode or n
+ local shcode = characters.data[n].shcode
+ if not shcode then
+ return n, nil
+ elseif type(shcode) == "table" then
+ return shcode[1], shcode[#shcode]
+ else
+ return shcode, nil
+ end
end
--[[ldx--
@@ -358,12 +372,12 @@ unicode reference tables.
--ldx]]--
function characters.setpdfunicodes()
- local flush, tc, sf = tex.sprint, tex.ctxcatcodes, string.format
- for _,v in pairs(characters.data) do
- if v.adobename then
- flush(tc,sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
- end
- end
+--~ local flush, tc, sf = tex.sprint, tex.ctxcatcodes, string.format
+--~ for _,v in pairs(characters.data) do
+--~ if v.adobename then
+--~ flush(tc,sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
+--~ end
+--~ end
end
--[[ldx--
@@ -377,21 +391,21 @@ characters.pdftex.make_pdf_to_unicodetable("pdfr-def.tex")
characters.pdftex = characters.pdftex or { }
function characters.pdftex.make_pdf_to_unicodetable(filename)
- local sf = string.format
- f = io.open(filename,'w')
- if f then
- f:write("% This file is generated with Luatex using the\n")
- f:write("% character tables that come with ConTeXt MkIV.\n")
- f:write("%\n")
- f:write("\\ifx\\pdfglyphtounicode\\undefined\\endinput\\fi\n") -- just to be sure
- for _, v in pairs(characters.data) do
- if v.adobename then
- f:write(sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
- end
- end
- f:write("%\n")
- f:write("%\n")
- f:write("\\endinput")
- f:close()
- end
+--~ local sf = string.format
+--~ f = io.open(filename,'w')
+--~ if f then
+--~ f:write("% This file is generated with Luatex using the\n")
+--~ f:write("% character tables that come with ConTeXt MkIV.\n")
+--~ f:write("%\n")
+--~ f:write("\\ifx\\pdfglyphtounicode\\undefined\\endinput\\fi\n") -- just to be sure
+--~ for _, v in pairs(characters.data) do
+--~ if v.adobename then
+--~ f:write(sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
+--~ end
+--~ end
+--~ f:write("%\n")
+--~ f:write("%\n")
+--~ f:write("\\endinput")
+--~ f:close()
+--~ end
end
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 14472000f..550a96ea9 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -73,6 +73,12 @@
\def\elapsedtime {\ctxlua{tex.sprint(os.clock()-environment.starttime)}}
\let\elapsedseconds \elapsedtime
+\resettimer
+
+% \appendtoks
+% \resettimer
+% \to \everyjob
+
%D For me.
\def\traceluausage
diff --git a/tex/context/base/cont-sys.ori b/tex/context/base/cont-sys.ori
index b90662cc3..335a7d984 100644
--- a/tex/context/base/cont-sys.ori
+++ b/tex/context/base/cont-sys.ori
@@ -121,6 +121,7 @@
% When you have your own fonts installed, you may want to predefine:
%
% \usetypescriptfile[type-buy]
+% \usetypescriptfile [type-gyr]
% Some styles default to Lucida Bright. You can overload
% Lucida by Times cum suis. Watch out, the pos collection
diff --git a/tex/context/base/context-characters.lmx b/tex/context/base/context-characters.lmx
new file mode 100644
index 000000000..b992d30b8
--- /dev/null
+++ b/tex/context/base/context-characters.lmx
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ characters |
+ unicodes |
+ indices |
+ fonts |
+
+
+ |
+ before utf |
+ after utf |
+ before hex |
+ after hex |
+ after hex |
+ after dec |
+ filename |
+
+
+
+
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
|
+ |
+ |
+ |
+ |
+ |
+
+
+
+
Processed Words
+
+
+
+
+
+ Job Name:
+ ConTeXt Version:
+
+
+
diff --git a/tex/context/base/context-debug.lmx b/tex/context/base/context-debug.lmx
index 88ca0b450..593f35672 100644
--- a/tex/context/base/context-debug.lmx
+++ b/tex/context/base/context-debug.lmx
@@ -43,7 +43,7 @@
-
+
Scratch Variables
@@ -52,12 +52,12 @@
count |
toks |
-
+
|
- |
- |
- |
+ |
+ |
+ |
@@ -72,26 +72,26 @@
- |
- |
- |
+ |
+ |
+ |
-
+
Internal Variables
-
+
ConTeXt Variables
@@ -101,8 +101,8 @@
Job Name:
ConTeXt Version:
- Real Page:
- Page:
+ Real Page:
+ Page: