% \iffalse
%% File: dnaseq.dtx Copyright (C) 2002 Bjoern Pedersen
%% mailto:Bjoern.Pedersen@ch.tum.de
%% This file may be distributed and used freely under 
%% the Latex Project Public License
%%
%
%<*dtx>
          \ProvidesFile{dnaseq.dtx}[2002/05/20 v0.01 dna sequence setter]
%</dtx>
%<dnaseq>\NeedsTeXFormat{LaTeX2e}
%<dnaseq>\ProvidesPackage{dnaseq}[2002/05/20 v0.01 dna sequence setter]
%<dnaseq>\RequirePackage{color}
%<driver>\ProvidesFile{dnaseq.drv}
% \fi
%\iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{dnaseq}
\begin{document}
\DocInput{dnaseq.dtx}
\end{document}
%</driver>
%\fi
% \GetFileInfo{dnaseq.dtx}
% \title{The \textsf{dnaseq} package\thanks{This file
%        has version number \fileversion, last
%        revised \filedate.}}
% \author{Bj{\o}rn Pedersen}
% \date{\filedate}
% \maketitle
% \CheckSum{154}
% 
%\section{Introduction}
%\label{sec:intro}

%This package allows easy setting of simple dna-sequences in
%userdefined grouping, with numbering of bases (at the begin of
%each line.
%
%If you need to typeset alignments, have a look at the
%\texttt{texshade}-Package.
%
% The main code has been posted by Andreas Matthias
% \texttt{<amat@kabsi.at>} on \texttt{de.comp.text.tex} and is based
% by itself on old code from Anselm Lingnau.
%\section{Usage}
%\label{sec:usage}
%
%\subsection{DNA}
%\DescribeMacro{\DNA}
%\verb|\DNA| is the main macro of this package. It is used as
%following:
%\begin{verbatim}
%\DNA! actctgctagtcgatgcat!
%\end{verbatim}
%where the delimiting character \verb|!| can be any normal character.
%
%Within the argument you can use \verb|'{<color>}| to change the color
%of your bases. The color names are normal color.sty names. 
%Look at the full example for more info.
%
%\subsection{Configuration}
%
%\DescribeMacro{\DNAblock}The macro \verb|\DNAblock| stores the desired blocking intervall of
%your sequence. Just do a \verb|\renewcommand{\DNAblock}{<some number>}|
%to change the default of 10.
%
%\DescribeMacro{\DNAreserve}The macro defines how much space to reserve
%for the numbering of bases. 
%To change, do a \verb|\renewcommand{\DNAreserve}{<template>}| The
%default template is \verb|0000| allowing for for digit numbering.
%
%\section{Example}
%\label{sec:ex}
%
%\begin{verbatim}
%\noindent\begin{minipage}{100pt}
%
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\noindent\begin{minipage}{200pt}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\noindent\begin{minipage}{\textwidth}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\renewcommand{\DNAblock}{5}
%\noindent\begin{minipage}{\textwidth}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%\end{verbatim}
%\noindent\begin{minipage}{100pt}
%
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\noindent\begin{minipage}{200pt}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\noindent\begin{minipage}{\textwidth}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\renewcommand{\DNAblock}{5}
%\noindent\begin{minipage}{\textwidth}
%\noindent\rule{\textwidth}{.5pt}
%\DNA!  ACGT'{red}A CGT'{white}TGCA'{green}x s df'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}TGCA'{green}x sdf '{white}FJKDSLAF
%DSAIOFDSA AC GT'{red}ACGT'{white}TG CA'{green}xsdf'{white}FJKD SLAF
%DSAIOFDSA ACGT'{red}ACGT'{white}T GCA'{green} xs df'{white}FJKDSLA
%FDSAIOFDSA ACGT'{red}AC GT'{white}TGCA'{green}xsdf'{white}FJK DSLA
%FDSAIOFDSA !
%\end{minipage}
%
%\StopEventually
%
%\section{The code}
%<*dnaseq>
%    \begin{macrocode}
\def\DNAblock{10}
\def\DNAreserve{0000}% für 4-stellige Zahlen
%%
%% registers /counters
%%
\newlength\bl@cklen
\newlength\l@neln
\newlength\t@mpln
\newlength\ch@rwd
\newcount{\blocks}
%%
%% calculate blocks per line
%% 
\def\DNAc@lcline{%
 \settowidth{\ch@rwd}{A}
 \setlength{\bl@cklen}{\DNAblock\ch@rwd}%
 \settowidth{\t@mpln}{\DNAreserve}
 \setlength{\l@neln}{\textwidth}
 \addtolength{\l@neln}{-\t@mpln}
 \loop%
    \setlength{\t@mpln}{\blocks\bl@cklen}
    \addtolength{\t@mpln}{\blocks\ch@rwd}
    \ifdim\l@neln>\t@mpln\advance\blocks by 1
 \repeat
 \advance\blocks by -1
 \ifnum\blocks<1\errmessage{line too short for 1 block^^J}%
 \else\expandafter\message\expandafter{Blocks per line: \the\blocks^^J}\fi%
}

%% main user macro
\def\DNA#1{%
   \def\@DNA@end{#1}\bgroup\ttfamily\DNAc@lcline
   \settoheight\dimen@{I}\advance\dimen@ by 1pt
   \edef\htst{\the\dimen@}%
   \def\struty{\rule[-.5pt]{\z@}{\htst}}%
   %% dnabase per line counter
   \count@=0
   %% block counter
   \@tempcnta=0
   %% total dnabase counter
   \@tempcntb=0
   \fboxrule=0pt \fboxsep=0pt
   \noindent\phantom{\DNAreserve}\llap 1\
   \@DNA
}

\def\@DNA@color{'}
\def\@DNA@thecolor{white}
\def\@DNA@setcolor#1{\def\@DNA@thecolor{#1}\@DNA}
%% do the blocking/line breaking
\def\@DNA#1{%
%% insert a space after \DNAblock bases
   \ifnum\count@=\DNAblock\count@=0\ %
   \advance\@tempcnta by 1\fi
   \def\@DNA@cmp{#1}%
%% check for end of sequence or color shift
   \ifx\@DNA@cmp\@DNA@end
     \let\next\egroup
   \else
     \ifx\@DNA@cmp\@DNA@color
       \let\next\@DNA@setcolor
     \else
       \advance\count@ by 1
       \advance\@tempcntb by 1
%% line break after calculated number of blocks
       \ifnum\@tempcnta=\blocks \\
         \hskip\z@\phantom{\DNAreserve}\llap {\the\@tempcntb}\ %
         \@tempcnta=0
       \fi
       \colorbox{\@DNA@thecolor}{\struty#1}%
       \penalty0\let\next\@DNA
     \fi
   \fi
   \next
}
%    \end{macrocode}
%</dnaseq>
% \Finale
