summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/scrp-cjk.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/scrp-cjk.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-cjk.lua237
1 files changed, 126 insertions, 111 deletions
diff --git a/Master/texmf-dist/tex/context/base/scrp-cjk.lua b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
index 997baaa962b..d817c28cf86 100644
--- a/Master/texmf-dist/tex/context/base/scrp-cjk.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
@@ -7,28 +7,28 @@ if not modules then modules = { } end modules ['scrp-cjk'] = {
}
local has_attribute = node.has_attribute
-local make_glue_node = nodes.glue
-local make_penalty_node = nodes.penalty
local insert_node_after = node.insert_after
local insert_node_before = node.insert_before
local remove_node = nodes.remove
-local glyph = node.id('glyph')
-local glue = node.id('glue')
-local penalty = node.id('penalty')
+local nodepool = nodes.pool
+local new_glue = nodepool.glue
+local new_penalty = nodepool.penalty
-local preproc = attributes.private('preproc')
-local prestat = attributes.private('prestat')
+local nodecodes = nodes.nodecodes
+local glyph_code = nodecodes.glyph
-scripts.cjk = scripts.cjk or { }
+local a_prestat = attributes.private('prestat')
+local a_preproc = attributes.private('preproc')
-local kind_to_number = scripts.kind_to_number
-local number_to_kind = scripts.number_to_kind
-local hash = scripts.hash
-local cjk = scripts.cjk
+local categorytonumber = scripts.categorytonumber
+local numbertocategory = scripts.numbertocategory
+local hash = scripts.hash
+local numbertodataset = scripts.numbertodataset
-local fontdata = fonts.identifiers
-local quaddata = fonts.quads
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local quaddata = fonthashes.quads
-- raggedleft is controlled by leftskip and we might end up with a situation where
-- the intercharacter spacing interferes with this; the solution is to patch the
@@ -50,123 +50,135 @@ end
-- at font definition time and/or just assume a correct font
local function nobreak(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
+ insert_node_before(head,current,new_penalty(10000))
end
+
local function stretch_break(head,current)
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
+
local function shrink_break(head,current)
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
+
local function nobreak_stretch(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
+
local function korean_break(head,current)
- insert_node_before(head,current,make_penalty_node(inter_char_hangul_penalty))
+ insert_node_before(head,current,new_penalty(inter_char_hangul_penalty))
end
local function nobreak_shrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
+
local function nobreak_autoshrink(head,current)
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
end
local function nobreak_stretch_nobreak_shrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
+
local function nobreak_stretch_nobreak_autoshrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
end
local function nobreak_shrink_nobreak_stretch(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
+
local function nobreak_autoshrink_nobreak_stretch(head,current)
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
local function nobreak_shrink_break_stretch(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
+
local function nobreak_autoshrink_break_stretch(head,current)
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
local function nobreak_shrink_break_stretch_nobreak_shrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
+
local function nobreak_autoshrink_break_stretch_nobreak_autoshrink(head,current)
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
end
+
local function nobreak_autoshrink_break_stretch_nobreak_shrink(head,current)
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
+
local function nobreak_shrink_break_stretch_nobreak_autoshrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
if true then
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
end
end
local function nobreak_stretch_break_shrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
+
local function nobreak_stretch_break_autoshrink(head,current)
- insert_node_before(head,current,make_penalty_node(10000))
- insert_node_before(head,current,make_glue_node(0,inter_char_stretch,0))
+ insert_node_before(head,current,new_penalty(10000))
+ insert_node_before(head,current,new_glue(0,inter_char_stretch,0))
if true then
- insert_node_before(head,current,make_glue_node(0,0,inter_char_half_shrink))
+ insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink))
end
end
@@ -307,28 +319,22 @@ local injectors = { -- [previous] [current]
},
}
-local dataset = {
- inter_char_stretch_factor = 0.50, -- of quad
- inter_char_half_shrink_factor = 0.50, -- of quad
- inter_char_hangul_penalty = 50,
-}
-
local function process(head,first,last)
if first ~= last then
- local lastfont, previous, originals, last = nil, "start", nil, nil
+ local lastfont, previous, last = nil, "start", nil
while true do
local upcoming, id = first.next, first.id
- if id == glyph then
- local a = has_attribute(first,prestat)
- local current = number_to_kind[a]
+ if id == glyph_code then
+ local a = has_attribute(first,a_prestat)
+ local current = numbertocategory[a]
local action = injectors[previous]
if action then
action = action[current]
if action then
local font = first.font
if font ~= lastfont then
- lastfont, done = font, true
- set_parameters(font,dataset)
+ lastfont = font
+ set_parameters(font,numbertodataset[has_attribute(first,a_preproc)])
end
action(head,first)
end
@@ -338,9 +344,9 @@ local function process(head,first,last)
local p, n = first.prev, upcoming
if p and n then
local pid, nid = p.id, n.id
- if pid == glyph and nid == glyph then
- local pa, na = has_attribute(p,prestat), has_attribute(n,prestat)
- local pcjk, ncjk = pa and number_to_kind[pa], na and number_to_kind[na]
+ if pid == glyph_code and nid == glyph_code then
+ local pa, na = has_attribute(p,a_prestat), has_attribute(n,a_prestat)
+ local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na]
if not pcjk or not ncjk
or pcjk == "korean" or ncjk == "korean"
or pcjk == "other" or ncjk == "other"
@@ -359,7 +365,7 @@ local function process(head,first,last)
previous = "start"
end
end
- if upcoming == stop then
+ if upcoming == last then -- was stop
break
else
first = upcoming
@@ -368,9 +374,16 @@ local function process(head,first,last)
end
end
-scripts.install {
- name = "hangul",
- process = process,
+scripts.installmethod {
+ name = "hangul",
+ process = process,
+ datasets = {
+ default = {
+ inter_char_stretch_factor = 0.50, -- of quad
+ inter_char_half_shrink_factor = 0.50, -- of quad
+ inter_char_hangul_penalty = 50,
+ },
+ },
}
-- hanzi (chinese)
@@ -510,28 +523,22 @@ local injectors = { -- [previous] [current]
},
}
-local dataset = {
- inter_char_stretch_factor = 0.50, -- of quad
- inter_char_half_shrink_factor = 0.50, -- of quad
- inter_char_hangul_penalty = 50,
-}
-
local function process(head,first,last)
if first ~= last then
- local lastfont, previous, originals, last = nil, "start", nil, nil
+ local lastfont, previous, last = nil, "start", nil
while true do
local upcoming, id = first.next, first.id
- if id == glyph then
- local a = has_attribute(first,prestat)
- local current = number_to_kind[a]
+ if id == glyph_code then
+ local a = has_attribute(first,a_prestat)
+ local current = numbertocategory[a]
local action = injectors[previous]
if action then
action = action[current]
if action then
local font = first.font
if font ~= lastfont then
- lastfont, done = font, true
- set_parameters(font,dataset)
+ lastfont = font
+ set_parameters(font,numbertodataset[has_attribute(first,a_preproc)])
end
action(head,first)
end
@@ -541,13 +548,14 @@ local function process(head,first,last)
local p, n = first.prev, upcoming
if p and n then
local pid, nid = p.id, n.id
- if pid == glyph and nid == glyph then
- local pa, na = has_attribute(p,prestat), has_attribute(n,prestat)
- local pcjk, ncjk = pa and number_to_kind[pa], na and number_to_kind[na]
+ if pid == glyph_code and nid == glyph_code then
+ local pa, na = has_attribute(p,a_prestat), has_attribute(n,a_prestat)
+ local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na]
if not pcjk or not ncjk
or pcjk == "korean" or ncjk == "korean"
or pcjk == "other" or ncjk == "other"
- or pcjk == "jamo_final" or ncjk == "jamo_initial" then
+ -- or pcjk == "jamo_final" or ncjk == "jamo_initial" then
+ or pcjk == "jamo_final" or ncjk == "jamo_initial" or pcjk == "half_width_close" or ncjk == "half_width_open" then
previous = "start"
else -- if head ~= first then
remove_node(head,first,true)
@@ -562,7 +570,7 @@ local function process(head,first,last)
previous = "start"
end
end
- if upcoming == stop then
+ if upcoming == last then -- was stop
break
else
first = upcoming
@@ -571,7 +579,14 @@ local function process(head,first,last)
end
end
-scripts.install {
- name = "hanzi",
- process = process,
+scripts.installmethod {
+ name = "hanzi",
+ process = process,
+ datasets = {
+ default = {
+ inter_char_stretch_factor = 0.50, -- of quad
+ inter_char_half_shrink_factor = 0.50, -- of quad
+ inter_char_hangul_penalty = 50,
+ },
+ },
}