summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2011-09-27 20:05:00 +0200
committerHans Hagen <pragma@wxs.nl>2011-09-27 20:05:00 +0200
commit7d5303b65f33ee0ea99f83f9a7aaa4672a405660 (patch)
treecad2e7cd1c6a7e2345b469e4f80191589ff46c40
parent0708cb2babdfd4c6f9cb86dd408992716a0e99cf (diff)
downloadcontext-7d5303b65f33ee0ea99f83f9a7aaa4672a405660.tar.gz
beta 2011.09.27 20:05
-rw-r--r--context/data/scite/lexers/scite-context-lexer-lua.lua4
-rw-r--r--context/data/scite/lexers/scite-context-lexer-mps.lua29
-rw-r--r--context/data/scite/lexers/scite-context-lexer-pdf-object.lua115
-rw-r--r--context/data/scite/lexers/scite-context-lexer-pdf-xref.lua41
-rw-r--r--context/data/scite/lexers/scite-context-lexer-pdf.lua63
-rw-r--r--context/data/scite/lexers/scite-context-lexer-tex.lua52
-rw-r--r--context/data/scite/lexers/scite-context-lexer-txt.lua69
-rw-r--r--context/data/scite/lexers/scite-context-lexer-xml.lua15
-rw-r--r--context/data/scite/lexers/scite-context-lexer.lua66
-rw-r--r--context/data/scite/scite-context-external.properties5
-rw-r--r--context/data/scite/scite-context.properties12
-rw-r--r--metapost/context/base/mp-char.mp1
-rw-r--r--scripts/context/lua/mtx-check.lua107
-rw-r--r--scripts/context/lua/mtx-context.lua2
-rw-r--r--scripts/context/lua/mtx-epub.lua11
-rw-r--r--scripts/context/lua/mtxrun.lua4
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua4
-rwxr-xr-xscripts/context/stubs/unix/mtxrun4
-rw-r--r--tex/context/base/back-exp.lua15
-rw-r--r--tex/context/base/bibl-bib.lua4
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4089 -> 4090 bytes
-rw-r--r--tex/context/base/context-version.pngbin105816 -> 105529 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/font-con.lua29
-rw-r--r--tex/context/base/font-map.lua71
-rw-r--r--tex/context/base/l-unicode.lua4
-rw-r--r--tex/context/base/math-tag.lua3
-rw-r--r--tex/context/base/math-vfu.lua5
-rw-r--r--tex/context/base/page-lay.mkiv18
-rw-r--r--tex/context/base/page-set.mkiv2
-rw-r--r--tex/context/base/s-pre-61.tex1
-rw-r--r--tex/context/base/s-pre-70.mkiv28
-rw-r--r--tex/context/base/s-pre-71.mkiv2
-rw-r--r--tex/context/base/scrn-but.mkvi2
-rw-r--r--tex/context/base/sort-ini.lua11
-rw-r--r--tex/context/base/spac-ali.mkiv30
-rw-r--r--tex/context/base/status-files.pdfbin23891 -> 23886 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin162399 -> 162417 bytes
-rw-r--r--tex/context/base/strc-doc.lua3
-rw-r--r--tex/context/base/strc-flt.mkiv4
-rw-r--r--tex/context/base/strc-reg.mkiv4
-rw-r--r--tex/context/base/strc-ren.mkiv38
-rw-r--r--tex/context/base/strc-sec.mkiv30
-rw-r--r--tex/context/interface/cont-cs.xml6
-rw-r--r--tex/context/interface/cont-de.xml6
-rw-r--r--tex/context/interface/cont-en.xml6
-rw-r--r--tex/context/interface/cont-fr.xml6
-rw-r--r--tex/context/interface/cont-it.xml6
-rw-r--r--tex/context/interface/cont-nl.xml6
-rw-r--r--tex/context/interface/cont-pe.xml6
-rw-r--r--tex/context/interface/cont-ro.xml6
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua102
55 files changed, 783 insertions, 283 deletions
diff --git a/context/data/scite/lexers/scite-context-lexer-lua.lua b/context/data/scite/lexers/scite-context-lexer-lua.lua
index 62577d4a9..1b55be55f 100644
--- a/context/data/scite/lexers/scite-context-lexer-lua.lua
+++ b/context/data/scite/lexers/scite-context-lexer-lua.lua
@@ -100,10 +100,10 @@ local shortcomment = token("comment", dashes * lexer.nonnewline^0)
local longcomment = token("comment", dashes * longcomment)
local shortstring = token("quote", dquote)
- * token("string", (escaped + (1-dquote))^0 )
+ * token("string", (escaped + (1-dquote))^0)
* token("quote", dquote)
+ token("quote", squote)
- * token("string", (escaped + (1-squote))^0 )
+ * token("string", (escaped + (1-squote))^0)
* token("quote", squote)
local longstring = token("quote", longonestart)
diff --git a/context/data/scite/lexers/scite-context-lexer-mps.lua b/context/data/scite/lexers/scite-context-lexer-mps.lua
index afde63bcc..d374f7f82 100644
--- a/context/data/scite/lexers/scite-context-lexer-mps.lua
+++ b/context/data/scite/lexers/scite-context-lexer-mps.lua
@@ -8,13 +8,15 @@ local info = {
local lexer = lexer
local global, string, table, lpeg = _G, string, table, lpeg
-local token, style, colors, exact_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.exact_match, lexer.style_nothing
+local token, exact_match = lexer.token, lexer.exact_match
local P, R, S, V, C, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt
-local type, next, pcall, loadfile = type, next, pcall, loadfile
+local type = type
module(...)
-local metafunlexer = _M
+local metafunlexer = _M
+
+local context = lexer.context
local metafunhelpers = { }
local metafunconstants = { }
@@ -23,14 +25,14 @@ local primitivecommands = { }
do
- local definitions = lexer.context.loaddefinitions("scite-context-data-metapost")
+ local definitions = context.loaddefinitions("scite-context-data-metapost")
if definitions then
plaincommands = definitions.plain or { }
primitivecommands = definitions.primitives or { }
end
- local definitions = lexer.context.loaddefinitions("scite-context-data-metafun")
+ local definitions = context.loaddefinitions("scite-context-data-metafun")
if definitions then
metafunhelpers = definitions.helpers or { }
@@ -44,16 +46,9 @@ local whitespace = metafunlexer.WHITESPACE -- triggers states
local space = lexer.space -- S(" \n\r\t\f\v")
local any = lexer.any
-local digit = R("09")
-local sign = S("+-")
-local period = P(".")
local dquote = P('"')
local cstoken = R("az","AZ") + P("_")
-local number = sign^-1 * ( -- at most one
- digit^1 * period * digit^0 -- 10.0 10.
- + digit^0 * period * digit^1 -- 0.10 .10
- + digit^1 -- 10
- )
+local number = context.patterns.real
local cstokentex = R("az","AZ","\127\255") + S("@!?_")
@@ -66,10 +61,10 @@ local constant = token('data', exact_match(metafunconstants))
local helper = token('command', exact_match(metafunhelpers))
local plain = token('plain', exact_match(plaincommands))
local quoted = token('quote', dquote)
- * token('string', P(1-dquote)^1)
+ * token('string', P(1-dquote)^0)
* token('quote', dquote)
local primitive = token('primitive', exact_match(primitivecommands))
-local identifier = token('default', cstoken)
+local identifier = token('default', cstoken^1)
local number = token('number', number)
local special = token('special', S("#()[]<>=:\"")) -- or else := <> etc split
local texlike = token('string', P("\\") * cstokentex^1)
@@ -86,12 +81,12 @@ _rules = {
{ 'number', number },
{ 'quoted', quoted },
{ 'special', special },
--- { 'texlike', texlike },
+ -- { 'texlike', texlike },
{ 'extra', extra },
{ 'rest', rest },
}
-_tokenstyles = lexer.context.styleset
+_tokenstyles = context.styleset
_foldsymbols = {
_patterns = {
diff --git a/context/data/scite/lexers/scite-context-lexer-pdf-object.lua b/context/data/scite/lexers/scite-context-lexer-pdf-object.lua
new file mode 100644
index 000000000..1de006813
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-pdf-object.lua
@@ -0,0 +1,115 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = lexer
+local token = lexer.token
+local P, R, S, C, V = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.V
+local global = _G
+
+module(...)
+
+local objectlexer = _M
+
+local context = lexer.context
+local patterns = context.patterns
+
+local whitespace = objectlexer.WHITESPACE -- triggers states
+
+local space = lexer.space
+local somespace = space^1
+
+local newline = S("\n\r")
+local real = patterns.real
+local cardinal = patterns.cardinal
+
+local lparent = P("(")
+local rparent = P(")")
+local langle = P("<")
+local rangle = P(">")
+local escape = P("\\")
+local anything = P(1)
+local unicodetrigger = P("feff")
+
+local nametoken = 1 - space - S("<>/[]()")
+local name = P("/") * nametoken^1
+
+local p_string = P { ( escape * anything + lparent * V(1) * rparent + (1 - rparent) )^0 }
+
+local t_spacing = token(whitespace, space^1)
+local t_spaces = token(whitespace, space^1)^0
+
+local p_stream = P("stream")
+local p_endstream = P("endstream")
+----- p_obj = P("obj")
+local p_endobj = P("endobj")
+local p_reference = P("R")
+
+local p_objectnumber = patterns.cardinal
+local p_comment = P('%') * (1-S("\n\r"))^0
+
+local string = token("quote", lparent)
+ * token("string", p_string)
+ * token("quote", rparent)
+local unicode = token("quote", langle)
+ * token("plain", unicodetrigger)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local whatsit = token("quote", langle)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local keyword = token("command", name)
+local constant = token("constant", name)
+local number = token('number', real)
+local reference = token("number", cardinal)
+ * t_spacing
+ * token("number", cardinal)
+ * t_spacing
+ * token("keyword", p_reference)
+local t_comment = token("comment", p_comment)
+
+-- t_openobject = token("number", p_objectnumber)
+-- * t_spacing
+-- * token("number", p_objectnumber)
+-- * t_spacing
+-- * token("keyword", p_obj)
+local t_closeobject = token("keyword", p_endobj)
+
+local t_opendictionary = token("grouping", P("<<"))
+local t_closedictionary = token("grouping", P(">>"))
+
+local t_openarray = token("grouping", P("["))
+local t_closearray = token("grouping", P("]"))
+
+local t_stream = token("keyword", p_stream)
+-- * token("default", newline * (1-newline*p_endstream*newline)^1 * newline)
+ * token("default", (1 - p_endstream)^1)
+ * token("keyword", p_endstream)
+
+local t_dictionary = { "dictionary",
+ dictionary = t_opendictionary * (t_spaces * keyword * t_spaces * V("whatever"))^0 * t_spaces * t_closedictionary,
+ array = t_openarray * (t_spaces * V("whatever"))^0 * t_spaces * t_closearray,
+ whatever = V("dictionary") + V("array") + constant + reference + string + unicode + number + whatsit,
+ }
+
+local t_object = { "object", -- weird that we need to catch the end here (probably otherwise an invalid lpeg)
+ object = t_spaces * (V("dictionary") * t_spaces * t_stream^-1 + V("array") + t_spaces) * t_spaces * t_closeobject,
+ dictionary = t_opendictionary * (t_spaces * keyword * t_spaces * V("whatever"))^0 * t_spaces * t_closedictionary,
+ array = t_openarray * (t_spaces * V("whatever"))^0 * t_spaces * t_closearray,
+ whatever = V("dictionary") + V("array") + constant + reference + string + unicode + number + whatsit,
+ }
+
+_shared = {
+ dictionary = t_dictionary,
+}
+
+_rules = {
+ { 'whitespace', t_spacing },
+ { 'object', t_object },
+}
+
+_tokenstyles = context.styleset
diff --git a/context/data/scite/lexers/scite-context-lexer-pdf-xref.lua b/context/data/scite/lexers/scite-context-lexer-pdf-xref.lua
new file mode 100644
index 000000000..8988fbbb4
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-pdf-xref.lua
@@ -0,0 +1,41 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = lexer
+local token = lexer.token
+local P = lpeg.P
+local global = _G
+
+module(...)
+
+local pdflexer = _M
+local objectlexer = lexer.load("scite-context-lexer-pdf-object")
+
+local context = lexer.context
+local patterns = context.patterns
+
+local whitespace = pdflexer.WHITESPACE -- triggers states
+
+local space = patterns.space
+local spacing = patterns.spacing
+
+local t_spacing = token(whitespace, spacing)
+
+local p_trailer = P("trailer")
+
+local t_xref = token("default", (1-p_trailer)^1)
+ * token("keyword", p_trailer)
+ * t_spacing
+ * objectlexer._shared.dictionary
+
+_rules = {
+ { 'whitespace', t_spacing },
+ { 'xref', t_xref },
+}
+
+_tokenstyles = context.styleset
diff --git a/context/data/scite/lexers/scite-context-lexer-pdf.lua b/context/data/scite/lexers/scite-context-lexer-pdf.lua
new file mode 100644
index 000000000..ebc3fba4f
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-pdf.lua
@@ -0,0 +1,63 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = lexer
+local token = lexer.token
+local P, R, S = lpeg.P, lpeg.R, lpeg.S
+local global = _G
+
+module(...)
+
+local pdflexer = _M
+local objectlexer = lexer.load("scite-context-lexer-pdf-object")
+local xreflexer = lexer.load("scite-context-lexer-pdf-xref")
+
+local context = lexer.context
+local patterns = context.patterns
+
+local whitespace = pdflexer.WHITESPACE -- triggers states
+
+local space = patterns.space
+local spacing = patterns.spacing
+local nospacing = patterns.nospacing
+local anything = patterns.anything
+local restofline = patterns.restofline
+
+local t_spacing = token(whitespace, spacing)
+local t_rest = token("default", nospacing) -- anything
+
+local p_obj = P("obj")
+local p_endobj = P("endobj")
+local p_xref = P("xref")
+local p_startxref = P("startxref")
+
+local p_objectnumber = patterns.cardinal
+local p_comment = P('%') * restofline
+
+local t_comment = token("comment", p_comment)
+local t_openobject = token("number", p_objectnumber)
+ * t_spacing
+ * token("number", p_objectnumber)
+ * t_spacing
+ * token("keyword", p_obj)
+ * t_spacing^0
+local t_closeobject = token("keyword", p_endobj)
+
+local t_openxref = token("keyword", p_xref)
+local t_closexref = token("keyword", p_startxref)
+
+lexer.embed_lexer(pdflexer, objectlexer, t_openobject, t_closeobject)
+lexer.embed_lexer(pdflexer, xreflexer, t_openxref, t_closexref)
+
+_rules = {
+ { 'whitespace', t_spacing },
+ { 'comment', t_comment },
+ { 'rest', t_rest },
+}
+
+_tokenstyles = context.styleset
diff --git a/context/data/scite/lexers/scite-context-lexer-tex.lua b/context/data/scite/lexers/scite-context-lexer-tex.lua
index cea0aa544..8204ae3a0 100644
--- a/context/data/scite/lexers/scite-context-lexer-tex.lua
+++ b/context/data/scite/lexers/scite-context-lexer-tex.lua
@@ -34,9 +34,9 @@ local info = {
local lexer = lexer
local global, string, table, lpeg = _G, string, table, lpeg
-local token, style, colors, exact_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.exact_match, lexer.style_nothing
+local token, exact_match = lexer.token, lexer.exact_match
local P, R, S, V, C, Cmt, Cp, Cc, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt, lpeg.Cp, lpeg.Cc, lpeg.Ct
-local type, next, pcall, loadfile, setmetatable = type, next, pcall, loadfile, setmetatable
+local type, next = type, next
local find, match, lower = string.find, string.match, string.lower
module(...)
@@ -45,14 +45,16 @@ local contextlexer = _M
local cldlexer = lexer.load('scite-context-lexer-cld')
local mpslexer = lexer.load('scite-context-lexer-mps')
-local commands = { en = { } }
-local primitives = { }
-local helpers = { }
-local constants = { }
+local commands = { en = { } }
+local primitives = { }
+local helpers = { }
+local constants = { }
+
+local context = lexer.context
do -- todo: only once, store in global
- local definitions = lexer.context.loaddefinitions("scite-context-data-interfaces")
+ local definitions = context.loaddefinitions("scite-context-data-interfaces")
if definitions then
for interface, list in next, definitions do
@@ -72,14 +74,14 @@ do -- todo: only once, store in global
end
end
- local definitions = lexer.context.loaddefinitions("scite-context-data-context")
+ local definitions = context.loaddefinitions("scite-context-data-context")
if definitions then
helpers = definitions.helpers or { }
constants = definitions.constants or { }
end
- local definitions = lexer.context.loaddefinitions("scite-context-data-tex")
+ local definitions = context.loaddefinitions("scite-context-data-tex")
if definitions then
local function add(data)
@@ -109,9 +111,10 @@ local knowncommand = Cmt(cstoken^1, function(_,i,s)
return currentcommands[s] and i
end)
-local wordpattern = lexer.context.wordpattern
-local checkedword = lexer.context.checkedword
-local setwordlist = lexer.context.setwordlist
+local wordtoken = context.patterns.wordtoken
+local wordpattern = context.patterns.wordpattern
+local checkedword = context.checkedword
+local setwordlist = context.setwordlist
local validwords = false
-- % language=uk
@@ -121,11 +124,11 @@ local knownpreamble = Cmt(#P("% "), function(input,i,_) -- todo : utfbomb
validwords = false
local s, e, word = find(input,'^(.+)[\n\r]',i) -- combine with match
if word then
- local interface = match(word,"interface=(..)")
+ local interface = match(word,"interface=([a-z]+)")
if interface then
currentcommands = commands[interface] or commands.en or { }
end
- local language = match(word,"language=(..)")
+ local language = match(word,"language=([a-z]+)")
validwords = language and setwordlist(language)
end
end
@@ -170,6 +173,8 @@ end)
-- experiment: keep space with whatever ... less tables
+-- 10pt
+
local commentline = P('%') * (1-S("\n\r"))^0
local endline = S("\n\r")^1
@@ -194,7 +199,10 @@ local p_csname = backslash * (cstoken^1 + P(1))
local p_grouping = S("{$}")
local p_special = S("#()[]<>=\"")
local p_extra = S("`~%^&_-+/\'|")
-local p_text = cstoken^1 --maybe add punctuation and space
+local p_text = wordtoken^1 --maybe add punctuation and space
+
+local p_number = context.patterns.real
+local p_unit = P("pt") + P("bp") + P("sp") + P("mm") + P("cm") + P("cc") + P("dd")
-- no looking back = #(1-S("[=")) * cstoken^3 * #(1-S("=]"))
@@ -283,10 +291,11 @@ local primitive = token('primitive', p_primitive )
local ifprimitive = token('primitive', p_ifprimitive)
local csname = token('user', p_csname )
local grouping = token('grouping', p_grouping )
+local number = token('number', p_number )
+ * token('constant', p_unit )
local special = token('special', p_special )
local extra = token('extra', p_extra )
------ text = token('default', p_text )
------ word = token("okay", p_word )
+local text = token('default', p_text )
local word = p_word
----- startluacode = token("grouping", P("\\startluacode"))
@@ -306,7 +315,7 @@ end
local function stopdisplaylua(_,i,s)
local ok = luatag == s
if ok then
-cldlexer._directives.cld_inline = false
+ cldlexer._directives.cld_inline = false
luastatus = false
end
return ok
@@ -344,7 +353,7 @@ local function stopinlinelua_e(_,i,s) -- }
lualevel = lualevel - 1
local ok = lualevel <= 0
if ok then
-cldlexer._directives.cld_inline = false
+ cldlexer._directives.cld_inline = false
luastatus = false
end
return ok
@@ -395,7 +404,7 @@ _rules = {
{ "whitespace", spacing },
{ "preamble", preamble },
{ "word", word },
- -- { "text", text },
+ { "text", text }, -- non words
{ "comment", comment },
{ "constant", constant },
{ "helper", helper },
@@ -405,12 +414,13 @@ _rules = {
{ "csname", csname },
-- { "whatever", specialword }, -- not yet, crashes
{ "grouping", grouping },
+ -- { "number", number },
{ "special", special },
{ "extra", extra },
{ "rest", rest },
}
-_tokenstyles = lexer.context.styleset
+_tokenstyles = context.styleset
local folds = {
["\\start"] = 1, ["\\stop" ] = -1,
diff --git a/context/data/scite/lexers/scite-context-lexer-txt.lua b/context/data/scite/lexers/scite-context-lexer-txt.lua
new file mode 100644
index 000000000..07dff2970
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-txt.lua
@@ -0,0 +1,69 @@
+local lexer = lexer
+local token = lexer.token
+local P, S, Cmt = lpeg.P, lpeg.S, lpeg.Cmt
+local find, match = string.find, string.match
+
+module(...)
+
+local textlexer = _M
+
+local context = lexer.context
+
+local whitespace = textlexer.WHITESPACE -- triggers states
+
+local space = lexer.space
+local any = lexer.any
+
+local wordtoken = context.patterns.wordtoken
+local wordpattern = context.patterns.wordpattern
+local checkedword = context.checkedword
+local setwordlist = context.setwordlist
+local validwords = false
+
+-- [#!-%] language=uk
+
+local p_preamble = Cmt(#(S("#!-%") * P(" ")), function(input,i,_) -- todo: utf bomb
+ if i == 1 then -- < 10 then
+ validwords = false
+ local s, e, line = find(input,'^[#!%-%%](.+)[\n\r]',i)
+ if line then
+ local language = match(line,"language=([a-z]+)")
+ if language then
+ validwords = setwordlist(language)
+ end
+ end
+ end
+ return false
+end)
+
+local t_preamble =
+ token('preamble', p_preamble)
+
+local t_word =
+ Cmt(wordpattern, function(_,i,s)
+ if validwords then
+ return checkedword(validwords,s,i)
+ else
+ return true, { "text", i }
+ end
+ end)
+
+local t_text =
+ token("default", wordtoken^1)
+
+local t_rest =
+ token("default", (1-wordtoken-space)^1)
+
+local t_spacing =
+ token(whitespace, space^1)
+
+_rules = {
+ { "whitespace", t_spacing },
+ { "preamble", t_preamble },
+ { "word", t_word }, -- words >= 3
+ { "text", t_text }, -- non words
+ { "rest", t_rest },
+}
+
+_tokenstyles = lexer.context.styleset
+
diff --git a/context/data/scite/lexers/scite-context-lexer-xml.lua b/context/data/scite/lexers/scite-context-lexer-xml.lua
index 0441585c1..f8892bbce 100644
--- a/context/data/scite/lexers/scite-context-lexer-xml.lua
+++ b/context/data/scite/lexers/scite-context-lexer-xml.lua
@@ -14,15 +14,17 @@ local info = {
local lexer = lexer
local global, string, table, lpeg = _G, string, table, lpeg
-local token, style, colors, exact_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.exact_match, lexer.style_nothing
+local token, exact_match = lexer.token, lexer.exact_match
local P, R, S, V, C, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt
-local type, setmetatable = type, setmetatable
+local type = type
local match, find = string.match, string.find
module(...)
local examplelexer = _M
+local context = lexer.context
+
local whitespace = examplelexer.WHITESPACE -- triggers states
local space = lexer.space -- S(" \t\n\r\v\f")
@@ -49,9 +51,9 @@ local closecdata = P("]]>")
local entity = ampersand * (1-semicolon)^1 * semicolon
-local wordpattern = lexer.context.wordpattern
-local checkedword = lexer.context.checkedword
-local setwordlist = lexer.context.setwordlist
+local wordpattern = context.patterns.wordpattern
+local checkedword = context.patterns.checkedword
+local setwordlist = context.setwordlist
local validwords = false
-- <?xml version="1.0" encoding="UTF-8" language="uk" ?>
@@ -72,7 +74,6 @@ local p_preamble = Cmt(#P("<?xml "), function(input,i,_) -- todo: utf bomb
return false
end)
-
local p_word =
Cmt(wordpattern, function(_,i,s)
if validwords then
@@ -190,7 +191,7 @@ _rules = {
{ "rest", p_rest },
}
-_tokenstyles = lexer.context.styleset
+_tokenstyles = context.styleset
_foldsymbols = { -- somehow doesn't work yet
_patterns = {
diff --git a/context/data/scite/lexers/scite-context-lexer.lua b/context/data/scite/lexers/scite-context-lexer.lua
index a2bb35a57..13b8d77a8 100644
--- a/context/data/scite/lexers/scite-context-lexer.lua
+++ b/context/data/scite/lexers/scite-context-lexer.lua
@@ -41,7 +41,11 @@ local type, next, setmetatable, rawset = type, next, setmetatable, rawset
dofile(_LEXERHOME .. '/lexer.lua')
-lexer.context = lexer.context or { }
+lexer.context = lexer.context or { }
+local context = lexer.context
+
+context.patterns = context.patterns or { }
+local patterns = context.patterns
local locations = {
-- lexer.context.path,
@@ -87,7 +91,7 @@ end
-- end
-- end
-function lexer.context.loaddefinitions(name)
+function context.loaddefinitions(name)
for i=1,#locations do
local data = collect(locations[i] .. "/" .. name)
if data then
@@ -98,7 +102,7 @@ end
-- maybe more efficient:
-function lexer.context.word_match(words,word_chars,case_insensitive)
+function context.word_match(words,word_chars,case_insensitive)
local chars = '%w_' -- maybe just "" when word_chars
if word_chars then
chars = '^([' .. chars .. gsub(word_chars,'([%^%]%-])', '%%%1') ..']+)'
@@ -128,16 +132,42 @@ end
-- nicer (todo: utf):
-local defaults = R("az","AZ","\127\255","__")
+local idtoken = R("az","AZ","\127\255","__")
+local digit = R("09")
+local sign = S("+-")
+local period = P(".")
+local space = S(" \n\r\t\f\v")
+
+patterns.idtoken = idtoken
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.period = period
+
+patterns.cardinal = digit^1
+patterns.integer = sign^-1 * digit^1
-function lexer.context.exact_match(words,word_chars,case_insensitive)
+patterns.real =
+ sign^-1 * ( -- at most one
+ digit^1 * period * digit^0 -- 10.0 10.
+ + digit^0 * period * digit^1 -- 0.10 .10
+ + digit^1 -- 10
+ )
+
+patterns.restofline = (1-S("\n\r"))^1
+patterns.space = space
+patterns.spacing = space^1
+patterns.nospacing = (1-space)^1
+patterns.anything = P(1)
+
+function context.exact_match(words,word_chars,case_insensitive)
local characters = concat(words)
local pattern -- the concat catches _ etc
if word_chars == true or word_chars == false or word_chars == nil then
word_chars = ""
end
if type(word_chars) == "string" then
- pattern = S(characters) + defaults
+ pattern = S(characters) + idtoken
if case_insensitive then
pattern = pattern + S(upper(characters)) + S(lower(characters))
end
@@ -166,7 +196,6 @@ function lexer.context.exact_match(words,word_chars,case_insensitive)
end
end
-
-- spell checking (we can only load lua files)
-- return {
@@ -185,13 +214,13 @@ local function splitwords(words)
return lpegmatch(splitter,words)
end
-function lexer.context.setwordlist(tag,limit) -- returns hash (lowercase keys and original values)
+function context.setwordlist(tag,limit) -- returns hash (lowercase keys and original values)
if not tag or tag == "" then
return false
elseif lists[tag] ~= nil then
return lists[tag]
else
- local list = lexer.context.loaddefinitions("spell-" .. tag)
+ local list = context.loaddefinitions("spell-" .. tag)
if not list or type(list) ~= "table" then
lists[tag] = false
return nil
@@ -207,9 +236,10 @@ function lexer.context.setwordlist(tag,limit) -- returns hash (lowercase keys an
end
end
-lexer.context.wordpattern = R("az","AZ","\127\255")^3 -- todo: if limit and #s < limit then
+patterns.wordtoken = R("az","AZ","\127\255")
+patterns.wordpattern = patterns.wordtoken^3 -- todo: if limit and #s < limit then
-function lexer.context.checkedword(validwords,s,i) -- ,limit
+function context.checkedword(validwords,s,i) -- ,limit
if not validwords then
return true, { "text", i }
else
@@ -302,7 +332,7 @@ local splitlines = ( (
+ ( newline ) / function() action_n() end
) )^0
-function lexer.context.fold(text, start_pos, start_line, start_level)
+function context.fold(text, start_pos, start_line, start_level)
if text == '' then
return { }
end
@@ -413,7 +443,7 @@ function lexer.context.fold(text, start_pos, start_line, start_level)
return folds
end
-function lexer.context.lex(text,init_style)
+function context.lex(text,init_style)
local lexer = global._LEXER
local grammar = lexer._GRAMMAR
if not grammar then
@@ -499,11 +529,11 @@ end
-- todo: keywords: one lookup and multiple matches
-function lexer.context.token(name, patt)
+function context.token(name, patt)
return Ct(patt * Cc(name) * Cp())
end
-lexer.fold = lexer.context.fold
-lexer.lex = lexer.context.lex
-lexer.token = lexer.context.token
-lexer.exact_match = lexer.context.exact_match
+lexer.fold = context.fold
+lexer.lex = context.lex
+lexer.token = context.token
+lexer.exact_match = context.exact_match
diff --git a/context/data/scite/scite-context-external.properties b/context/data/scite/scite-context-external.properties
index 14bdd222f..021c72133 100644
--- a/context/data/scite/scite-context-external.properties
+++ b/context/data/scite/scite-context-external.properties
@@ -24,6 +24,8 @@ lexer.$(file.patterns.context)=lpeg_scite-context-lexer-tex
lexer.$(file.patterns.tex)=lpeg_scite-context-lexer-tex
lexer.$(file.patterns.lua)=lpeg_scite-context-lexer-lua
lexer.$(file.patterns.example)=lpeg_scite-context-lexer-xml
+lexer.$(file.patterns.text)=lpeg_scite-context-lexer-txt
+lexer.$(file.patterns.pdf)=lpeg_scite-context-lexer-pdf
comment.block.lpeg_scite-context-lexer-tex=%
comment.block.at.line.start.lpeg_scite-context-lexer-tex=1
@@ -37,9 +39,6 @@ comment.block.at.line.start.lpeg_scite-context-lexer-lua=1
comment.block.lpeg_scite-context-lexer-cld=--
comment.block.at.line.start.lpeg_scite-context-lexer-cld=1
-#~ comment.block.lpeg_scite-context-lexer-xml=<!--
-#~ comment.block.at.line.start.lpeg_scite-context-lexer-xml=1
-
comment.block.lpeg_props=#
comment.block.at.line.start.lpeg_props=1
diff --git a/context/data/scite/scite-context.properties b/context/data/scite/scite-context.properties
index 03df9fb75..5e57d8fcd 100644
--- a/context/data/scite/scite-context.properties
+++ b/context/data/scite/scite-context.properties
@@ -60,6 +60,18 @@ lexer.$(file.patterns.lua)=lua
command.compile.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
command.go.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
+# Test: patterns
+
+file.patterns.text=*.txt
+
+filter.text=Text |$(file.patterns.text)|
+
+file.patterns.pdf=*.pdf
+
+filter.pdf=PDF |$(file.patterns.pdf)|
+
+# lexer.$(file.patterns.txt)=txt
+
# Commands: some scripts
if PLAT_WIN
diff --git a/metapost/context/base/mp-char.mp b/metapost/context/base/mp-char.mp
index 786c1f904..fd9e33848 100644
--- a/metapost/context/base/mp-char.mp
+++ b/metapost/context/base/mp-char.mp
@@ -37,7 +37,6 @@ grid_width := 60pt ; grid_height := 40pt ;
shape_width := 45pt ; shape_height := 30pt ;
chart_offset := 2pt ;
-
color chart_background_color ; chart_background_color := white ;
%D test mode
diff --git a/scripts/context/lua/mtx-check.lua b/scripts/context/lua/mtx-check.lua
index e0ab3b882..38ab2254a 100644
--- a/scripts/context/lua/mtx-check.lua
+++ b/scripts/context/lua/mtx-check.lua
@@ -6,6 +6,9 @@ if not modules then modules = { } end modules ['mtx-check'] = {
license = "see context related readme files"
}
+local P, R, S, V, C, CP, CC, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cp, lpeg.Cc, lpeg.match
+local gsub, sub, format = string.gsub, string.sub, string.format
+
local helpinfo = [[
--convert check tex file for errors
]]
@@ -31,21 +34,23 @@ validator.direct = false
validator.printer = print
validator.tracer = print
-local message = function(position, kind)
+local message = function(position, kind, extra)
local ve = validator.errors
- ve[#ve+1] = { kind, position, validator.n }
+ ve[#ve+1] = { kind, position, validator.n, extra }
if validator.direct then
- validator.printer(string.format("%s error at position %s (line %s)", kind, position, validator.n))
+ if extra then
+ validator.printer(format("%s error at position %s (line %s) (%s)",kind,position,validator.n,extra))
+ else
+ validator.printer(format("%s error at position %s (line %s)",kind,position,validator.n))
+ end
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 ""))
+ validator.tracer(format("%s at position %s: %s", kind, position, data or ""))
end
end
-local P, R, S, V, C, CP, CC = lpeg.P, lpeg.R, 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("}")
@@ -61,44 +66,56 @@ 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 startluacode = P("\\startluacode")
local stopluacode = P("\\stopluacode")
local somecode = startluacode * (1-stopluacode)^1 * stopluacode
+local stack = { }
+
+local function push(p,s)
+-- print("start",p,s)
+ table.insert(stack,{ p, s })
+end
+
+local function pop(p,s)
+-- print("stop",p,s)
+ local top = table.remove(stack)
+ if not top then
+ message(p,"missing start")
+ elseif top[2] ~= s then
+ message(p,"missing stop",format("see line %s",top[1]))
+ else
+ -- okay
+ end
+end
+
+local cstoken = R("az","AZ","\127\255")
+
+local start = CP() * P("\\start") * C(cstoken^0) / push
+local stop = CP() * P("\\stop") * C(cstoken^0) / pop
+
local grammar = P { "tokens",
- ["tokens"] = (V("ignore") + 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 * (okay + 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,
- ["ignore"] = somecode,
+ ["tokens"] = (V("ignore") + V("start") + V("stop") + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + V("errors") + 1)^0,
+ ["start"] = start,
+ ["stop"] = stop,
+ ["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 * (okay + 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,
+ ["ignore"] = somecode,
}
function validator.check(str)
validator.n = 1
validator.errors = { }
- grammar:match(str)
+ lpegmatch(grammar,str)
end
--~ str = [[
@@ -109,6 +126,12 @@ end
--~ ]]
--~ str = string.rep(str,10)
+local remapper = {
+ ["\n"] = " <lf> ",
+ ["\r"] = " <cr> ",
+ ["\t"] = " <tab> ",
+}
+
function scripts.checker.check(filename)
local str = io.loaddata(filename)
if str then
@@ -117,15 +140,15 @@ function scripts.checker.check(filename)
if #errors > 0 then
for k=1,#errors do
local v = errors[k]
- local kind, position, line = v[1], v[2], v[3]
- local data = str:sub(position-30,position+30)
- data = data:gsub("(.)", {
- ["\n"] = " <lf> ",
- ["\r"] = " <cr> ",
- ["\t"] = " <tab> ",
- })
- data = data:gsub("^ *","")
- print(string.format("% 5i %-10s %s", line, kind, data))
+ local kind, position, line, extra = v[1], v[2], v[3], v[4]
+ local data = sub(str,position-30,position+30)
+ data = gsub(data,".", remapper)
+ data = gsub(data,"^ *","")
+ if extra then
+ print(format("% 5i %-10s %s (%s)", line, kind, data, extra))
+ else
+ print(format("% 5i %-10s %s", line, kind, data))
+ end
end
else
print("no error")
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 43dcd3455..82346f394 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -626,7 +626,7 @@ scripts.context.interfaces = {
de = "cont-de",
fr = "cont-fr",
nl = "cont-nl",
- cz = "cont-cz",
+ cs = "cont-cs",
it = "cont-it",
ro = "cont-ro",
pe = "cont-pe",
diff --git a/scripts/context/lua/mtx-epub.lua b/scripts/context/lua/mtx-epub.lua
index a4b96d3be..0dc533c4a 100644
--- a/scripts/context/lua/mtx-epub.lua
+++ b/scripts/context/lua/mtx-epub.lua
@@ -62,7 +62,7 @@ local package = [[
<dc:language>en</dc:language>
<dc:identifier id="%s" >urn:uuid:%s</dc:identifier>
<dc:creator opf:file-as="Self, My" opf:role="aut">MySelf</dc:creator>
- <dc:date>%s</dc:date>
+ <dc:date>%s</dc:date>
</metadata>
<manifest>
@@ -168,13 +168,13 @@ function scripts.epub.make()
local filename = environment.files[1]
- if filename and filename ~= "" then
+ if filename and filename ~= "" and type(filename) == "string" then
filename = file.basename(filename)
local specfile = file.replacesuffix(filename,"specification")
local specification = lfs.isfile(specfile) and dofile(specfile) or { }
- -- inspect(specification)
+-- inspect(specification)
local name = specification.name or file.removesuffix(filename)
local identifier = specification.identifier or os.uuid(true)
@@ -215,7 +215,10 @@ function scripts.epub.make()
local function copythem(files)
for i=1,#files do
- copyone(files[i])
+ local filename = files[i]
+ if type(filename) == "string" then
+ copyone(filename)
+ end
end
end
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 7061c54d5..3e6d9e303 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -3719,7 +3719,7 @@ local function utf16_to_utf8_be(t)
if right then
local now = 256*left + right
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
@@ -3747,7 +3747,7 @@ local function utf16_to_utf8_le(t)
if right then
local now = 256*right + left
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 7061c54d5..3e6d9e303 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -3719,7 +3719,7 @@ local function utf16_to_utf8_be(t)
if right then
local now = 256*left + right
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
@@ -3747,7 +3747,7 @@ local function utf16_to_utf8_le(t)
if right then
local now = 256*right + left
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 7061c54d5..3e6d9e303 100755
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -3719,7 +3719,7 @@ local function utf16_to_utf8_be(t)
if right then
local now = 256*left + right
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
@@ -3747,7 +3747,7 @@ local function utf16_to_utf8_le(t)
if right then
local now = 256*right + left
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 8a588ce6a..11ed26366 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -25,6 +25,7 @@ local utfchar, utfbyte, utfsub, utfgsub = utf.char, utf.byte, utf.sub, utf.gsub
local insert, remove = table.insert, table.remove
local topoints = number.topoints
local utfvalues = string.utfvalues
+local fromunicode16 = fonts.mappings.fromunicode16
local trace_export = false trackers.register ("export.trace", function(v) trace_export = v end)
local less_state = false directives.register("export.lessstate", function(v) less_state = v end)
@@ -1825,10 +1826,12 @@ local function collectresults(head,list) -- is last used (we also have currentat
local u = fc.tounicode
if u and u ~= "" then
-- tracing
- for s in gmatch(u,"....") do -- is this ok?
- nofcurrentcontent = nofcurrentcontent + 1
- currentcontent[nofcurrentcontent] = utfchar(tonumber(s,16))
- end
+-- for s in gmatch(u,"....") do -- is this ok?
+-- nofcurrentcontent = nofcurrentcontent + 1
+-- currentcontent[nofcurrentcontent] = utfchar(tonumber(s,16))
+-- end
+ nofcurrentcontent = nofcurrentcontent + 1
+ currentcontent[nofcurrentcontent] = utfchar(fromunicode16(u))
else
nofcurrentcontent = nofcurrentcontent + 1
currentcontent[nofcurrentcontent] = utfchar(c)
@@ -2188,9 +2191,6 @@ local function stopexport(v)
local result = allcontent(tree) -- also does some housekeeping and data collecting
--
local files = {
- xhtmlfile,
- -- stylefilename,
- -- imagefilename,
}
local results = concat {
wholepreamble(),
@@ -2218,6 +2218,7 @@ local function stopexport(v)
else
xhtmlfile = file.addsuffix(xhtmlfile,"xhtml")
end
+ files[#files+1] = xhtmlfile
report_export("saving xhtml variant in '%s",xhtmlfile)
local xmltree = cleanxhtmltree(xml.convert(results))
xml.save(xmltree,xhtmlfile)
diff --git a/tex/context/base/bibl-bib.lua b/tex/context/base/bibl-bib.lua
index d7c195576..444f7e9bc 100644
--- a/tex/context/base/bibl-bib.lua
+++ b/tex/context/base/bibl-bib.lua
@@ -204,12 +204,12 @@ function bibtex.toxml(session,options)
local strip = options.strip -- todo: interface
local entries = session.entries
r = r + 1 ; result[r] = format("<?xml version='1.0' standalone='yes'?>")
- result[#result+1] = format("<bibtex>")
+ r = r + 1 ; result[r] = format("<bibtex>")
for id, categories in next, session.data do
id = lower(gsub(id,"^@",""))
for name, entry in next, categories do
if not entries or entries[name] then
- result[#result+1] = format("<entry tag='%s' category='%s'>",lower(name),id)
+ r = r + 1 ; result[r] = format("<entry tag='%s' category='%s'>",lower(name),id)
for key, value in next, entry do
value = gsub(value,"\\(.)",ihatethis)
value = lpegmatch(escaped_pattern,value)
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 78cc2795c..20a06246e 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.09.19 23:43}
+\newcontextversion{2011.09.27 20:05}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 9c2ac5258..41106bfc6 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.09.19 23:43}
+\newcontextversion{2011.09.27 20:05}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index 0a3d4b524..1347294c2 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index 70f13ed78..4fe6a22e5 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index 9355e5357..454c8fcae 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.09.19 23:43}
+\edef\contextversion{2011.09.27 20:05}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 5aaf50cea..0a44b2efb 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.09.19 23:43}
+\edef\contextversion{2011.09.27 20:05}
%D For those who want to use this:
diff --git a/tex/context/base/font-con.lua b/tex/context/base/font-con.lua
index 9028443f0..f6b415bc7 100644
--- a/tex/context/base/font-con.lua
+++ b/tex/context/base/font-con.lua
@@ -403,21 +403,35 @@ function constructors.scale(tfmdata,specification)
local sharedkerns = { }
--
for unicode, character in next, characters do
- local chr, description, index
+ local chr, description, index, touni
if changed then
- -- basemode hack
+ -- basemode hack (we try to catch missing tounicodes, e.g. needed for ssty in math cambria)
local c = changed[unicode]
if c then
- description = descriptions[c] or character
+ description = descriptions[c] or descriptions[unicode] or character
character = characters[c] or character
index = description.index or c
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ if not touni then -- goodie
+ local d = descriptions[unicode] or characters[unicode]
+ local i = d.index or unicode
+ touni = tounicode[i] -- nb: index!
+ end
+ end
else
description = descriptions[unicode] or character
index = description.index or unicode
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ end
end
else
description = descriptions[unicode] or character
index = description.index or unicode
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ end
end
local width = description.width
local height = description.height
@@ -460,15 +474,12 @@ function constructors.scale(tfmdata,specification)
}
end
end
+ if touni then
+ chr.tounicode = touni
+ end
-- if trace_scaling then
-- report_defining("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or "",index or 0,description.name or '-',description.class or '-')
-- end
- if tounicode then
- local tu = tounicode[index] -- nb: index!
- if tu then
- chr.tounicode = tu
- end
- end
if hasquality then
-- we could move these calculations elsewhere (saves calculations)
local ve = character.expansion_factor
diff --git a/tex/context/base/font-map.lua b/tex/context/base/font-map.lua
index b30462f23..7f5305f9a 100644
--- a/tex/context/base/font-map.lua
+++ b/tex/context/base/font-map.lua
@@ -98,6 +98,15 @@ local function tounicode16sequence(unicodes)
return concat(t)
end
+local function fromunicode16(str)
+ if #str == 4 then
+ return tonumber(str,16)
+ else
+ local l, r = match(str,"(....)(....)")
+ return (tonumber(l,16)- 0xD800)*0x400 + tonumber(r,16) - 0xDC00
+ end
+end
+
--~ This is quite a bit faster but at the cost of some memory but if we
--~ do this we will also use it elsewhere so let's not follow this route
--~ now. I might use this method in the plain variant (no caching there)
@@ -122,6 +131,7 @@ mappings.loadlumtable = loadlumtable
mappings.makenameparser = makenameparser
mappings.tounicode16 = tounicode16
mappings.tounicode16sequence = tounicode16sequence
+mappings.fromunicode16 = fromunicode16
local separator = S("_.")
local other = C((1 - separator)^1)
@@ -177,7 +187,9 @@ function mappings.addtounicode(data,filename)
if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
local unicode = lumunic and lumunic[name] or unicodevector[name]
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
end
-- cidmap heuristics, beware, there is no guarantee for a match unless
-- the chain resolves
@@ -186,7 +198,9 @@ function mappings.addtounicode(data,filename)
if foundindex then
unicode = cidcodes[foundindex] -- name to number
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
else
local reference = cidnames[foundindex] -- number to name
if reference then
@@ -194,16 +208,23 @@ function mappings.addtounicode(data,filename)
if foundindex then
unicode = cidcodes[foundindex]
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
end
end
if not unicode then
local foundcodes, multiple = lpegmatch(uparser,reference)
if foundcodes then
+ originals[index] = foundcodes
if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ tounicode[index] = tounicode16sequence(foundcodes)
+ nl = nl + 1
+ unicode = true
else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ tounicode[index] = tounicode16(foundcodes)
+ ns = ns + 1
+ unicode = foundcodes
end
end
end
@@ -214,19 +235,8 @@ function mappings.addtounicode(data,filename)
-- a.whatever or a_b_c.whatever or a_b_c (no numbers)
if not unicode then
local split = lpegmatch(ligsplitter,name)
- local nplit = (split and #split) or 0
- if nplit == 0 then
- -- skip
- elseif nplit == 1 then
- local base = split[1]
- unicode = unicodes[base] or unicodevector[base]
- if unicode then
- if type(unicode) == "table" then
- unicode = unicode[1]
- end
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- else
+ local nplit = split and #split or 0
+ if nplit >= 2 then
local t, n = { }, 0
for l=1,nplit do
local base = split[l]
@@ -244,25 +254,38 @@ function mappings.addtounicode(data,filename)
if n == 0 then -- done then
-- nothing
elseif n == 1 then
- originals[index], tounicode[index], nl, unicode = t[1], tounicode16(t[1]), nl + 1, true
+ originals[index] = t[1]
+ tounicode[index] = tounicode16(t[1])
else
- originals[index], tounicode[index], nl, unicode = t, tounicode16sequence(t), nl + 1, true
+ originals[index] = t
+ tounicode[index] = tounicode16sequence(t)
end
+ nl = nl + 1
+ unicode = true
+ else
+ -- skip: already checked and we don't want privates here
end
end
- -- last resort
+ -- last resort (we might need to catch private here as well)
if not unicode then
local foundcodes, multiple = lpegmatch(uparser,name)
if foundcodes then
if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ originals[index] = foundcodes
+ tounicode[index] = tounicode16sequence(foundcodes)
+ nl = nl + 1
+ unicode = true
else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ originals[index] = foundcodes
+ tounicode[index] = tounicode16(foundcodes)
+ ns = ns + 1
+ unicode = foundcodes
end
end
end
-- if not unicode then
- -- originals[index], tounicode[index] = 0xFFFD, "FFFD"
+ -- originals[index] = 0xFFFD
+ -- tounicode[index] = "FFFD"
-- end
end
end
diff --git a/tex/context/base/l-unicode.lua b/tex/context/base/l-unicode.lua
index 6295ecb7d..246171aec 100644
--- a/tex/context/base/l-unicode.lua
+++ b/tex/context/base/l-unicode.lua
@@ -218,7 +218,7 @@ local function utf16_to_utf8_be(t)
if right then
local now = 256*left + right
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
@@ -246,7 +246,7 @@ local function utf16_to_utf8_le(t)
if right then
local now = 256*right + left
if more > 0 then
- now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000
+ now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong
more = 0
r = r + 1
result[r] = utfchar(now)
diff --git a/tex/context/base/math-tag.lua b/tex/context/base/math-tag.lua
index 49138ac3b..0ac5b0897 100644
--- a/tex/context/base/math-tag.lua
+++ b/tex/context/base/math-tag.lua
@@ -87,6 +87,8 @@ end
-- todo: check function here and keep attribute the same
+-- todo: variants -> original
+
local actionstack = { }
process = function(start) -- we cannot use the processor as we have no finalizers (yet)
@@ -117,6 +119,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
else
tag = "mo"
end
+-- print(start,a,tag)
set_attribute(start,a_tagged,start_tagged(tag,a))
stop_tagged()
break -- okay?
diff --git a/tex/context/base/math-vfu.lua b/tex/context/base/math-vfu.lua
index 9aa2f400a..31c13cf8c 100644
--- a/tex/context/base/math-vfu.lua
+++ b/tex/context/base/math-vfu.lua
@@ -653,11 +653,12 @@ function vfmath.define(specification,set,goodies)
ref = { { 'slot', s, index } }
si[index] = ref
end
+ local italic = fci.italic
local t = {
- width = fci.width,
+ width = fci.width + italic, -- watch this !
height = fci.height,
depth = fci.depth,
- italic = fci.italic,
+ italic = italic,
commands = ref,
}
local n = fci.next
diff --git a/tex/context/base/page-lay.mkiv b/tex/context/base/page-lay.mkiv
index f76a03727..7ff3420d9 100644
--- a/tex/context/base/page-lay.mkiv
+++ b/tex/context/base/page-lay.mkiv
@@ -586,13 +586,13 @@
\recalculatelayout}
\def\checkcurrentoddlayout
- {\ifcsname\??ly\v!odd\c!state\endcsname
- \doifvalue{\??ly\v!odd\c!state}\v!start{\changetolayout\v!odd}%
+ {\ifcsname\namedlayouthash\v!odd\c!state\endcsname
+ \doif{\namedlayoutparameter\v!odd\c!state}\v!start{\changetolayout\v!odd}%
\fi}
\def\checkcurrentevenlayout
- {\ifcsname\??ly\v!even\c!state\endcsname
- \doifvalue{\??ly\v!even\c!state}\v!start{\changetolayout\v!even}%
+ {\ifcsname\namedlayouthash\v!even\c!state\endcsname
+ \doif{\namedlayoutparameter\v!even\c!state}\v!start{\changetolayout\v!even}%
\fi}
\ifx\lastpage\undefined
@@ -613,11 +613,11 @@
\fi}
\def\checkcurrentlayout % public and used in naw, so keep this name
- {\ifcsname\??ly\realfolio\c!state\endcsname
- \doifvalue{\??ly\realfolio\c!state}\v!start{\changetolayout\realfolio}%
- \else\ifcsname\??ly\reverserealfolio\c!state\endcsname
- \doifvalue{\??ly\reverserealfolio\c!state}\v!start{\changetolayout\reverserealfolio}%
- \else\ifcsname\??ly\v!current\c!state\endcsname
+ {\ifcsname\namedlayouthash\realfolio\c!state\endcsname
+ \doif{\namedlayoutparameter\realfolio\c!state}\v!start{\changetolayout\realfolio}%
+ \else\ifcsname\namedlayouthash\reverserealfolio\c!state\endcsname
+ \doif{\namedlayoutparameter\reverserealfolio\c!state}\v!start{\changetolayout\reverserealfolio}%
+ \else\ifcsname\namedlayouthash\v!current\c!state\endcsname
\changetolayout\v!current % no start test ?
\else
\doifoddpageelse\checkcurrentoddlayout\checkcurrentevenlayout
diff --git a/tex/context/base/page-set.mkiv b/tex/context/base/page-set.mkiv
index 7ef196d53..0c3dfff30 100644
--- a/tex/context/base/page-set.mkiv
+++ b/tex/context/base/page-set.mkiv
@@ -2480,7 +2480,7 @@
\setcolumnsetspanhsize\mofcolumns\!!countc % a/b used
\hsize\columnsetspanhsize
\setbox\scratchbox\vbox\bgroup
- \dostartframedtext[cs:#1][\v!none]% geen nils placement
+ \dostartframedtext{cs:#1}[\v!none]% geen nils placement
% spoils spacing : \vskip-\struttotal\par\verticalstrut\par
\ifnum\columnsetlevel>\zerocount
\namedframedtextparameter{cs:#1}\c!before
diff --git a/tex/context/base/s-pre-61.tex b/tex/context/base/s-pre-61.tex
index d4e06d0a7..21e461320 100644
--- a/tex/context/base/s-pre-61.tex
+++ b/tex/context/base/s-pre-61.tex
@@ -234,6 +234,7 @@
\StartSteps
\startitemize
+\item Fiona Apple \FlushStep
\item Tori Amos \FlushStep
\item Kate Bush \FlushStep
\item Heather Nova \FlushStep
diff --git a/tex/context/base/s-pre-70.mkiv b/tex/context/base/s-pre-70.mkiv
index 9f76fc84a..2c8bb2d26 100644
--- a/tex/context/base/s-pre-70.mkiv
+++ b/tex/context/base/s-pre-70.mkiv
@@ -119,16 +119,16 @@
[state=start]
\startinteractionmenu[bottom]
- \txt
+ \starttxt
\interactionbar
[alternative=d,
symbol=yes,
color=white,
contrastcolor=textcolor]
- \\
+ \stoptxt
\hfilll
- \but [previouspage] < < < \\
- \but [nextpage] > > > \\
+ \startbut [previouspage] < < < \stopbut
+ \startbut [nextpage] > > > \stopbut
\stopinteractionmenu
%D Instead of the normal symbols we use more punky ones.
@@ -150,7 +150,7 @@
%D Run this file with the command: \type {context --mode=demo s-pre-70}
%D in order to get an example.
-\doifnotmode{demo} {\endinput}
+\continueifinputfile{s-pre-70.mkiv}
\usemodule[pre-60] % use the stepper
@@ -159,14 +159,18 @@
\title {Punk for dummies}
\dorecurse{10} {
+
\title{Just a few dummy pages}
- \StartSteps \startitemize[packed]
- \startitemize
- \startitem bla \FlushStep \stopitem
- \startitem bla bla \FlushStep \stopitem
- \startitem bla bla bla \FlushStep \stopitem
- \startitem bla bla bla bla \FlushStep \stopitem
- \stopitemize \StopSteps
+
+ \StartSteps
+ \startitemize[packed]
+ \startitem bla \FlushStep \stopitem
+ \startitem bla bla \FlushStep \stopitem
+ \startitem bla bla bla \FlushStep \stopitem
+ \startitem bla bla bla bla \FlushStep \stopitem
+ \stopitemize
+ \StopSteps
+
}
\stoptext
diff --git a/tex/context/base/s-pre-71.mkiv b/tex/context/base/s-pre-71.mkiv
index a52718576..38dae61df 100644
--- a/tex/context/base/s-pre-71.mkiv
+++ b/tex/context/base/s-pre-71.mkiv
@@ -145,7 +145,7 @@
\let\StartText\starttext
\let\StopText \stoptext
-\doifnotmode{demo}{\endinput}
+\continueifinputfile{s-pre-71.mkiv}
\starttext
diff --git a/tex/context/base/scrn-but.mkvi b/tex/context/base/scrn-but.mkvi
index 7370d944f..693996d8a 100644
--- a/tex/context/base/scrn-but.mkvi
+++ b/tex/context/base/scrn-but.mkvi
@@ -739,7 +739,7 @@
\unexpanded\def\scrn_menu_but#content\\{\scrn_menu_but_start#content\stopbut} \let\stopbut\relax
\unexpanded\def\scrn_menu_got#content\\{\scrn_menu_got_start#content\stopgot} \let\stopgot\relax
\unexpanded\def\scrn_menu_nop#content\\{\scrn_menu_nop_start#content\stopnop} \let\stopnop\relax
-\unexpanded\def\scrn_menu_txt#content\\{\scrn_menu_nop_start#content\stoptxt} \let\stoptxt\relax
+\unexpanded\def\scrn_menu_txt#content\\{\scrn_menu_txt_start#content\stoptxt} \let\stoptxt\relax
\unexpanded\def\scrn_menu_rul#content\\{\scrn_menu_rul_start#content\stoprul} \let\stoprul\relax
\unexpanded\def\scrn_menu_com#content\\{\scrn_menu_com_start#content\stopcom} \let\stopcom\relax
diff --git a/tex/context/base/sort-ini.lua b/tex/context/base/sort-ini.lua
index d9a6bb64d..8640ba825 100644
--- a/tex/context/base/sort-ini.lua
+++ b/tex/context/base/sort-ini.lua
@@ -96,10 +96,11 @@ local validmethods = table.tohash {
}
local predefinedmethods = {
- [v_before] = "mm,mc,uc",
- [v_after] = "pm,mc,uc",
- [v_first] = "pc,mm,uc",
- [v_last] = "mc,mm,uc",
+ [v_default] = "zc,pc,zm,pm,uc",
+ [v_before] = "mm,mc,uc",
+ [v_after] = "pm,mc,uc",
+ [v_first] = "pc,mm,uc",
+ [v_last] = "mc,mm,uc",
}
sorters = {
@@ -113,7 +114,7 @@ sorters = {
digitsoffset = digitsoffset,
digitsmaximum = digitsmaximum,
defaultlanguage = v_default,
- defaultmethod = v_before,
+ defaultmethod = v_default,
defaultdigits = v_numbers,
}
}
diff --git a/tex/context/base/spac-ali.mkiv b/tex/context/base/spac-ali.mkiv
index 686bcfb83..ffc1f2434 100644
--- a/tex/context/base/spac-ali.mkiv
+++ b/tex/context/base/spac-ali.mkiv
@@ -244,6 +244,10 @@
\let\raggedtopcommand \vfilll % used with \framed for
\fi} % instance in tables
+\setvalue{\@@ragged@@command\v!last}%
+ {\appendtoks\centeredlastline\to\everyraggedcommand
+ \!!donecfalse}
+
\setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }}
\setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left }}
\setvalue{\@@ragged@@command\v!center }{\getvalue{\@@ragged@@command\v!middle}}
@@ -358,8 +362,8 @@
\let\updateraggedskips\relax
-\def\setraggedskips#1#2#3#4#5#6#7% never change this name
- {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
+\unexpanded\def\setraggedskips#1#2#3#4#5#6#7% never change this name
+ {\unexpanded\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
\updateraggedskips}
\def\dosetraggedskips#1#2#3#4#5#6#7%
@@ -419,10 +423,12 @@
% defaults
-\def\raggedfillamount {1fil}
-\def\raggedhalffillamount{.5fil}
-\def\raggedspaceamount {\interwordspace} % {.3333em}
-\def\raggedxspaceamount {.5em}
+\def\raggedfillamount {1fil}
+\def\raggednegativefillamount{-1fil}
+\def\raggeddoublefillamount {2fil}
+\def\raggedhalffillamount {.5fil}
+\def\raggedspaceamount {\interwordspace} % {.3333em}
+\def\raggedxspaceamount {.5em}
\unexpanded\def\notragged
{\raggedstatus\zerocount
@@ -445,6 +451,16 @@
\setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount
\raggedxspaceamount\zeropoint\zeropoint}
+\unexpanded\def\centeredlastline
+ {\setraggedskips
+ \zerocount
+ \raggedfillamount
+ \raggednegativefillamount
+ \zeropoint
+ \zeropoint
+ \raggeddoublefillamount
+ \zeropoint}
+
%D We used to have:
%D
%D \starttyping
@@ -561,6 +577,8 @@
\installalign {l2r} {\lefttoright}
\installalign {r2l} {\righttoleft}
+\installalign \v!last {\centeredlastline}
+
\newcount\hyphenminoffset
\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index a72d471d4..c8c6b27a5 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 27829fd27..e4e11892c 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-doc.lua b/tex/context/base/strc-doc.lua
index fff357574..7532ac63f 100644
--- a/tex/context/base/strc-doc.lua
+++ b/tex/context/base/strc-doc.lua
@@ -595,6 +595,9 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
local firstprefix, lastprefix = 0, 16
if segments then
local f, l = match(tostring(segments),"^(.-):(.+)$")
+ if l == "*" then
+ l = 100 -- new
+ end
if f and l then
-- 0:100, chapter:subsubsection
firstprefix = tonumber(f) or sections.getlevel(f) or 0
diff --git a/tex/context/base/strc-flt.mkiv b/tex/context/base/strc-flt.mkiv
index 3a6aea0ab..219ff812a 100644
--- a/tex/context/base/strc-flt.mkiv
+++ b/tex/context/base/strc-flt.mkiv
@@ -912,7 +912,7 @@
\flushsidefloats % hoort eigenlijk niet hier
\docomplexplacefloat[#1][\v!text,#2,\v!left][#3]}
-\def\docomplexreserveblock#1#2%
+\def\dodocomplexreserveblock#1#2%
{\begingroup
\edef\currentfloat{#1}%
\let\currentfloatcaption\currentfloat
@@ -921,7 +921,7 @@
\endgroup}
\long\def\docomplexreserveblock[#1][#2][#3][#4]#5%
- {\getvalue{\e!place#1}[#3][#4]{#5}{\docomplexreserveblock{#1}{#2}{#1}}}
+ {\getvalue{\e!place#1}[#3][#4]{#5}{\dodocomplexreserveblock{#1}{#2}}}
\def\docomplexstartreservetextblock[#1][#2][#3][#4]%
{\flushsidefloats % hoort eigenlijk niet hier
diff --git a/tex/context/base/strc-reg.mkiv b/tex/context/base/strc-reg.mkiv
index 0467eac96..4871b40ce 100644
--- a/tex/context/base/strc-reg.mkiv
+++ b/tex/context/base/strc-reg.mkiv
@@ -706,9 +706,9 @@
\def\withregisterpagecommand#1#2#3#4%
{\def\currentregisterpageindex{#2}%
\iflocation
- \goto{\registerparameter\c!pagecommand{#4}}[internal(#2)]%
+ \goto{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]%
\else
- \registerparameter\c!pagecommand{#4}%
+ \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}%
\fi}
\def\registeronepage#1#2#3#4% #1:processor content
diff --git a/tex/context/base/strc-ren.mkiv b/tex/context/base/strc-ren.mkiv
index 0d82b7f6f..11a2ee2b3 100644
--- a/tex/context/base/strc-ren.mkiv
+++ b/tex/context/base/strc-ren.mkiv
@@ -25,12 +25,6 @@
\newevery \everyheadstart \relax
-% \unexpanded\def\placeheadmargintexts
-% {\the\everyheadstart
-% \doif{\headparameter\c!margintext}\v!yes\placemargincontent}
-
-\let\placeheadmargintexts\relax
-
\unexpanded\def\setupheadcomponentfont#1#2%
{\dontconvertfont
\ifconditional\headisdisplay
@@ -77,9 +71,8 @@
{\begingroup
\setupheadcomponentfont\c!textstyle\c!textcolor
\headparameter\c!commandbefore
- \placeheadmargintexts
- \ifcsname\??nh\currenthead\c!deeptextcommand\endcsname
- \expandafter\let\expandafter\deepstructuretitlecommand\csname\??nh\currenthead\c!deeptextcommand\endcsname
+ \ifcsname\currentheadhash\c!deeptextcommand\endcsname
+ \expandafter\let\expandafter\deepstructuretitlecommand\csname\currentheadhash\c!deeptextcommand\endcsname
\fi
\ifconditional\headisdisplay % \ifdisplaysectionhead
% struts can be nilled with \setnostrut
@@ -100,9 +93,8 @@
\def\doplaceheadnumbercomponent#1%
{\begingroup
\setupheadcomponentfont\c!numberstyle\c!numbercolor
- \placeheadmargintexts
- \ifcsname\??nh\currenthead\c!deepnumbercommand\endcsname
- \expandafter\let\expandafter\deepstructurenumbercommand\csname\??nh\currenthead\c!deepnumbercommand\endcsname
+ \ifcsname\currentheadhash\c!deepnumbercommand\endcsname
+ \expandafter\let\expandafter\deepstructurenumbercommand\csname\currentheadhash\c!deepnumbercommand\endcsname
\fi
\ifconditional\headisdisplay % \ifdisplaysectionhead
% can be nilled with \setnostrut
@@ -149,7 +141,7 @@
% maybe auto: backreference when given, else list
\fi\fi}
-\unexpanded\def\placeheadtext
+\unexpanded\def\placecurrentheadtext
{\beginheadplacement
\setheadmarking
\doresettructureheadnumbercontent
@@ -161,13 +153,13 @@
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \headreferenceattributes
{\dosetlocalgridsnapping{\headparameter\c!internalgrid}%
\doresettructureheadnumbercontent
- \dosetfontattribute{\??nh\currenthead}\c!style % but we don't want color to influence user command, todo: get the if-else out of it
+ \dosetheadfontattribute\c!style
\setinlineheadreferenceattributes
\headparameter\c!command{}{\doplaceheadtextcomponent\getheadtitle}}%
\fi
\endheadplacement{\getheadsyncs}}
-\unexpanded\def\placeheadnumbertext
+\unexpanded\def\placecurrentheadnumbertext
{\beginheadplacement
\setheadmarking
\doiftextelse{\getheadnumber}\dosettructureheadnumbercontent\doresettructureheadnumbercontent
@@ -178,13 +170,13 @@
\docheckheadreference
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \headreferenceattributes
{\dosetlocalgridsnapping{\headparameter\c!internalgrid}%
- \dosetfontattribute{\??nh\currenthead}\c!style
+ \dosetheadfontattribute\c!style
\setinlineheadreferenceattributes
\headparameter\c!command{\doplaceheadnumbercomponent\getheadnumber}{\doplaceheadtextcomponent\getheadtitle}}%
\fi
\endheadplacement{\getheadsyncs}}
-\unexpanded\def\placeheadempty
+\unexpanded\def\placecurrentheadempty
{\hbox \headreferenceattributes {\getheadsyncs}}
%D \starttyping
@@ -461,7 +453,7 @@
\fi
#2}}
-\unexpanded\def\placeheadmargin#1#2%
+\unexpanded\def\placeheadmarginalternative#1#2%
{\vbox
{\localheadsetup
\begstrut % use one \strut here!
@@ -473,8 +465,8 @@
\fi
{#2}}}
-\defineheadplacement[\v!inmargin][\v!vertical]#1#2{\placeheadmargin{#1}{#2}}
-\defineheadplacement[\v!margin] [\v!vertical]#1#2{\placeheadmargin{#1}{#2}}
+\defineheadplacement[\v!inmargin][\v!vertical]#1#2{\placeheadmarginalternative{#1}{#2}}
+\defineheadplacement[\v!margin] [\v!vertical]#1#2{\placeheadmarginalternative{#1}{#2}}
\defineheadplacement[\v!middle][\v!vertical]#1#2%
{\vbox
@@ -496,7 +488,7 @@
{\begstrut#2}%
\egroup}
-\unexpanded\def\placeheadlohi#1#2#3%
+\unexpanded\def\placeheadlohialternative#1#2#3%
{\ifconditional\headshownumber
\setbox0\hbox{#2}
\setbox2=#1{\localheadsetup\advance\hsize-\wd0\relax#3}%
@@ -508,8 +500,8 @@
% onder/boven lijnt het nummer op de onderste/bovenste regel
% uit van een meerregelige kop
-\defineheadplacement[\v!bottom][\v!vertical]#1#2{\placeheadlohi\vbox{#1}{#2}}
-\defineheadplacement[\v!top] [\v!vertical]#1#2{\placeheadlohi\vtop{#1}{#2}}
+\defineheadplacement[\v!bottom][\v!vertical]#1#2{\placeheadlohialternative\vbox{#1}{#2}}
+\defineheadplacement[\v!top] [\v!vertical]#1#2{\placeheadlohialternative\vtop{#1}{#2}}
% helpers
diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv
index a2f011941..d2836d6eb 100644
--- a/tex/context/base/strc-sec.mkiv
+++ b/tex/context/base/strc-sec.mkiv
@@ -426,8 +426,8 @@
[#3]%
\reportcurrentstructure}
-\unexpanded\def\placeheadtext {\dosingleempty\doplaceheadtext } % use with care
-\unexpanded\def\placeheadnumber{\dosingleempty\doplaceheadnumber} % use with care
+\unexpanded\def\placeheadtext {\dosingleempty\place_head_text } % use with care
+\unexpanded\def\placeheadnumber{\dosingleempty\place_head_number} % use with care
\ifdefined\setupheadcomponentfont \else
@@ -439,7 +439,7 @@
\fi
-\def\doplaceheadtext[#1]%
+\def\place_head_text[#1]%
{\dontleavehmode
\begingroup
\edef\currenthead{#1}%
@@ -449,7 +449,7 @@
\endgraf
\endgroup}
-\def\doplaceheadnumber[#1]%
+\def\place_head_number[#1]%
{\dontleavehmode
\begingroup
\edef\currenthead{#1}%
@@ -504,20 +504,20 @@
\let\getheadtitle\fullheadtitle
\ifconditional\headshownumber
\let\getheadnumber\fullheadnumber
- \placeheadnumbertext
+ \placecurrentheadnumbertext
\else
- \placeheadtext
+ \placecurrentheadtext
\fi
\doheadspacingafteryes
\else\ifconditional\headhidden
\doregisterhead\currenthead{#2}{#3}% after optional \page
\let\getheadsyncs\theheadsynchonization
- \placeheadhidden % only something when tracing
+ \placecurrentheadhidden % only something when tracing
\else
\doheadspacingbeforenop % toegevoegd ivm subpaginanr / tug sheets
\doregisterhead\currenthead{#2}{#3}% after optional \page
\let\getheadsyncs\theheadsynchonization
- \placeheadempty % just flush 'm
+ \placecurrentheadempty % just flush 'm
\doheadspacingafternop
\fi\fi
\else
@@ -526,18 +526,18 @@
\doregisterhead\currenthead{#2}{#3}% after optional \page
\let\getheadsyncs\theheadsynchonization
\let\getheadtitle\fullheadtitle
- \placeheadtext
+ \placecurrentheadtext
\doheadspacingafteryes
\else\ifconditional\headhidden
\doregisterhead\currenthead{#2}{#3}% after optional \page
\let\getheadsyncs\theheadsynchonization
- \placeheadhidden % only something when tracing
+ \placecurrentheadhidden % only something when tracing
\else
% do nothing / should be vbox to 0pt
\doheadspacingbeforenop
\doregisterhead\currenthead{#2}{#3}% after optional \page
\let\getheadsyncs\theheadsynchonization
- \placeheadempty % just flush 'm
+ \placecurrentheadempty % just flush 'm
\doheadspacingafternop
\fi\fi
\fi
@@ -553,21 +553,21 @@
% typesetting
-\unexpanded\def\placeheadnumbertext % dummy, will be overloaded
+\unexpanded\def\placecurrentheadnumbertext
{\setheadmarking
\getheadnumber/\getheadtitle
\getheadsyncs}
-\unexpanded\def\placeheadtext % dummy, will be overloaded
+\unexpanded\def\placecurrentheadtext
{\setheadmarking
\getheadtitle
\getheadsyncs}
-\unexpanded\def\placeheadempty % dummy, will be overloaded
+\unexpanded\def\placecurrentheadempty
{\setheadmarking
\getheadsyncs}
-\unexpanded\def\placeheadhidden
+\unexpanded\def\placecurrentheadhidden
{\setxvalue{\currenthead:sync}%
{\noexpand\setgvalue{\currenthead:sync}{}%
\noexpand\pagetype[\currentheadcoupling]% hm also number
diff --git a/tex/context/interface/cont-cs.xml b/tex/context/interface/cont-cs.xml
index 03e68bbc5..7af35cd94 100644
--- a/tex/context/interface/cont-cs.xml
+++ b/tex/context/interface/cont-cs.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="cs" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="uvnitr"/>
<cd:constant type="vnejsi"/>
@@ -25,6 +27,10 @@
<cd:constant type="normalni"/>
<cd:constant type="ne"/>
<cd:constant type="ano"/>
+ <cd:constant type="siroky"/>
+ <cd:constant type="posledni"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-de.xml b/tex/context/interface/cont-de.xml
index 659fdf3f0..7d164e861 100644
--- a/tex/context/interface/cont-de.xml
+++ b/tex/context/interface/cont-de.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="de" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="innen"/>
<cd:constant type="aussen"/>
@@ -25,6 +27,10 @@
<cd:constant type="normal"/>
<cd:constant type="nein"/>
<cd:constant type="ja"/>
+ <cd:constant type="breit"/>
+ <cd:constant type="letzte"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-en.xml b/tex/context/interface/cont-en.xml
index 46568857a..8cc1bac6c 100644
--- a/tex/context/interface/cont-en.xml
+++ b/tex/context/interface/cont-en.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="inner"/>
<cd:constant type="outer"/>
@@ -25,6 +27,10 @@
<cd:constant type="normal"/>
<cd:constant type="no"/>
<cd:constant type="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="last"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-fr.xml b/tex/context/interface/cont-fr.xml
index 081ea1802..7b109fd68 100644
--- a/tex/context/interface/cont-fr.xml
+++ b/tex/context/interface/cont-fr.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="fr" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="interieur"/>
<cd:constant type="exterieur"/>
@@ -25,6 +27,10 @@
<cd:constant type="normal"/>
<cd:constant type="non"/>
<cd:constant type="oui"/>
+ <cd:constant type="large"/>
+ <cd:constant type="dernier"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-it.xml b/tex/context/interface/cont-it.xml
index b739b60cb..e8574d2f6 100644
--- a/tex/context/interface/cont-it.xml
+++ b/tex/context/interface/cont-it.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="it" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="interno"/>
<cd:constant type="esterno"/>
@@ -25,6 +27,10 @@
<cd:constant type="normale"/>
<cd:constant type="no"/>
<cd:constant type="si"/>
+ <cd:constant type="ampio"/>
+ <cd:constant type="ultimo"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-nl.xml b/tex/context/interface/cont-nl.xml
index b3036a5a9..cb585d771 100644
--- a/tex/context/interface/cont-nl.xml
+++ b/tex/context/interface/cont-nl.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="nl" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="binnen"/>
<cd:constant type="buiten"/>
@@ -25,6 +27,10 @@
<cd:constant type="normaal"/>
<cd:constant type="nee"/>
<cd:constant type="ja"/>
+ <cd:constant type="ruim"/>
+ <cd:constant type="laatste"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-pe.xml b/tex/context/interface/cont-pe.xml
index 956087029..e271cb846 100644
--- a/tex/context/interface/cont-pe.xml
+++ b/tex/context/interface/cont-pe.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="pe" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="داخلی"/>
<cd:constant type="خارجی"/>
@@ -25,6 +27,10 @@
<cd:constant type="نرمال"/>
<cd:constant type="نه"/>
<cd:constant type="بله"/>
+ <cd:constant type="گسترده"/>
+ <cd:constant type="آخرین"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/context/interface/cont-ro.xml b/tex/context/interface/cont-ro.xml
index d91aa40f1..dc198d252 100644
--- a/tex/context/interface/cont-ro.xml
+++ b/tex/context/interface/cont-ro.xml
@@ -13,6 +13,8 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="ro" version="2006.08.02">
+ <!-- there are some more -->
+
<cd:define name="align">
<cd:constant type="intern"/>
<cd:constant type="extern"/>
@@ -25,6 +27,10 @@
<cd:constant type="normal"/>
<cd:constant type="nu"/>
<cd:constant type="da"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="ultim"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="l2r"/>
</cd:define>
<cd:define name="symalign">
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 28ac0347a..b60a0b79b 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 09/19/11 23:43:44
+-- merge date : 09/27/11 20:05:02
do -- begin closure to overcome local limits and interference
@@ -3520,21 +3520,35 @@ function constructors.scale(tfmdata,specification)
local sharedkerns = { }
--
for unicode, character in next, characters do
- local chr, description, index
+ local chr, description, index, touni
if changed then
- -- basemode hack
+ -- basemode hack (we try to catch missing tounicodes, e.g. needed for ssty in math cambria)
local c = changed[unicode]
if c then
- description = descriptions[c] or character
+ description = descriptions[c] or descriptions[unicode] or character
character = characters[c] or character
index = description.index or c
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ if not touni then -- goodie
+ local d = descriptions[unicode] or characters[unicode]
+ local i = d.index or unicode
+ touni = tounicode[i] -- nb: index!
+ end
+ end
else
description = descriptions[unicode] or character
index = description.index or unicode
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ end
end
else
description = descriptions[unicode] or character
index = description.index or unicode
+ if tounicode then
+ touni = tounicode[index] -- nb: index!
+ end
end
local width = description.width
local height = description.height
@@ -3577,15 +3591,12 @@ function constructors.scale(tfmdata,specification)
}
end
end
+ if touni then
+ chr.tounicode = touni
+ end
-- if trace_scaling then
-- report_defining("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or "",index or 0,description.name or '-',description.class or '-')
-- end
- if tounicode then
- local tu = tounicode[index] -- nb: index!
- if tu then
- chr.tounicode = tu
- end
- end
if hasquality then
-- we could move these calculations elsewhere (saves calculations)
local ve = character.expansion_factor
@@ -4569,6 +4580,15 @@ local function tounicode16sequence(unicodes)
return concat(t)
end
+local function fromunicode16(str)
+ if #str == 4 then
+ return tonumber(str,16)
+ else
+ local l, r = match(str,"(....)(....)")
+ return (tonumber(l,16)- 0xD800)*0x400 + tonumber(r,16) - 0xDC00
+ end
+end
+
--~ This is quite a bit faster but at the cost of some memory but if we
--~ do this we will also use it elsewhere so let's not follow this route
--~ now. I might use this method in the plain variant (no caching there)
@@ -4593,6 +4613,7 @@ mappings.loadlumtable = loadlumtable
mappings.makenameparser = makenameparser
mappings.tounicode16 = tounicode16
mappings.tounicode16sequence = tounicode16sequence
+mappings.fromunicode16 = fromunicode16
local separator = S("_.")
local other = C((1 - separator)^1)
@@ -4648,7 +4669,9 @@ function mappings.addtounicode(data,filename)
if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
local unicode = lumunic and lumunic[name] or unicodevector[name]
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
end
-- cidmap heuristics, beware, there is no guarantee for a match unless
-- the chain resolves
@@ -4657,7 +4680,9 @@ function mappings.addtounicode(data,filename)
if foundindex then
unicode = cidcodes[foundindex] -- name to number
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
else
local reference = cidnames[foundindex] -- number to name
if reference then
@@ -4665,16 +4690,23 @@ function mappings.addtounicode(data,filename)
if foundindex then
unicode = cidcodes[foundindex]
if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ originals[index] = unicode
+ tounicode[index] = tounicode16(unicode)
+ ns = ns + 1
end
end
if not unicode then
local foundcodes, multiple = lpegmatch(uparser,reference)
if foundcodes then
+ originals[index] = foundcodes
if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ tounicode[index] = tounicode16sequence(foundcodes)
+ nl = nl + 1
+ unicode = true
else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ tounicode[index] = tounicode16(foundcodes)
+ ns = ns + 1
+ unicode = foundcodes
end
end
end
@@ -4685,19 +4717,8 @@ function mappings.addtounicode(data,filename)
-- a.whatever or a_b_c.whatever or a_b_c (no numbers)
if not unicode then
local split = lpegmatch(ligsplitter,name)
- local nplit = (split and #split) or 0
- if nplit == 0 then
- -- skip
- elseif nplit == 1 then
- local base = split[1]
- unicode = unicodes[base] or unicodevector[base]
- if unicode then
- if type(unicode) == "table" then
- unicode = unicode[1]
- end
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- else
+ local nplit = split and #split or 0
+ if nplit >= 2 then
local t, n = { }, 0
for l=1,nplit do
local base = split[l]
@@ -4715,25 +4736,38 @@ function mappings.addtounicode(data,filename)
if n == 0 then -- done then
-- nothing
elseif n == 1 then
- originals[index], tounicode[index], nl, unicode = t[1], tounicode16(t[1]), nl + 1, true
+ originals[index] = t[1]
+ tounicode[index] = tounicode16(t[1])
else
- originals[index], tounicode[index], nl, unicode = t, tounicode16sequence(t), nl + 1, true
+ originals[index] = t
+ tounicode[index] = tounicode16sequence(t)
end
+ nl = nl + 1
+ unicode = true
+ else
+ -- skip: already checked and we don't want privates here
end
end
- -- last resort
+ -- last resort (we might need to catch private here as well)
if not unicode then
local foundcodes, multiple = lpegmatch(uparser,name)
if foundcodes then
if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ originals[index] = foundcodes
+ tounicode[index] = tounicode16sequence(foundcodes)
+ nl = nl + 1
+ unicode = true
else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ originals[index] = foundcodes
+ tounicode[index] = tounicode16(foundcodes)
+ ns = ns + 1
+ unicode = foundcodes
end
end
end
-- if not unicode then
- -- originals[index], tounicode[index] = 0xFFFD, "FFFD"
+ -- originals[index] = 0xFFFD
+ -- tounicode[index] = "FFFD"
-- end
end
end