\NeedsTeXFormat{LaTeX2e}[1994/11/04]
\ProvidesPackage{txnline} [2006/10/15 Technica]
%
% Most of the code in this package comes from version 3.10a of the
% package "lineno" by Stephan I. B\"ottcher. The current version of
% "lineno" is available on CTAN at tex-archive/macros/latex/contrib/lineno                   
%
% The package is NOT a replacement for "lineno": for one thing, it does
% not ever print a line number. 
%
% Copyright Gianfranco Boggio-Togna	2006
%
% This program may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version~1.2
% 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.2 or later is part of all distributions of LaTeX  
% version 1999/12/01 or later.
%
% This program consists of the file txnline.sty
%
\def \TXNl@linenopenalty  {-100000\relax}
\mathchardef \TXNl@linenopenaltypar = 32000

\newcount \TXNl@linenumber
\global \TXNl@linenumber	= \@ne

\newcount \TXNl@linenumber@par
\global \TXNl@linenumber@par	= \z@

\def \TXNl@lineate #1{%
  \ifx #1\relax
    \par
    \ifx \TXNl@UserProcessLine \@gobble
	\else
      \let \TXNl@UserProcessLine = \@gobble
      \TXNl@nolinenumbers 
	\fi
  \else
    \ifx \TXNl@UserProcessLine \@gobble
      \let \TXNl@UserProcessLine = #1\relax
      \TXNl@linenumbers 
	\fi
  \fi
}

\let \TXNl@output = \output
\newtoks \output
\output = \expandafter{\the\TXNl@output}

\TXNl@output = {%
  \TXNl@LineNoTest
  \if@tempswa
    \ifnum \holdinginserts = \thr@@
      \@tempswafalse
    \fi
    \if@tempswa
      \the\output
      \ifnum \holdinginserts = -\thr@@
        \global \holdinginserts = \thr@@
      \fi
    \else
      \global \holdinginserts = -\thr@@
      \unvbox \@cclv
      \ifnum \outputpenalty = \@M
      \else
        \penalty \outputpenalty
      \fi
    \fi
  \else  
    \TXNl@ProcessLine
  \fi
}

\def \TXNl@LineNoTest {%
  \let \@@par = \@@@par
  \ifnum \interlinepenalty < -\TXNl@linenopenaltypar
     \advance \interlinepenalty by -\TXNl@linenopenalty
     \TXNl@nobreaktrue
  \fi
  \@tempswatrue
  \ifnum \outputpenalty > -\TXNl@linenopenaltypar
  \else
    \ifnum \outputpenalty > -188000\relax
      \@tempswafalse
    \fi
  \fi
}

\def \TXNl@nobreaktrue {\let \if@nobreak = \iftrue}

\let \TXNl@UserProcessLine = \@gobble

\def \TXNl@ProcessLine {%
   \boxmaxdepth= \maxdimen
   \setbox \z@ = \vbox {\unvbox\@cclv}%
   \dimen@ = \dp\z@ 
   \global \advance \TXNl@linenumber@par by \@ne
   \count@ = \TXNl@linenumber@par
   \ifnum \outputpenalty = -\TXNl@linenopenaltypar
     \global \TXNl@linenumber@par = \z@
     \count@ = -\count@
   \fi
   \expandafter \TXNl@UserProcessLine \expandafter {\the\count@}%
   \global \advance \TXNl@linenumber	by \@ne
   \ifnum \outputpenalty = -\TXNl@linenopenaltypar
   \else
     \@tempcnta = \outputpenalty
     \advance \@tempcnta by -\TXNl@linenopenalty
     \penalty \@tempcnta
   \fi
}

\let \@@@par = \@@par

\def \TXNl@linenumberpar {%
  \ifvmode
    \@@@par
  \else
    \ifinner
      \@@@par
    \else
      \advance \interlinepenalty by \TXNl@linenopenalty
      \edef \TXNl@linenoprevgraf {\the\prevgraf}%
      \global \holdinginserts = \thr@@
      \@@@par
      \ifnum \TXNl@linenoprevgraf < \prevgraf
        \penalty  -\TXNl@linenopenaltypar
      \fi
      \kern \z@
      \global \holdinginserts =\z@
      \advance \interlinepenalty by -\TXNl@linenopenalty
    \fi
  \fi
}

\newif \ifTXNl@lineating
\newif \ifTXNl@waslineating

\def \TXNl@suspend {%
  \ifTXNl@lineating
	%\typeout{suspend \the\TXNl@linenumber}%
    \TXNl@waslineatingtrue
    \TXNl@nolinenumbers
  \fi
}
\def \TXNl@resume {%
  \ifTXNl@waslineating
	%\typeout{resume \the\TXNl@linenumber}%
    \TXNl@waslineatingfalse
    \TXNl@linenumbers
  \fi
}

\def \TXNl@linenumbers {%
  \let \@@par = \TXNl@linenumberpar
  \ifx \@par \@@@par
    \let \@par = \TXNl@linenumberpar
  \fi
  \ifx \par \@@@par
    \let \par = \TXNl@linenumberpar
  \fi
  \TXNl@lineatingtrue
}

\def\TXNl@nolinenumbers {%
  \let \@@par = \@@@par
  \ifx \@par \TXNl@linenumberpar
    \let \@par = \@@@par
  \fi
  \ifx \par \TXNl@linenumberpar
    \let \par = \@@@par
  \fi
  \TXNl@lineatingfalse
}
\advance \maxdeadcycles by 100

