%D \module %D [ file=t-lettri, %D version=2009.01.20, %D title=\CONTEXT\ Lettrines, %D subtitle=Funny stuff, %D author=Taco Hoekwater, %D date=\currentdate, %D copyright=Public Domain] %C %C Donated to the public domain. %D This is just a quick and dirty conversion of the LaTeX package %D %D \ProvidesFile{lettrine.sty}[2004/05/22 v1.6 (D. Flipo)] %D %D Errors are likely mine, credit is due to Daniel.Flipo@univ-lille1.fr %D %D If enough people like it, I may even clean this mess up sometime. The %D current version is just a (c)rude conversion of the low-level LaTeX %D stuff to sometimes even lower-level ConTeXt. %D %D Changes: %D 2005.08.29: support use within \startframedtext ..\stop %D 2006.01.27: support use within \startnarrower..\stop %D 2009.01.20: fix indentation after indented dropcaps \unprotect \newbox\Lettrinelbox \newbox\Lettrinetbox \newcount\Lettrinelines \newdimen\LettrineHeight \newdimen\Lettrinefirst \newdimen\Lettrinenext \newdimen\Lettrineraise \newdimen\Lettrinepindent \newdimen\Lettrinefindent \newdimen\Lettrinenindent \getparameters[LettrineDefault] [Lines=2, Hang=0, Oversize=0, Raise=0, Findent=0pt, Nindent=0.5em, Slope=0pt, Ante=, FontHook=, TextFont=\sc, Image=\v!no] \def\setuplettrine{\dodoubleempty\dosetuplettrine} \def\dosetuplettrine[#1][#2]{% \doifassignmentelse{#1}{% \dodosetuplettrine[][#1]% }{% \def\ascii{}% \doifsomething{#1}{\convertargument#1\to\ascii }% \expandafter\dodosetuplettrine\expandafter[\ascii][#2]% }% } \def\dodosetuplettrine[#1][#2]{% \getparameters[LettrineDefault#1][#2] } \def\doLettrineHeight{% \LettrineHeight =\Lettrinelines\baselineskip\relax \ifnum\Lettrinelines>1 \advance\LettrineHeight -\baselineskip \fi \setbox\Lettrinetbox\hbox{{\LettrineTextFont x}}% \LettrineHeight = \dimexpr \LettrineHeight+ \ht\Lettrinetbox + \LettrineOversize\LettrineHeight \relax } \def\doLettrineEPS#1{% \doLettrineHeight\LettrineFontHook \externalfigure[#1][\c!height=\LettrineHeight]} \def\doLettrineFont{% \doLettrineHeight \definefontsynonym[LettrineFont][Serif]% \setbox\Lettrinetbox=\hbox{{\LettrineFontHook \definedfont[LettrineFont at \the\LettrineHeight] X}}% \scratchcounter = \numexpr (100*\LettrineHeight)/(\ht\Lettrinetbox/100) - 9999\relax \ifnum\scratchcounter>0 \def\tempa{1.\the\scratchcounter}% \else \def\tempa{1}% \fi \LettrineFontHook \!!dimena = \tempa\LettrineHeight \definedfont[LettrineFont at \the\!!dimena]% }% \def\lettrine{\dosingleempty\dolettrine} \def\dolettrine[#1]#2#3{% \convertargument#2\to\ascii \def\lettrgetparam##1{% \ifcsname LettrineDefault\ascii##1\endcsname \setevalue{Lettrine##1}{\csname LettrineDefault\ascii##1\endcsname}% \else \setevalue{Lettrine##1}{\csname LettrineDefault##1\endcsname}% \fi}% \processcommalist [Lines,Hang,Oversize,Raise,Findent,Nindent,Slope,Ante,FontHook,TextFont,Image]\lettrgetparam \getparameters[Lettrine][#1]% \Lettrinenindent=\LettrineNindent\relax \Lettrinefindent=\LettrineFindent\relax \Lettrinelines =\LettrineLines\relax \setbox\Lettrinelbox\hbox{{\ifx\LettrineImage\v!yes\doLettrineEPS{#2}\else \ifx\LettrineImage\v!true\doLettrineEPS{#2}\else \doLettrineFont #2\fi\fi}}% \setbox\Lettrinetbox\hbox{{\LettrineTextFont{#3}}}% \ifnum\Lettrinelines=1 \Lettrinefirst = \dimexpr \ht\Lettrinelbox-\ht\Lettrinetbox \relax \Lettrineraise=0pt \else \setbox\scratchbox\hbox{{\LettrineTextFont x}}% \Lettrinefirst = \dimexpr -\Lettrinelines\baselineskip + \baselineskip -\ht\scratchbox \relax \Lettrineraise = \dimexpr\LettrineRaise\Lettrinefirst \relax \Lettrineraise = -\Lettrineraise \relax \Lettrinefirst = \dimexpr\Lettrinefirst+\Lettrineraise+\ht\Lettrinelbox \relax \Lettrineraise = \dimexpr\Lettrineraise-\Lettrinelines\baselineskip +\baselineskip \relax \fi \par \ifdim\Lettrinefirst>0.2pt\vskip\Lettrinefirst\fi \setbox\scratchbox= \hbox{\LettrineAnte}% \setlocalhsize \Lettrinepindent= \dimexpr \wd\Lettrinelbox -\LettrineHang\wd\Lettrinelbox + \wd\scratchbox + \Lettrinefindent \relax \Lettrinefirst=\dimexpr \localhsize -\Lettrinepindent +\rightskip+\leftskip\relax \advance\Lettrinenindent \Lettrinepindent \Lettrinenext=\dimexpr \localhsize -\Lettrinenindent +\rightskip+\leftskip\relax \def\Lparshape{\the\numexpr\Lettrinelines+1\relax\space \the\Lettrinepindent\space \the\Lettrinefirst}% \dorecurse{\numexpr \Lettrinelines - 1 \relax}{% \edef\Lparshape{\Lparshape\space \the\Lettrinenindent\space \the\Lettrinenext}% \advance\Lettrinenindent\LettrineSlope \advance\Lettrinenext -\LettrineSlope }% \edef\Lparshape{\Lparshape\space 0pt\space \the\localhsize}% \setbox\scratchbox = \hbox{\hbox{\LettrineAnte}\raise \Lettrineraise \hbox{\box\Lettrinelbox }}% \scratchdimen = \dimexpr \dp\scratchbox + \ht\strutbox + 1pt\relax \vskip\scratchdimen \penalty0\vskip-\scratchdimen \noindent \scratchdimen = \leftskip \leftskip=\scratchdimen \scratchdimen = \rightskip \rightskip=\scratchdimen \parshape=\Lparshape \smash{\llap{\box\scratchbox \hskip \the\Lettrinefindent}}% \box\Lettrinetbox } \protect \endinput