From e5046e6899a74738971f588716d03accf66cab88 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 30 Nov 2012 23:33:24 +0000 Subject: context-ruby (29nov12) git-svn-id: svn://tug.org/texlive/trunk@28398 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/context/third/ruby/t-ruby.mkii | 286 +++++++++++++++++ .../texmf-dist/tex/context/third/ruby/t-ruby.mkiv | 283 ++++++++++++++++ .../texmf-dist/tex/context/third/ruby/t-ruby.mkvi | 357 +++++++++++++++++++++ .../texmf-dist/tex/context/third/ruby/t-ruby.tex | 323 ------------------- 4 files changed, 926 insertions(+), 323 deletions(-) create mode 100644 Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii create mode 100644 Master/texmf-dist/tex/context/third/ruby/t-ruby.mkiv create mode 100644 Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi delete mode 100644 Master/texmf-dist/tex/context/third/ruby/t-ruby.tex diff --git a/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii new file mode 100644 index 00000000000..7f2a6e26800 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkii @@ -0,0 +1,286 @@ +%D \module +%D [ file=t-ruby, +%D version=2010.10.10, +%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 +%D WWW +%D World Wide Web +%D +%D \stoptyping +%D +%D complex ruby: +%D +%D \starttyping +%D +%D +%D 10 +%D 31 +%D 2002 +%D +%D +%D Month +%D Day +%D Year +%D +%D +%D Expiration Date +%D +%D +%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 {pdfactualtext} + +\ifx\pdfactualtext\undefined \let\pdfactualtext\secondoftwoarguments \fi + +%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% + {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY} + +%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.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 +%D WWW +%D World Wide Web +%D +%D \stoptyping +%D +%D complex ruby: +%D +%D \starttyping +%D +%D +%D 10 +%D 31 +%D 2002 +%D +%D +%D Month +%D Day +%D Year +%D +%D +%D Expiration Date +%D +%D +%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 +%D WWW +%D World Wide Web +%D +%D \stoptyping +%D +%D complex ruby: +%D +%D \starttyping +%D +%D +%D 10 +%D 31 +%D 2002 +%D +%D +%D Month +%D Day +%D Year +%D +%D +%D Expiration Date +%D +%D +%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 diff --git a/Master/texmf-dist/tex/context/third/ruby/t-ruby.tex b/Master/texmf-dist/tex/context/third/ruby/t-ruby.tex deleted file mode 100644 index 99321922d9b..00000000000 --- a/Master/texmf-dist/tex/context/third/ruby/t-ruby.tex +++ /dev/null @@ -1,323 +0,0 @@ -%D \module -%D [ file=t-ruby, -%D version=2010.01.26, -%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 -%D WWW -%D World Wide Web -%D -%D \stoptyping -%D -%D complex ruby: -%D -%D \starttyping -%D -%D -%D 10 -%D 31 -%D 2002 -%D -%D -%D Month -%D Day -%D Year -%D -%D -%D Expiration Date -%D -%D -%D \stoptyping - -%D Constants - -\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 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} - -\def\setupruby - {\dodoubleargument\getparameters[\????rb]} - -\def\rubyparameter#1{\csname\????rb#1\endcsname} - -%D \macros -%D {pdfactualtext} - -\ifx\pdfactualtext\undefined \let\pdfactualtext\secondoftwoarguments \fi - -%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{\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}} - -\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 - {\dosingleempty\doruby} - -\def\doruby[#1]#2#3% - {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY} - -%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 -- cgit v1.2.3