-function set_np_xspc_jachar(Nx, x)
- local z = ltjf_font_metric_table[x.font]
- local c = x.char
- local cls = ltjf_find_char_class(c, z)
- local m = ltjf_metrics[z.jfm]
- set_attr(x, attr_jchar_class, cls)
- Nx.class = cls
- Nx.char = c
- Nx.size= z.size
- Nx.met = m
- Nx.var = z.var
- Nx.pre = ltjs_get_penalty_table('pre', c, 0, box_stack_level)
- Nx.post = ltjs_get_penalty_table('post', c, 0, box_stack_level)
- z = fast_find_char_class('lineend', m)
- local y = m.size_cache[Nx.size].char_type[Nx.class]
- if y.kern and y.kern[z] then
- Nx.lend = y.kern[z]
- else
- Nx.lend = 0
- end
- y = ltjs_get_penalty_table('xsp', c, 3, box_stack_level)
- Nx.xspc_before = (y%2==1)
- Nx.xspc_after = (y>=2)
- Nx.auto_kspc = (has_attr(x, attr_autospc)==1)
- Nx.auto_xspc = (has_attr(x, attr_autoxspc)==1)
-end
+ local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+ function set_np_xspc_jachar(Nx, x)
+ local m = ltjf_font_metric_table[x.font]
+ local c = has_attr(x, attr_orig_char) or x.char
+ local cls = ltjf_find_char_class(x.char, m)
+ if c ~= x.char and cls==0 then cls = ltjf_find_char_class(-c, m) end
+ Nx.class = cls; set_attr(x, attr_jchar_class, cls)
+ Nx.lend = m.size_cache.char_type[cls].kern[fast_find_char_class('lineend', m)] or 0
+ Nx.met, Nx.var, Nx.char = m, m.var, c
+ Nx.pre = ltjs_fast_get_penalty_table('pre', c) or 0
+ Nx.post = ltjs_fast_get_penalty_table('post', c) or 0
+ Nx.xspc = ltjs_fast_get_penalty_table('xsp', c) or 3
+ Nx.auto_kspc, Nx.auto_xspc = (has_attr(x, attr_autospc)==1), (has_attr(x, attr_autoxspc)==1)
+ end
+ local set_np_xspc_jachar = set_np_xspc_jachar