From d6acd1a5bfa42cd6adc57bbcd6c06a58cbf01eb4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 25 Feb 2012 23:48:06 +0000 Subject: bezos (25feb12) git-svn-id: svn://tug.org/texlive/trunk@25507 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/bezos/soulpos.sty | 275 ++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/bezos/soulpos.sty (limited to 'Master/texmf-dist/tex/latex/bezos') diff --git a/Master/texmf-dist/tex/latex/bezos/soulpos.sty b/Master/texmf-dist/tex/latex/bezos/soulpos.sty new file mode 100644 index 00000000000..7035b7e6f4a --- /dev/null +++ b/Master/texmf-dist/tex/latex/bezos/soulpos.sty @@ -0,0 +1,275 @@ +% +--------------------------------------------------+ +% | Typeset soulpos.tex to get the documentation. | +% +--------------------------------------------------+ +% +%% Copyright (C) 2012 Javier Bezos +%% All Rights Reserved +%% http://www.tex-tipografia.com +%% +%% This work may be distributed and/or modified under the conditions +%% of the LaTeX Project Public License, either version 1.3 of this +%% license or (at your option) any later version. The latest version +%% of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% This Current Maintainer of this work is Javier Bezos. +%% +%% This work consists of the files soulpos.tex and soulpos.sty. + +\ProvidesPackage{soulpos}[2012/02/25 v1.0 Fancy underlining] + +\newcount\ulp@subcnt +\newcount\ulp@cnt + +\newwrite\ulp@out +\newread\ulp@in + +\AtBeginDocument{\ulp@begindoc} + +\def\ulp@begindoc{% + \@ifundefined{SOUL@}% + {\PackageInfo{soulpos}{Loading soulutf8}% + \RequirePackage{soulutf8}}{}% + \openout\ulp@out=\jobname.upa\relax + \openin\ulp@in=\jobname.upb\relax} + +\let\ulp@afterend\relax + +\AtEndDocument{% + \closeout\ulp@out + \closein\ulp@in + \write\@auxout{\string\ulp@afterend}% + \def\ulp@afterend{% + \ulp@cnt\z@ + \message{* soulpos - computing points - it may take a few seconds *}% + \immediate\openout\ulp@out=\jobname.upb\relax + \begingroup + \makeatletter + \InputIfFileExists{\jobname.upa}{}{}% + \endgroup + \immediate\closeout\ulp@out}} + +% Underlining options +% -------------------- + +\RequirePackage{keyval} + +\define@key{soulpos}{overdraw}[true]{\@nameuse{ulp@pos@#1}} +\def\ulp@pos@false{\def\ulp@pos{\z@}} +\def\ulp@pos@true{\def\ulp@pos{\@ne}} + +\newif\ifulp@includehyphens +\ulp@includehyphenstrue + +\define@key{soulpos}{hyphens}[include]{\@nameuse{ulp@hyp@#1}} +\def\ulp@hyp@include{\ulp@includehyphenstrue} +\def\ulp@hyp@exclude{\ulp@includehyphensfalse} + +\define@key{soulpos}{xoffset}[0pt]{\def\ulp@skern{#1}\def\ulp@ekern{#1}} +\define@key{soulpos}{xoffset-start}[0pt]{\def\ulp@skern{#1}} +\define@key{soulpos}{xoffset-end}[0pt]{\def\ulp@ekern{#1}} + +\define@key{soulpos}{gap}[0pt]{\def\ulp@sgap{#1}\def\ulp@egap{#1}} +\define@key{soulpos}{gap-start}[0pt]{\def\ulp@sgap{#1}} +\define@key{soulpos}{gap-end}[0pt]{\def\ulp@egap{#1}} + +% Computing start/end points +% --------------------------- + +\newcommand\ulpostolerance{0}% + +\let\ulp@Gb\relax +\def\ulp@Pb#1{\expandafter\gdef\csname ulp@@#1\endcsname} + +\def\ulp@writeb{% + \count@\ulp@xlast + \advance\count@-\ulp@xfirst + \immediate\write\ulp@out{% + \string\ulp@Pb{\ulp@ulsub}% + {{\the\count@}\ulp@startprev\ulp@endprev}\@percentchar}} + +\def\ulp@Ga#1#2{% + \advance\ulp@cnt\@ne + \def\ulp@pos{#1}% + \immediate\write\ulp@out{\string\ulp@Gb\string{\@percentchar\iffalse}\fi}% + #2% + \ulp@writeb + \immediate\write\ulp@out{\iffalse{\fi\string}\@percentchar}} + +\def\ulp@Pa#1#2#3#4{% + \@tempswafalse + \ifnum#2=\@ne + \@tempswatrue + \else + \count@\ulp@ylast\relax + \advance\count@-#4\relax + \ifnum\ulpostolerance<\count@ + \ulp@writeb + \@tempswatrue + \else\ifnum-\ulpostolerance>\count@ + \ulp@writeb + \@tempswatrue + \fi\fi + \fi + \if@tempswa + \def\ulp@xfirst{#3}% + \def\ulp@startprev{#1}% + \ifnum\ulp@pos=\z@ + \edef\ulp@ulsub{#2}% + \fi + \fi + \def\ulp@endprev{#1}% + \def\ulp@xlast{#3}% + \def\ulp@ylast{#4}% + \ifnum\ulp@pos=\@ne + \edef\ulp@ulsub{#2}% + \fi} + +% Writing points to .upa +% ---------------------- + +\def\ulp@stepput{\ulp@step\ulp@put} +\def\ulp@step{\global\advance\ulp@subcnt\@ne} + +% 0: text, 1: space, 2: discretionary, 3 exhyph + +\newdimen\ulwidth + +\def\ulp@fetch#1#2#3{% + \ulwidth#1sp\relax + \def\ulstarttype{#2}% + \def\ulendtype{#3}} + +\def\ulp@put#1{% + \hb@xt@\z@\bgroup + \ifcase\ulp@pos\else\hss\fi % over + \@ifundefined{ulp@@\the\ulp@subcnt}{}% + {\expandafter\expandafter\expandafter + \ulp@fetch\csname ulp@@\the\ulp@subcnt\endcsname + \ulp@draw + \global\expandafter\let\csname ulp@@\the\ulp@subcnt\endcsname\@undefined}% + \ifcase\ulp@pos\hss\fi % over + \pdfsavepos + \protected@write\ulp@out{}% + {\string\ulp@Pa\number#1{\the\ulp@subcnt}% + {\noexpand\the\pdflastxpos}{\noexpand\the\pdflastypos}% + \@percentchar}% + \egroup} + +% The command for defining underlines +% ------------------------------------ + +\def\ulp@preamble{% + \ifeof\ulp@in + \else + \begingroup + \makeatletter + \catcode`\^^M=9 % avoids extra \par's + \read\ulp@in to\@tempa + \@tempa + \endgroup + \fi + \global\advance\ulp@cnt\@ne + \ulp@subcnt\z@ + \ifdim\ulp@sgap>0pt % sacar también desde aquí + \ifdim\lastskip>5sp + \unskip + \hskip\ulp@sgap + \fi + \fi + \protected@write\ulp@out{}{% + \string\ulp@Ga\ulp@pos + \string{\@percentchar\iffalse}\fi}% + \SOUL@setkern{-\ulp@skern}% + \ulp@stepput\z@ + \SOUL@setkern\ulp@skern} + +\def\ulp@postamble{% + \SOUL@setkern\ulp@ekern + \ulp@stepput\z@ + \SOUL@setkern{-\ulp@ekern}% + \write\ulp@out{\iffalse{\fi\string}\@percentchar}% + \ifdim\ulp@egap>0pt + \global\skip@\ulp@egap + \aftergroup\SOUL@socheck + \fi}% + +\def\ulp@everyspace#1{% + \ulp@stepput\@ne + #1\space + \ulp@stepput\@ne}% + +\def\ulp@everyhyphen{% + \ifulp@includehyphens + \ulp@step + \else + \ulp@stepput\tw@ + \fi + \ulp@step + \discretionary + {\SOUL@setkern\SOUL@hyphkern + \SOUL@sethyphenchar + \global\advance\ulp@subcnt\m@ne + \ifulp@includehyphens + \ulp@put\tw@ + \fi + \ulp@step}% + {\ulp@put\tw@}% + {}}% + +\def\ulp@everyexhyphen#1{% + \SOUL@setkern\SOUL@hyphkern + \ifulp@includehyphens + \hbox{#1}% + \ulp@stepput\thr@@ + \else + \ulp@stepput\thr@@ + \hbox{#1}% + \fi + \ulp@step + \discretionary{}% + {\ulp@put\thr@@}% + {\SOUL@setkern\SOUL@charkern}}% + +\newcommand\ulposdef[1]{% + \@ifnextchar[{\ulp@def#1}{\ulp@def#1[]}} + +\def\ulp@def#1[#2]#3{ + \DeclareRobustCommand*#1{% + \def\SOUL@preamble{% + \def\ulp@skern{0pt}% + \def\ulp@ekern{0pt}% + \def\ulp@sgap{0pt}% + \def\ulp@egap{0pt}% + \def\ulp@pos{\z@}% + \setkeys{soulpos}{#2}% + \def\ulp@draw{#3}% + \ulp@preamble}% + \let\SOUL@postamble\ulp@postamble + \let\SOUL@everyspace\ulp@everyspace + \let\SOUL@everyhyphen\ulp@everyhyphen + \let\SOUL@everyexhyphen\ulp@everyexhyphen + \let\SOUL@everysyllable\@empty + \def\SOUL@everytoken{\the\SOUL@token}% + \SOUL@}} + +\newcommand\ifulstarttype[1]{% + \ifnum\ulstarttype=#1\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand\ifulendtype[1]{% + \ifnum\ulendtype=#1\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + + + -- cgit v1.2.3