summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi')
-rw-r--r--Master/texmf-dist/tex/context/third/ruby/t-ruby.mkvi357
1 files changed, 357 insertions, 0 deletions
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