\documentstyle[11pt]{article}
\title{Representation used by the {\tt noweb} tools}
\author{Norman Ramsey}
\date{October 1991}
\setcounter{secnumdepth}{0}

\makeatletter
\def\refno#1{\nocite{#1}\@ifundefined
       {b@#1}{{\bf ?}\@warning
       {Reference number `#1' on page \thepage \space undefined}}%
{\hbox{\csname b@#1\endcsname}}}
\makeatother

\def\remark#1{\marginpar{\raggedright\hbadness=10000\footnotesize\it #1}}
% \def\remark#1{\relax}

\begin{document}

%\maketitle
\section{Representation used by the {\tt noweb} tools}

{\tt Markup} converts a file from the human syntax to the format used
by the {\tt noweb} tools, and
{\tt unmarkup} is its inverse.
This document is not  complete by itself, but should
 provide enough information so programmers can examine the
output of {\tt markup} and write tools that manipulate that output.
Study of the existing tools, especially {\tt nountangle} and {\tt
unmarkup}, is recommended.

Every line begins with {\tt @} and a key word.
The possible lines are:
\begin{quote}
\begin{tabular}{ll}
\tt @begin {\it kind} $n$&Start a chunk\\
\tt @end {\it kind} $n$&End a chunk\\
\tt @text {\it string}&{\it string} appeared in a chunk\\
\tt @nl&A newline\\
\tt @defn {\it name}&The code chunk named {\it name} is being defined\\
\tt @use {\it name}&A reference to code chunk named {\it name}\\
\tt @quote&Start of quoted code in a documentation chunk\\
\tt @endquote&End of quoted code in a documentation chunk\\
\tt @file {\it filename}&Name of the file from which the chunks came\\
\tt @literal {\it text}&Used internally by {\tt noxref} and {\tt noweave}\\
\end{tabular}
\end{quote}

{\tt Markup} expands tabs on input (tab stops are every 8~columns).
It numbers each chunk, starting at~0.
It also recognizes and undoes all the appropriate escape sequences,
for example converting {\tt @<<} to {\tt <<}.

{\tt Markup}'s output is a sequence of files.
Each file is represented by a ``{\tt @file~{\it filename}}'' line,
followed by a sequence of chunks.

The representation of a documentation chunk is
\begin{quote}
\begin{tabular}{ll}
\tt @begin docs $n$&where $n$ is the chunk number.\\
{\it docline}&repeated an arbitrary number of times.\\
\tt @end docs $n$
\end{tabular}
\end{quote}
where {\it docline} may be {\tt @text}, {\tt @nl}, {\tt @quote}, or
{\tt @endquote}.
Every {\tt @nl} corresponds to the corresponding newline in the
human-readable form.
Quotes must be balanced and may not be nested.

The representation of a code chunk is
\begin{quote}
\begin{tabular}{ll}
\tt @begin code $n$&where $n$ is the chunk number.\\
\tt @defn {\it name}&name of this chunk.\\
\tt @nl&The newline following {\tt <<{\it name}>>=} in the original file\\
{\it codeline}&repeated an arbitrary number of times.\\
\tt @end code $n$
\end{tabular}
\end{quote}
where {\it codeline} may be {\tt @text}, {\tt @nl}, or {\tt @use}.

{\tt noxref} may add lines of the form
\begin{quote}
\tt @literal {\it text}
\end{quote}
These lines are used to pass literal {\LaTeX} code through the second
stage of {\tt noweave} without any alteration.

\end{document}
