From 5b9f51e9f262df7fe3adea0956afb59ba9d2dede Mon Sep 17 00:00:00 2001 From: Hironori Kitagawa Date: Tue, 22 Nov 2011 08:56:50 +0900 Subject: [PATCH] Improve lltjp-unicode-math.sty and fix pretreat.lua. --- src/luatexja/pretreat.lua | 35 +++++++++++++++++++++-------------- src/patches/lltjp-unicode-math.sty | 10 ++++++++++ src/patches/lltjp-xunicode.sty | 1 - test/test07-math-unicode.pdf | Bin 157883 -> 163923 bytes test/test07-math-unicode.tex | 12 +++++++++++- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/luatexja/pretreat.lua b/src/luatexja/pretreat.lua index 6785c04..8096145 100644 --- a/src/luatexja/pretreat.lua +++ b/src/luatexja/pretreat.lua @@ -17,11 +17,13 @@ require('luatexja.stack'); local ltjs = luatexja.stack local has_attr = node.has_attribute local set_attr = node.set_attribute local unset_attr = node.unset_attribute +local node_type = node.type local node_remove = node.remove local node_next = node.next local node_free = node.free local id_glyph = node.id('glyph') +local id_math = node.id('math') local id_whatsit = node.id('whatsit') local sid_user = node.subtype('user_defined') @@ -39,21 +41,26 @@ box_stack_level = 0 -- This is used in jfmglue.lua. local function suppress_hyphenate_ja(head) - for p in node.traverse_id(id_glyph, head) do - local i = has_attr(p, attr_icflag) or 0 - if i==0 and ltjc.is_ucs_in_japanese_char(p) then - local v = has_attr(p, attr_curjfnt) - if v then - p.font = v + local non_math = true + for p in node.traverse(head) do + if p.id == id_glyph and non_math then + local i = has_attr(p, attr_icflag) or 0 + if i==0 and ltjc.is_ucs_in_japanese_char(p) then + local v = has_attr(p, attr_curjfnt) + if v then + p.font = v + end + v = has_attr(p, attr_ykblshift) + if v then + set_attr(p, attr_yablshift, v) + else + unset_attr(p, attr_yablshift) + end + if p.subtype%2==1 then p.subtype = p.subtype - 1 end + -- p.lang=lang_ja end - v = has_attr(p, attr_ykblshift) - if v then - set_attr(p, attr_yablshift, v) - else - unset_attr(p, attr_yablshift) - end - if p.subtype%2==1 then p.subtype = p.subtype - 1 end - -- p.lang=lang_ja + elseif p.id == id_math then + non_math = (p.subtype ~= 0) end end lang.hyphenate(head) diff --git a/src/patches/lltjp-unicode-math.sty b/src/patches/lltjp-unicode-math.sty index fb77d13..ff8ad2d 100644 --- a/src/patches/lltjp-unicode-math.sty +++ b/src/patches/lltjp-unicode-math.sty @@ -23,4 +23,14 @@ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#4} \scan_stop: \directlua{luatexja.math.is_math_letters[\int_eval:n {#4}]=true} } +\group_begin: + \char_set_catcode_other:N \^ + \gdef\q{hoge}\gdef\r{piyo} + \cs_gset:Npn \um_cs_set_eq_active_char:Nw #1 = "#2 \q_nil {%" + \tl_set:Nn \l_tmpa_tl {\ifmmode\char"#2\else\ltjalchar"#2\relax\fi} + \cs_gset_eq:NN #1 \l_tmpa_tl + } +\group_end: + +\ExplSyntaxOff \endinput diff --git a/src/patches/lltjp-xunicode.sty b/src/patches/lltjp-xunicode.sty index 702137b..4b201d6 100644 --- a/src/patches/lltjp-xunicode.sty +++ b/src/patches/lltjp-xunicode.sty @@ -67,7 +67,6 @@ \expandafter\expandafter\expandafter {\expandafter\csname#6\endcsname}{\UTFchar}{#8}{#9}\relax \fi} -%\gdef\add@UTF@accent#1#2#3{#2\ltjalchar"#1\relax} \gdef\add@UTF@accent#1#2#3{\ifx\relax#2\relax\ltjalchar"#3\else \ifx\ #2\relax\ltjalchar"#3\else \expandafter\ifx\UTF@space#2\relax\ltjalchar"#3\else diff --git a/test/test07-math-unicode.pdf b/test/test07-math-unicode.pdf index b85df38759646a480aa1d9241cb5a2c09bedc2d0..c69123219c8ee7c5da9ed48f99721d8c8ca563b7 100644 GIT binary patch delta 13969 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 SKwd6x5FZL1owTY9%Krg)6mKg4 delta 7885 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