ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Re: ntg-context Digest, Vol 67, Issue 18
       [not found] <mailman.0.1263294002.32702.ntg-context@ntg.nl>
@ 2010-01-12 17:07 ` Vyatcheslav Yatskovsky
  2010-01-12 17:24   ` Aditya Mahajan
  0 siblings, 1 reply; 3+ messages in thread
From: Vyatcheslav Yatskovsky @ 2010-01-12 17:07 UTC (permalink / raw)
  To: ntg-context

Thanks for answers, friends!

I don't have ruby installed, so I try Mojca solution.

It works perfectly (thanks!), except I need to wrap the lyrics into the 
'lines' envinroment. To achieve this, I need to replace \setupwhitespace 
with \setupinterlinespace and adjust raisebox amount.

\starttext

\def\Ch#1{%

\strut\hbox to 0pt{\raisebox{0.45\baselineskip}\hbox{\bf#1}\hss}}

\setupinterlinespace[big]

\startlines

\Ch{E}Cvet dišeč z \Ch{H7}jutrom se od\Ch{cis}pre,

\Ch{A}sonce od\Ch{E}pira o\Ch{H}či.

\Ch{E}Polje z vetrom v \Ch{H7}plesu ziblje \Ch{cis}se.

Gos\Ch{E}pod, pov\Ch{H}sod vidim \Ch{E}Te.

\stoplines

\stoptext


What do you mean talking about optimization? )


Regards,
Vyatcheslav
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ntg-context Digest, Vol 67, Issue 18
  2010-01-12 17:07 ` ntg-context Digest, Vol 67, Issue 18 Vyatcheslav Yatskovsky
@ 2010-01-12 17:24   ` Aditya Mahajan
  2010-01-12 22:02     ` Wolfgang Schuster
  0 siblings, 1 reply; 3+ messages in thread
From: Aditya Mahajan @ 2010-01-12 17:24 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Tue, 12 Jan 2010, Vyatcheslav Yatskovsky wrote:

> Thanks for answers, friends!
>
> I don't have ruby installed, so I try Mojca solution.>

Wolfgang's module is for writing Ruby annotations 
(http://www.w3.org/TR/ruby), it is not require Ruby programming language.

From W3c's website:

Ruby text is usually presented alongside the base text, using a smaller 
typeface. The name "ruby" in fact originated from the name of the 5.5pt 
font size in British printing, which is about half the 10pt font size 
commonly used for normal text.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ntg-context Digest, Vol 67, Issue 18
  2010-01-12 17:24   ` Aditya Mahajan
@ 2010-01-12 22:02     ` Wolfgang Schuster
  0 siblings, 0 replies; 3+ messages in thread
From: Wolfgang Schuster @ 2010-01-12 22:02 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: position.tex --]
[-- Type: application/octet-stream, Size: 279 bytes --]

\usemodule[ruby]

\usetypescript[modern-base]
\setupbodyfont[modern-base]

\setupinterlinespace[line=3.6ex]

\starttext

\dorecurse{100}{a  b c d e f g h i \ruby{j}{text} k l m n o p q r s }
%\dorecurse{100}{a  b c d e f g h i \ruby{j}{text} k l m n o p q r s t u v }

\stoptext

[-- Attachment #3: t-ruby.tex --]
[-- Type: application/octet-stream, Size: 10085 bytes --]

%D \module
%D   [     file=t-ruby,
%D      version=2009.12.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

\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{\doattributes\????rb\c!basestyle\c!basecolor{\the\!!rubybase}}%
   \setbox\scratchboxtwo\hbox{\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}}

%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{\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributespace\@EA{\the\!!rubytext}}}%
   \else
     \setbox\scratchboxone\hbox to \scratchdimentwo{\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{\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubytext}}}%
   \else
     \setbox\scratchboxone\hbox to \scratchdimentwo{\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
      \box\scratchboxtwo
      \rubyparameter\c!inbetween
      \box\scratchboxone}}

\setvalue{\????rb:\c!position:\v!after}%
  {\setbox\scratchboxthree\vtop
     {\offinterlineskip
      \box\scratchboxone
      \rubyparameter\c!inbetween
      \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!inbetween={\blank[\v!small]},
   \c!textstyle=\txx]

\protect \endinput

[-- Attachment #4: chord.tex --]
[-- Type: application/octet-stream, Size: 490 bytes --]

\usemodule[ruby]

%\define[1]\chord{\bRUBY[position=after,align=left]\bRB\eRB\bRT#1\eRT\eRUBY}
\define[1]\chord{\dontleavehmode\ruby[position=after,align=left,inbetween={\blank[medium]}]{}{#1}}

\starttext

\startlines

\chord{E}Cvet dišeč z \chord{H7}jutrom se od\chord{cis}pre,

\chord{A}sonce od\chord{E}pira o\chord{H}či.

\chord{E}Polje z vetrom v \chord{H7}plesu ziblje \chord{cis}se.

Gos\chord{E}pod, pov\chord{H}sod vidim \chord{E}Te.

\stoplines

\stoptext

[-- Attachment #5: README --]
[-- Type: application/octet-stream, Size: 840 bytes --]

Modulename : t-ruby
Author     : Wolfgang Schuster
License    : Public Domain


Description
-----------

The 'ruby' module allows users to write ruby annotations in ConTeXt.


Usage
-----

The module is loaded with the command:

  \usemodule[ruby]

Ruby text can be set with the command:

  \ruby{base text}{ruy text}

The layout of the base and ruby text could be changed with:

  \setupruby
    [basestyle=...,
     basecolor=...,
     textstyle=...,
     textcolor=...]

Whether ruby text overlaps with the surrounding text or not can be configured with:

  \setupruby
    [overlap=yes|no] % default: yes

The last option is the distance between the ruby and the base text:

  \setupruby
    [inbetween=...] % default: \blank[small]

All of these parameters can also be changed for a single ruby command:

  \ruby[..,..=..,..]{...}{...}

[-- Attachment #6: Type: text/plain, Size: 601 bytes --]


Am 12.01.2010 um 18:24 schrieb Aditya Mahajan:

> On Tue, 12 Jan 2010, Vyatcheslav Yatskovsky wrote:
> 
>> Thanks for answers, friends!
>> 
>> I don't have ruby installed, so I try Mojca solution.>
> 
> Wolfgang's module is for writing Ruby annotations (http://www.w3.org/TR/ruby), it is not require Ruby programming language.


I attached my last version of the module with two test files to show
Vyatcheslav what Mojca meant with a optimized version of her code,
the module provides the same as she showed by hidden from the user
and customizable with different keys.

Wolfgang


[-- Attachment #7: Type: text/plain, Size: 486 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-01-12 22:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <mailman.0.1263294002.32702.ntg-context@ntg.nl>
2010-01-12 17:07 ` ntg-context Digest, Vol 67, Issue 18 Vyatcheslav Yatskovsky
2010-01-12 17:24   ` Aditya Mahajan
2010-01-12 22:02     ` Wolfgang Schuster

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).