diff options
author | Karl Berry <karl@freefriends.org> | 2012-11-30 23:33:24 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-11-30 23:33:24 +0000 |
commit | e5046e6899a74738971f588716d03accf66cab88 (patch) | |
tree | 9ecc17242559dad1feed3bd5f14226af8f98678d | |
parent | 76def1765b0dafeba9f05e03b8ae3d89bf3b234d (diff) |
context-ruby (29nov12)
git-svn-id: svn://tug.org/texlive/trunk@28398 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii (renamed from Master/texmf-dist/tex/context/third/ruby/t-ruby.tex) | 47 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/third/ruby/t-ruby.mkiv | 283 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi | 357 |
3 files changed, 645 insertions, 42 deletions
diff --git a/Master/texmf-dist/tex/context/third/ruby/t-ruby.tex b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii index 99321922d9b..7f2a6e26800 100644 --- a/Master/texmf-dist/tex/context/third/ruby/t-ruby.tex +++ b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii @@ -1,6 +1,6 @@ %D \module %D [ file=t-ruby, -%D version=2010.01.26, +%D version=2010.10.10, %D title=\CONTEXT\ User Module, %D subtitle=Ruby Markup, %D author=Wolfgang Schuster, @@ -42,7 +42,7 @@ %D </ruby> %D \stoptyping -%D Constants +%D Constants/variables \startinterface all \setinterfaceconstant {basestyle} {basestyle} @@ -70,43 +70,6 @@ \newtoks \!!rubybase \newtoks \!!rubytext -%D Helpers - -\newif\ifideograph - -\long\def\doifelseideograph#1% - {\global\ideographtrue - \handletokens#1\with\checkideograph - \ifideograph - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\def\doifinrangeelse#1#2#3% - {\unless\ifnum#1<#2 - \unless\ifnum#1>#3 - \expandafter\expandafter\expandafter\firstoftwoarguments - \else - \expandafter\expandafter\expandafter\secondoftwoarguments - \fi - \else - \expandafter\secondoftwoarguments - \fi} - -\def\checkideograph#1% - {\doifinrangeelse{`#1}{"3040}{"309F}\donothing - {\doifinrangeelse{`#1}{"30A0}{"30FF}\donothing - {\doifinrangeelse{`#1}{"31F0}{"31FF}\donothing - {\doifinrangeelse{`#1}{"3400}{"4DFF}\donothing - {\doifinrangeelse{`#1}{"4E00}{"9FFF}\donothing - {\doifinrangeelse{`#1}{"AC00}{"D7A3}\donothing - {\doifinrangeelse{`#1}{"F900}{"FAFF}\donothing - {\doifinrangeelse{`#1}{"FF00}{"FFEF}\donothing - {\doifinrangeelse{`#1}{"20000}{"2A6DF}\donothing - {\doifinrangeelse{`#1}{"2F800}{"2FA1F}\donothing - {\ideographfalse}}}}}}}}}}} - %D \macros %D {setupruby} @@ -162,8 +125,8 @@ %D Alignment -\def\RUBYdistributespace #1{\doifelseideograph{#1}{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}}{\hss#1\hss}} -\def\RUBYdistributeletter#1{\doifelseideograph{#1}{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}}{\hss#1\hss}} +\def\RUBYdistributespace #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}} +\def\RUBYdistributeletter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}} \setvalue{\????rb:\c!align:\v!space}% {\!!rubyleftmargin \zeropoint @@ -302,7 +265,7 @@ %D {ruby} \def\ruby - {\dosingleempty\doruby} + {\dontleavehmode\dosingleempty\doruby} \def\doruby[#1]#2#3% {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY} diff --git a/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkiv b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkiv new file mode 100644 index 00000000000..d90330a41b1 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkiv @@ -0,0 +1,283 @@ +%D \module +%D [ file=t-ruby, +%D version=2010.11.23, +%D title=\CONTEXT\ User Module, +%D subtitle=Ruby Markup, +%D author=Wolfgang Schuster, +%D date=\currentdate, +%D copyright=Wolfgang Schuster, +%D email=schuster.wolfgang@googlemail.com, +%D license=Public Domain] + +\writestatus{loading}{ConTeXt User Module / Ruby Markup} + +\unprotect + +%D simple ruby: +%D +%D \starttyping +%D <ruby> +%D <rb>WWW</rb> +%D <rt>World Wide Web</rt> +%D </ruby> +%D \stoptyping +%D +%D complex ruby: +%D +%D \starttyping +%D <ruby> +%D <rbc> +%D <rb>10</rb> +%D <rb>31</rb> +%D <rb>2002</rb> +%D </rbc> +%D <rtc> +%D <rt>Month</rt> +%D <rt>Day</rt> +%D <rt>Year</rt> +%D </rtc> +%D <rtc> +%D <rt rbspan="3">Expiration Date</rt> +%D </rtc> +%D </ruby> +%D \stoptyping + +%D Constants/variables + +\startinterface all + \setinterfaceconstant {basestyle} {basestyle} + \setinterfaceconstant {basecolor} {basecolor} + \setinterfaceconstant {overhang} {overhang} +\stopinterface + +\startinterface all + \setinterfacevariable {letter} {letter} + \setinterfacevariable {end} {end} + \setinterfacevariable {inline} {inline} +\stopinterface + +%D Namespace + +\def\????rb{@@@@rb} + +%D Additional registers + +\newdimen \!!rubywidth +\newdimen \!!rubyleftmargin +\newdimen \!!rubyrightmargin +\newsignal\!!rubysignal +\newcount \!!rubycount +\newtoks \!!rubybase +\newtoks \!!rubytext + +%D \macros +%D {setupruby} + +\def\setupruby + {\dodoubleargument\getparameters[\????rb]} + +\def\rubyparameter#1{\csname\????rb#1\endcsname} + +%D \macros +%D {bRUBY,eRUBY,bRB,eRB,bRT,eRT} + +\def\bRUBY + {\dosingleempty\dobRUBY} + +\def\dobRUBY[#1]% + {\begingroup + \iffirstargument + \setupruby[#1]% + \fi + \scratchdimen\lastskip + \ifdim\scratchdimen=\!!rubysignal\else\global\!!rubywidth\!!zeropoint\fi + \global\advance\!!rubycount\plusone + \xypos{rubyposition:\number\!!rubycount}% + \doifmodeelse\v!first + {\edef\rubyposition{\the\onepoint}}% + {\edef\rubyposition{\the\dimexpr\MPx{rubyposition:\number\!!rubycount}-\MPx{text:\the\realpageno}\relax}}} + +\def\eRUBY + {\setbox\scratchboxone\hbox{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\the\!!rubybase}}% + \setbox\scratchboxtwo\hbox{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\the\!!rubytext}}% + \scratchdimenone\wd\scratchboxone + \scratchdimentwo\wd\scratchboxtwo + %\scratchdimenthree\ifdim\scratchdimenone<\scratchdimentwo\space\scratchdimenone\else\scratchdimentwo\fi + \scratchdimenthree\scratchdimenone + \executeifdefined{\????rb:\c!align :\rubyparameter\c!align }{\getvalue{\????rb:\c!align :\v!auto }}% + \executeifdefined{\????rb:\c!position:\rubyparameter\c!position}{\getvalue{\????rb:\c!position:\v!before}}% + \executeifdefined{\????rb:\c!overhang:\rubyparameter\c!overhang}{\getvalue{\????rb:\c!overhang:\v!auto }}% + \hskip\!!rubysignal\relax + \endgroup} + +\def\bRB{\dodoubleempty\dobRB} +\def\bRT{\dodoubleempty\dobRT} + +\def\dobRB[#1][#2]#3\eRB{\!!rubybase{#3}} +\def\dobRT[#1][#2]#3\eRT{\!!rubytext{#3}} + +\def\placerubystrut{\doif{\rubyparameter\c!strut}\v!yes{\setstrut\strut}} + +%D Alignment + +\def\RUBYdistributespace #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}} +\def\RUBYdistributeletter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}} + +\setvalue{\????rb:\c!align:\v!space}% + {\!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \ifdim\scratchdimenone>\scratchdimentwo + \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}% + \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributespace\@EA{\the\!!rubytext}}}% + \else + \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributespace\@EA{\the\!!rubybase}}}% + \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}% + \fi} + +\setvalue{\????rb:\c!align:\v!letter}% + {\!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \ifdim\scratchdimenone>\scratchdimentwo + \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}% + \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubytext}}}% + \else + \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubybase}}}% + \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}% + \fi} + +\setvalue{\????rb:\c!align:\v!auto}% I need special alignments for the begin/end of the line!!! + {\ifdim\scratchdimenone>\scratchdimentwo + \getvalue{\????rb:\c!align:\v!space}% + \else + \ifdim\rubyposition=\!!zeropoint % begin of the line + \getvalue{\????rb:\c!align:\v!left}% + \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax % end of the line + \getvalue{\????rb:\c!align:\v!right}% + \else + \getvalue{\????rb:\c!align:\v!space}% + \fi\fi + \fi} + +\setvalue{\????rb:\c!align:\v!left}% + {\ifdim\scratchdimenone>\scratchdimentwo + \!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \else + \!!rubyleftmargin \zeropoint + \!!rubyrightmargin\dimexpr\scratchdimentwo-\scratchdimenone\relax + \fi + \setbox\scratchboxone\hbox to \scratchdimenthree{\box\scratchboxone\hss}% + \setbox\scratchboxtwo\hbox to \scratchdimenthree{\box\scratchboxtwo\hss}} + +\setvalue{\????rb:\c!align:\v!start}% + {\getvalue{\????rb:\c!align:\v!left}} + +\setvalue{\????rb:\c!align:\v!center}% + {\ifdim\scratchdimenone>\scratchdimentwo + \!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \else + \!!rubyleftmargin \dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax + \!!rubyrightmargin\dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax + \fi + \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone\hss}% + \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo\hss}} + +\setvalue{\????rb:\c!align:\v!right}% + {\ifdim\scratchdimenone>\scratchdimentwo + \!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \else + \!!rubyleftmargin \dimexpr\scratchdimentwo-\scratchdimenone\relax + \!!rubyrightmargin\zeropoint + \fi + \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone}% + \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo}} + +\setvalue{\????rb:\c!align:\v!end}% + {\getvalue{\v!ruby:\c!align:\v!right}} + +\setvalue{\????rb:\c!align:\v!edge}% modify to take care of overlap etc. + {\ifdim\rubyposition=\zeropoint + \getvalue{\????rb:\c!align:\v!left}% + \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax + \getvalue{\????rb:\c!align:\v!right}% + \else + \getvalue{\????rb:\c!align:\v!center}% + \fi\fi} + +%D Positioning + +\setvalue{\????rb:\c!position:\v!before}% + {\setbox\scratchboxthree\vbox + {\offinterlineskip + \hbox{\undepthed{\placerubystrut\box\scratchboxtwo}} + \rubyparameter\c!inbetween + \hbox{\placerubystrut\box\scratchboxone}}} + +\setvalue{\????rb:\c!position:\v!after}% + {\setbox\scratchboxthree\vtop + {\offinterlineskip + \hbox{\undepthed{\placerubystrut\box\scratchboxone}} + \rubyparameter\c!inbetween + \hbox{\placerubystrut\box\scratchboxtwo}}} + +\setvalue{\????rb:\c!position:\v!inline}% pure text to allow line breaks in the text + {\setbox\scratchboxthree\box\voidbox + \!!rubyleftmargin \zeropoint + \!!rubyrightmargin\zeropoint + \the\!!rubybase + \rubyparameter\c!separator + \rubyparameter\c!lefttext\the\!!rubytext\rubyparameter\c!righttext} + +%D Overhang + +\setvalue{\????rb:\c!overhang:\v!auto}% + {\ifdim\!!rubywidth>\!!zeropoint + \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax + \fi + \box\scratchboxthree + \global\!!rubywidth\!!rubyrightmargin} + +\setvalue{\????rb:\c!overhang:\v!start}% + {\box\scratchboxthree\kern\!!rubyrightmargin + \global\!!rubywidth\!!rubyrightmargin} + +\setvalue{\????rb:\c!overhang:\v!end}% + {\ifdim\!!rubywidth>\!!zeropoint + \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax + \else + \kern\!!rubyleftmargin + \fi + \box\scratchboxthree + \global\!!rubywidth\!!zeropoint} + +\setvalue{\????rb:\c!overhang:\v!none}% + {\kern\!!rubyleftmargin\box\scratchboxthree\kern\!!rubyrightmargin + \global\!!rubywidth\!!zeropoint} + +%D \macros +%D {ruby} + +\def\ruby + {\dontleavehmode\dosingleempty\doruby} + +\def\doruby[#1]#2#3% + {\pdfactualtext + {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY} + {#2\rubyparameter\c!separator\rubyparameter\c!lefttext#3\rubyparameter\c!righttext}} + +%D Default values + +\setupruby + [\c!position=\v!before, % before|after|inline + \c!align=\v!auto, % auto|start|left|center|end|right|distribute-letter|distribute-space|line-edge + \c!overhang=\v!auto, % auto|start|end|none + \c!separator={ }, + \c!lefttext=(, + \c!righttext=), + \c!strut=\v!no, + \c!inbetween={\blank[\v!small]}, + \c!textstyle=\txx] + +\protect \endinput diff --git a/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi new file mode 100644 index 00000000000..14268356c15 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi @@ -0,0 +1,357 @@ +%D \module +%D [ file=t-ruby, +%D version=2012.03.13, +%D title=\CONTEXT\ User Module, +%D subtitle=Ruby Markup, +%D author=Wolfgang Schuster, +%D date=\currentdate, +%D copyright=Wolfgang Schuster, +%D email=schuster.wolfgang@googlemail.com, +%D license=Public Domain] + +\writestatus{loading}{ConTeXt User Module / Ruby Markup} + +\unprotect + +%D simple ruby: +%D +%D \starttyping +%D <ruby> +%D <rb>WWW</rb> +%D <rt>World Wide Web</rt> +%D </ruby> +%D \stoptyping +%D +%D complex ruby: +%D +%D \starttyping +%D <ruby> +%D <rbc> +%D <rb>10</rb> +%D <rb>31</rb> +%D <rb>2002</rb> +%D </rbc> +%D <rtc> +%D <rt>Month</rt> +%D <rt>Day</rt> +%D <rt>Year</rt> +%D </rtc> +%D <rtc> +%D <rt rbspan="3">Expiration Date</rt> +%D </rtc> +%D </ruby> +%D \stoptyping + +%D Constants/variables + +\startinterface all + \setinterfaceconstant {basestyle} {basestyle} + \setinterfaceconstant {basecolor} {basecolor} + \setinterfaceconstant {overhang} {overhang} + \setinterfaceconstant {base} {base} +\stopinterface + +\startinterface all + \setinterfacevariable {letter} {letter} + \setinterfacevariable {end} {end} + \setinterfacevariable {inline} {inline} + \setinterfacevariable {ruby} {ruby} +\stopinterface + +%D Lua + +\startluacode + +thirddata = thirddata or { } +thirddata.ruby = thirddata.ruby or { } + +function thirddata.ruby.doifelsecjk(string) + local state = true + for c in unicode.utf8.gmatch(string,".") do + local n = scripts.hash[utf.byte(c)] + if not ( n == "chinese" or n == "korean" ) then + state = false + break + end + end + commands.doifelse(state) +end + +\stopluacode + +%D Namespace + +\installnamespace {ruby} +\installnamespace {rubyalign} +\installnamespace {rubyalternative} +\installnamespace {rubyoverhang} + +%D Additional registers + +\newdimen \d_ruby_width +\newdimen \d_ruby_base +\newdimen \d_ruby_text +\newdimen \d_ruby_left +\newdimen \d_ruby_right +\newdimen \d_ruby_position + +\newsignal \s_ruby_signal + +\newcount \c_ruby_n + +\newtoks \t_ruby_base +\newtoks \t_ruby_text + +\newbox \b_ruby_base +\newbox \b_ruby_text +\newbox \b_ruby_box + +%D \macros +%D {defineruby,setupruby} + +\installcommandhandler \????ruby {ruby} \????ruby + +%D \macros +%D {ruby} + +\unexpanded\def\ruby_cmd#name% + {\dontleavehmode + \begingroup + \edef\currentruby{#name}% + \dosingleempty\ruby_cmd_indeed} + +\unexpanded\def\ruby_cmd_indeed[#parameters]#base#text% + {\setupcurrentruby[#parameters,\c!base={#base},\c!text={#text}]% + \scratchdimen\lastskip + \ifdim\scratchdimen=\s_ruby_signal\else\global\d_ruby_width\zeropoint\fi + \global\advance\c_ruby_n\plusone + \xypos{rubyposition:\number\c_ruby_n}% + \doifmodeelse\v!first + {\d_ruby_position\onepoint}% + {\d_ruby_position\dimexpr\MPx{rubyposition:\number\c_ruby_n}-\MPx{text:\number\realpageno}\relax}% + \setbox\b_ruby_base\hbox{\userubystyleandcolor\c!basestyle\c!basecolor{\directrubyparameter\c!base}}% + \setbox\b_ruby_text\hbox{\userubystyleandcolor\c!textstyle\c!textcolor{\directrubyparameter\c!text}}% + \d_ruby_base\wd\b_ruby_base + \d_ruby_text\wd\b_ruby_text + \expandcheckedcsname\????rubyalign {\rubyparameter\c!align }\v!auto + \expandcheckedcsname\????rubyalternative{\rubyparameter\c!alternative}\v!top + \expandcheckedcsname\????rubyoverhang {\rubyparameter\c!overhang }\v!auto + \hskip\s_ruby_signal\relax + \endgroup} + +\appendtoks + \setuevalue\currentruby{\ruby_cmd{\currentruby}}% +\to \everydefineruby + +%D Alignment +%D +%D \startitemize[packed] +%D \item left +%D \item middle +%D \item right +%D \item auto +%D \item letter +%D \item space +%D \stopitemize + +\unexpanded\def\ruby_distribute_space #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}} +\unexpanded\def\ruby_distribute_letter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}} + +\setvalue{\????rubyalign\v!space}% stretch? + {\d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \ifdim\d_ruby_base>\d_ruby_text + \setbox\b_ruby_base\hbox to \d_ruby_base{\hss\box\b_ruby_base\hss}% + \setbox\b_ruby_text\hbox to \d_ruby_base{\userubystyleandcolor\c!textstyle\c!textcolor{\normalexpanded{\ruby_distribute_space{\directrubyparameter\c!text}}}}% + \else + \setbox\b_ruby_base\hbox to \d_ruby_text{\userubystyleandcolor\c!basestyle\c!basecolor{\normalexpanded{\ruby_distribute_space{\directrubyparameter\c!base}}}}% + \setbox\b_ruby_text\hbox to \d_ruby_text{\hss\box\b_ruby_text\hss}% + \fi} + +\setvalue{\????rubyalign\v!letter}% !!! + {\d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \ifdim\d_ruby_base>\d_ruby_test + \setbox\b_ruby_base\hbox to \d_ruby_base{\hss\box\b_ruby_base\hss}% + \setbox\b_ruby_text\hbox to \d_ruby_base{\userubystyleandcolor\c!textstyle\c!textcolor{\normalexpanded{\ruby_distribute_letter{\directrubyparameter\c!text}}}}% + \else + \setbox\b_ruby_base\hbox to \d_ruby_text{\userubystyleandcolor\c!basestyle\c!basecolor{\normalexpanded{\ruby_distribute_letter{\directrubyparameter\c!base}}}}% + \setbox\b_ruby_text\hbox to \d_ruby_text{\hss\box\b_ruby_text\hss}% + \fi} + +\setvalue{\????rubyalign\v!auto}% + {\ifdim\d_ruby_base>\d_ruby_text + \ctxlua{thirddata.ruby.doifelsecjk("\directrubyparameter\c!base")}\donetrue\donefalse + \ifdone + \getvalue{\????rubyalign\v!space}% + \else + \getvalue{\????rubyalign\v!middle}% + \fi + \else + \ifdim\d_ruby_position=\zeropoint % begin of the line + \getvalue{\????rubyalign\v!left}% + \else\ifdim\d_ruby_position=\dimexpr\textwidth-\d_ruby_base\relax % end of the line + \getvalue{\????rubyalign\v!right}% + \else + \ctxlua{thirddata.ruby.doifelsecjk("\directrubyparameter\c!text")}\donetrue\donefalse + \ifdone + \getvalue{\????rubyalign\v!space}% + \else + \getvalue{\????rubyalign\v!middle}% + \fi + \fi\fi + \fi} + +\setvalue{\????rubyalign\v!left}% + {\ifdim\d_ruby_base>\d_ruby_text + \d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \else + \d_ruby_left \zeropoint + \d_ruby_right\dimexpr\d_ruby_text-\d_ruby_base\relax + \fi + \setbox\b_ruby_base\hbox to \d_ruby_base{\box\b_ruby_base\hss}% + \setbox\b_ruby_text\hbox to \d_ruby_base{\box\b_ruby_text\hss}} + +\setvalue{\????rubyalign\v!middle}% + {\ifdim\d_ruby_base>\d_ruby_text + \d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \else + \d_ruby_left \dimexpr(\d_ruby_text-\d_ruby_base)/2\relax + \d_ruby_right\dimexpr(\d_ruby_text-\d_ruby_base)/2\relax + \fi + \setbox\b_ruby_base\hbox to \d_ruby_base{\hss\box\b_ruby_base\hss}% + \setbox\b_ruby_text\hbox to \d_ruby_base{\hss\box\b_ruby_text\hss}} + +\setvalue{\????rubyalign\v!right}% + {\ifdim\d_ruby_base>\d_ruby_base + \d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \else + \d_ruby_left \dimexpr\d_ruby_text-\d_ruby_base\relax + \d_ruby_right\zeropoint + \fi + \setbox\b_ruby_base\hbox to \d_ruby_base{\hss\box\b_ruby_base}% + \setbox\b_ruby_text\hbox to \d_ruby_base{\hss\box\b_ruby_text}} + +\setvalue{\????rubyalign\v!margin}% modify to take care of overlap etc. + {\ifdim\d_ruby_position=\zeropoint + \getvalue{\????rubyalign\v!left}% + \else\ifdim\d_ruby_position=\dimexpr\textwidth-\d_ruby_base\relax + \getvalue{\????rubyalign\v!right}% + \else + \getvalue{\????rubyalign\v!middle}% + \fi\fi} + +%D Alternative +%D +%D \startitemize[packed] +%D \item top +%D \item bottom +%D \item text +%D \stopitemize + +% \setvalue{\????rubyalternative\v!none}% needed for \pdfactualtext +% {\directrubyparameter\c!base +% \rubyparameter\c!separator +% \rubyparameter\c!lefttext +% \directrubyparameter\c!text +% \rubyparameter\c!righttext} + +\setvalue{\????rubyalternative\v!top}% + {\setbox\b_ruby_box\vbox + {\doifsomething{\rubyparameter\c!strut}{\setupstrut[\rubyparameter\c!strut]}% + \offinterlineskip + \hbox{\undepthed{\begstrut\box\b_ruby_text\endstrut}} + \rubyparameter\c!inbetween + \hbox{\begstrut\box\b_ruby_base\endstrut}}} + +\setvalue{\????rubyalternative\v!bottom}% + {\setbox\b_ruby_box\vtop + {\doifsomething{\rubyparameter\c!strut}{\setupstrut[\rubyparameter\c!strut]}% + \offinterlineskip + \hbox{\undepthed{\begstrut\box\b_ruby_base\endstrut}} + \rubyparameter\c!inbetween + \hbox{\begstrut\box\b_ruby_text\endstrut}}} + +\setvalue{\????rubyalternative\v!text}% pure text to allow line breaks in the text + {\setbox\b_ruby_box\box\voidbox + \d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \directrubyparameter\c!base + \rubyparameter\c!separator + \rubyparameter\c!lefttext\directrubyparameter\c!text\rubyparameter\c!righttext} + +\unexpanded\def\ruby_alternative_vertical#text% + {\setbox\scratchbox\vbox + {\userubystyleandcolor\c!textstyle\c!textcolor + \setupinterlinespace[\rubyparameter\c!interlinespace]% + \handletokens#text\with\hbox + \par}% + \lower\dimexpr(\ht\scratchbox+\strutdp-\strutht)/2-\rubyparameter\c!dy\relax\box\scratchbox} + +\setvalue{\????rubyalternative\v!vertical}% + {\d_ruby_left \zeropoint + \d_ruby_right\zeropoint + \setbox\b_ruby_box\hbox\bgroup + \begingroup + \userubystyleandcolor\c!basestyle\c!basecolor + \directrubyparameter\c!base + \endgroup + \normalexpanded{\ruby_alternative_vertical{\directrubyparameter\c!text}}% + \egroup} + +%D Overhang +%D +%D \startitemize[packed] +%D \item left +%D \item right +%D \item auto +%D \item none +%D \stopitemize + +\setvalue{\????rubyoverhang\v!auto}% + {\ifdim\d_ruby_width>\zeropoint + \kern\dimexpr\d_ruby_left+\d_ruby_width\relax + \fi + \box\b_ruby_box + \global\d_ruby_width\d_ruby_right} + +\setvalue{\????rubyoverhang\v!left}% + {\box\b_ruby_box\kern\d_ruby_right + \global\d_ruby_width\d_ruby_right} + +\setvalue{\????rubyoverhang\v!right}% + {\ifdim\d_ruby_width>\zeropoint + \kern\dimexpr\d_ruby_left+\d_ruby_width\relax + \else + \kern\d_ruby_left + \fi + \box\b_ruby_box + \global\d_ruby_width\zeropoint} + +\setvalue{\????rubyoverhang\v!none}% + {\kern\d_ruby_left\box\b_ruby_box\kern\d_ruby_right + \global\d_ruby_width\zeropoint} + +%D \macros +%D {ruby} + +\defineruby[\v!ruby] + +%D Default values + +\setupruby + [\c!alternative=\v!top, + \c!align=\v!auto, + \c!overhang=\v!auto, + \c!dy=\zeropoint, + \c!separator={ }, + \c!lefttext={(}, + \c!righttext={)}, + \c!strut=\v!no, + \c!inbetween={\blank[\v!small]}, + \c!textstyle=\txx] + +\protect \endinput |