X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Faddons%2Fluatexja-ruby.sty;h=6b5075f7ba6bc7cf0f1d072ba38d616355795646;hb=ab23049deb6fb90ca689fdf4924b3783f08f8f2e;hp=6df9a0b40bdac5d5c0524b684adf6a2fdcd6273d;hpb=29e60f5e16554b6e569bdd14ee56668640b9a974;p=luatex-ja%2Fluatexja.git diff --git a/src/addons/luatexja-ruby.sty b/src/addons/luatexja-ruby.sty index 6df9a0b..6b5075f 100644 --- a/src/addons/luatexja-ruby.sty +++ b/src/addons/luatexja-ruby.sty @@ -4,11 +4,11 @@ % LaTeX only! \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-ruby}[2014/02/06 v0.1] +\ProvidesPackage{luatexja-ruby}[2015/12/29 v0.23] \RequirePackage{luatexja} %%------------------ -\newluatexattribute\ltj@rubyattr +\newattribute\ltj@rubyattr \ltj@rubyattr=0 \RequireLuaTeXjaSubmodule{ruby} @@ -18,12 +18,12 @@ %% 引数:ルビ全角を単位とした実数 %% この文字への pre-, post-intrusion の許容量 \define@key[ltj]{japaram}{rubypreintrusion}{% - \expandafter\ltj@@set@stack@real#1:{RIPRE}{0}{0x7FFFFFFF}} + \ltj@@set@stack@real{RIPRE}{0}{0x7FFFFFFF}#1 } \define@key[ltj]{japaram}{rubypostintrusion}{% - \expandafter\ltj@@set@stack@real#1:{RIPOST}{0}{0x7FFFFFFF}} -\def\ltj@@set@stack@real#1,#2:#3#4#5{% - \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#3, - \ltj@safe@num@or\ltj@defnum{#1},\ltj@safe@real{#2},#4,#5)}} + \ltj@@set@stack@real{RIPOST}{0}{0x7FFFFFFF}#1 } +\def\ltj@@set@stack@real#1#2#3{% + \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1, + #2, #3, luatexja.token.scan_word)}} % ルビ用のキー設定 \def\ltj@@rkeydef#1{ @@ -44,12 +44,12 @@ %% intrusion 量強制固定(bit 0, bit 1 より優先,負数で「自動」) %% attr は sp 単位だが,ユーザーはルビ全角単位で指定する %% attr_ruby_maxprep, attr_ruby_maxpostp -\ltj@@rkeydef{intrusionpre} -\ltj@@rkeydef{intrusionpost} +\ltj@@rkeydef{pre} +\ltj@@rkeydef{post} %% 親文字伸長の際の比,{0}{1}{1} などと0--7 の数 3 つで指定 -%% attr_ruby_stretch (head left,middle,right)(end)(middle) 27-bits -\ltj@@rkeydef{stretchhead} % 行頭形 -\ltj@@rkeydef{stretchend} % 行末形 +%% attr_ruby_stretch (bol left,middle,right)(eol)(middle) 27-bits +\ltj@@rkeydef{stretchbol} % 行頭形 +\ltj@@rkeydef{stretcheol} % 行末形 \ltj@@rkeydef{stretch} % 行中形 %% ルビが伸長するときの比 {1}{2}{1} などと0--7 の数 3 つで指定 %% attr_ruby_mode 上位部分 @@ -58,23 +58,27 @@ %% attr_ruby_maxmargin %% attr は sp 単位だが,ユーザーは親文字全角単位で指定 \ltj@@rkeydef{maxmargin} -\savekeys[ltj]{ruby}{% - mode, intrusionpre, intrusionpost, - stretchhead, stretchend, stretch, stretchruby, - maxmargin, rubysize, -} +%% ルビと親文字の垂直方向の空き +%% attr_ruby_intergap +%% attr は sp 単位だが,ユーザーは親文字全角単位で指定 +\ltj@@rkeydef{intergap} + +\ltj@@rkeydef{kenten}%% 圏点文字 +\ltj@@rkeydef{fontcmd}%% フォント +\define@boolkey[ltj]{ruby}{rubysmash}[true]{} + %%%%%%%% setkeys の別名 \protected\def\ltjsetruby{\setkeys[ltj]{ruby}} % ここからは ruby マクロ内でなんとかされる事項 %% ルビと親文字の大きさの比 -\ltj@@rkeydef{rubysize} +\ltj@@rkeydef{size} +% 中つき用簡易設定. +\define@key[ltj]{ruby}{naka}[none]{\setkeys[ltj]{ruby}{mode=1, stretch=121, stretchruby=121}} % 肩つき用簡易設定. -\define@key[ltj]{ruby}{kata}[none]{\setkeys[ltj]{ruby}{mode=9,stretchruby=001}} -% 拡張肩つき用簡易設定. -\define@key[ltj]{ruby}{ekata}[none]{\setkeys[ltj]{ruby}{stretch=001,stretchruby=001}} +\define@key[ltj]{ruby}{kata}[none]{\setkeys[ltj]{ruby}{mode=9, stretch=121, stretchruby=001}} %%%%%%%% 補助関数 @@ -83,17 +87,22 @@ \string{ rubyzw = \ltj@safe@dimen{#1}, maxmargin = \ltj@safe@dimen{\ltj@@rubyip@maxmargin\zw}, - intrusionpre = \ltj@safe@dimen{\ltj@@rubyip@intrusionpre#1}, - intrusionpost = \ltj@safe@dimen{\ltj@@rubyip@intrusionpost#1}, + pre = \ltj@safe@dimen{\ltj@@rubyip@pre#1}, + post = \ltj@safe@dimen{\ltj@@rubyip@post#1}, + intergap = \ltj@safe@dimen{\ltj@@rubyip@intergap\zw}, stretch - = 262144 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchhead - + 512 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchend + = 262144 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchbol + + 512 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretcheol + \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretch, mode = 2097152 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchruby - + \ltj@safe@num{\ltj@@rubyip@mode}, + + \ltj@safe@num{\ltj@@rubyip@mode} + + 1048576 * \ifltj@ruby@rubysmash1\else0\fi \string} } +%%% +%%% 1098765432109876543210976543210 +%%% |st_ruby|! |--| ← mode \def\ltj@@ruby@cts#1#2#3{% ((\ltj@safe@num{#1}) * 64 + (\ltj@safe@num{#2}) * 8 + \ltj@safe@num{#3})% } @@ -137,22 +146,25 @@ %%%%%%%% TeX command \protected\def\ltjruby{\@ifnextchar[\ltj@@ruby{\ltj@@ruby[]}}%] -\let\ruby=\ltjruby +\AtBeginDocument{% + \ifdefined\ruby\else\let\ruby=\ltjruby\fi + \directlua{luatexja.ruby.read_old_break_info()}% +} \def\ltj@@ruby[#1]#2#3{{% #1: option #2: 親文字群,#3: ルビ文字列群,共に| 区切り \setkeys[ltj]{ruby}{#1}% \directlua{ruby_tmplist_r = \string{\string}; ruby_tmplist_p = \string{\string}}% - \leavevmode\dimen0=\f@size pt\dimen1=\ltj@@rubyip@rubysize\dimen0% + \leavevmode\dimen0=\f@size pt\dimen1=\ltj@@rubyip@size\dimen0% % 引数展開,テーブルにセット \pxrr@decompbar{#2}{\let\ltj@@ruby@mark\ltj@@ruby@sp\pxrr@res}% \pxrr@decompbar{#3}{\let\ltj@@ruby@mark\ltj@@ruby@sr\pxrr@res}% - {\fontsize{\ltj@@rubyip@rubysize\dimen0}\z@\selectfont\global\dimen1=\zw}% + {\fontsize{\ltj@@rubyip@size\dimen0}\z@\selectfont\ltj@@rubyip@fontcmd\global\dimen1=\zw}% \directlua{% luatexja.ruby.texiface(\ltj@@ruby@create@table{\dimen1}, ruby_tmplist_r, ruby_tmplist_p)}% }} \def\ltj@@ruby@sr#1{% - \setbox0=\hbox{\fontsize{\dimen1}\z@\selectfont#1}% + \setbox0=\hbox{\fontsize{\dimen1}\z@\ltj@@rubyip@fontcmd\selectfont#1}% \directlua{table.insert(ruby_tmplist_r, luatexja.ruby.cpbox())}% } \def\ltj@@ruby@sp#1{% @@ -160,6 +172,13 @@ \directlua{table.insert(ruby_tmplist_p, luatexja.ruby.cpbox())}% } +\protected\def\ltjkenten{\@ifnextchar[\ltj@@kenten{\ltj@@kenten[]}}%] +\let\kenten=\ltjkenten +\def\ltj@@kenten[#1]#2{{% + \setkeys[ltj]{ruby}{#1, stretchruby=101}% + \@tfor\ltj@@kenten@temp:=#2\do{\ltj@@ruby[]{\ltj@@kenten@temp}{\ltj@@rubyip@kenten}}% +}} + % 初期値.要調整 %% ひらがな \count@="3040\loop\relax\ifnum \count@<"30A0 @@ -177,13 +196,15 @@ %% ・ \ltjsetparameter{rubypreintrusion={`・,1}, rubypostintrusion={`・,1}} +%% 段落インデント部分 +\ltjsetparameter{rubypreintrusion={-1,1}} \setkeys[ltj]{ruby}{ - maxmargin=0.5, + pre=-1, post=-1, mode=1, stretchruby={1}{2}{1}, stretch = {1}{2}{1}, - stretchhead = {0}{1}{1}, stretchend = {1}{1}{0}, - intrusionpre = -1, intrusionpost = -1, - mode = 1, rubysize = 0.5 + stretchbol={0}{1}{1}, stretcheol={1}{1}{0}, + maxmargin=0.5, size=0.5, intergap=0, rubysmash=false, + kenten=\ltjalchar`•, fontcmd=\relax } -\endinput \ No newline at end of file +\endinput