-#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.1 created this file. For more info see http://www.lyx.org/
+\lyxformat 474
\begin_document
\begin_header
-\use_default_options false
-\textclass literate-article
+\textclass article
\begin_preamble
%
% This relaxes the noweb constraint that chunks are
\def\nwendcode{\endtrivlist \endgroup}
\let\nwdocspar=\smallbreak
\end_preamble
+\use_default_options false
+\begin_modules
+noweb
+\end_modules
+\maintain_unincluded_children false
\language english
+\language_package default
\inputencoding default
+\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
+\font_math auto
\font_default_family default
+\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100
\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
-\use_amsmath 0
-\use_esint 0
+\use_package amsmath 0
+\use_package amssymb 0
+\use_package cancel 0
+\use_package esint 0
+\use_package mathdots 1
+\use_package mathtools 0
+\use_package mhchem 1
+\use_package stackrel 0
+\use_package stmaryrd 0
+\use_package undertilde 0
\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
\use_bibtopic false
+\use_indices false
\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
-\author ""
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
\end_header
\begin_body
file to LyX.
\end_layout
-\begin_layout Scrap
-<<noweb2lyx.in>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+noweb2lyx.in
+\end_layout
+
\end_inset
#!@PERL@
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
#
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# Copyright (C) 1999 Kayvan A.
Sylvan <kayvan@sylvan.com>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# You are free to use and modify this code under the terms of
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# the GNU General Public Licence version 2 or later.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
#
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# Written with assistance from:
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# Edmar Wienskoski Jr.
<edmar-w-jr@technologist.com>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# Amir Karger <karger@post.harvard.edu>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
#
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# $Id: noweb2lyx.lyx,v 1.5 2005/07/18 09:42:27 jamatos Exp $
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
#
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# NOTE: This file was automatically generated from noweb2lyx.lyx using noweb.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
#
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Setup variables from user supplied args>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Subroutines>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Convert noweb to LyX>>
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Section
\begin_layout LyX-Code
@ Here is some documentation.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
We can do arbitrary LaTeX code here.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
[...
blah blah blah ...]
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
Code chunks look like this:
\end_layout
\begin_layout Standard
Once reLyX is done with the input file, the problem is reduced to changing
- the code chunks from LyX's LaTeX layout to the Scrap layout.
+ the code chunks from LyX's LaTeX layout to the Chunk layout.
\end_layout
\begin_layout Standard
outline for our code:
\end_layout
-\begin_layout Scrap
-<<Convert noweb to LyX>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Convert noweb to LyX
+\end_layout
+
\end_inset
if (!$post_only) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Transform noweb for reLyX>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if ((!$pre_only) && (!$post_only)) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Run reLyX on intermediate file>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if (!$pre_only) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Fix up LyX file>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Clean up>>
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Section
This algorithm is outlined in the code that follows:
\end_layout
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
<<Transform noweb for reLyX>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Setup INPUT and OUTPUT>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
inputline: while(<INPUT>)
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
{
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if (/^
\backslash
\backslash
>
\backslash
->=/) { # Beginning of a noweb scrap
-\begin_inset Newline newline
-\end_inset
+>=/) { # Beginning of a noweb chunk
+\end_layout
+
+\begin_layout Plain Layout
<<Read in and output the noweb code chunk>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} elsif (/^@
\backslash
s+(.*)/) { # Beginning of a documentation chunk
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT $1; # We do not need the ``@'' part
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} elsif (/
\backslash
]
\backslash
]/) { # noweb quoted code
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Perform special input quoting of [[var]]>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} else {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT; # Just let the line pass through
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
+
+<<Close INPUT and OUTPUT>>
+\end_layout
+
+\end_inset
-<<Close INPUT and OUTPUT>>
-\begin_inset Newline newline
-\end_inset
-@
\end_layout
\begin_layout Standard
constructs.
\end_layout
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
<<Perform special input quoting of [[var]]>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
s/
\backslash
[.+?
\backslash
]{2,}/{$&}/g;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
While reading in the
\family roman
code chunk, we transform it into a form that is usable by reLyX.
\end_layout
-\begin_layout Scrap
-<<Read in and output the noweb code chunk>>=
-\begin_inset Newline newline
-\end_inset
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
-<<Save the beginning of the scrap to savedScrap>>
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Read in and output the noweb code chunk
+\end_layout
-<<Concatenate the rest of the scrap>>
-\begin_inset Newline newline
\end_inset
-<<print out the scrap in a reLyXskip block>>
-\begin_inset Newline newline
+<<Save the beginning of the chunk to savedchunk>>
+\end_layout
+
+\begin_layout Plain Layout
+
+<<Concatenate the rest of the chunk>>
+\end_layout
+
+\begin_layout Plain Layout
+
+<<print out the chunk in a reLyXskip block>>
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Subsection
no need to create a temporary file.
\end_layout
-\begin_layout Scrap
-<<Setup INPUT and OUTPUT>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Setup INPUT and OUTPUT
+\end_layout
+
\end_inset
if ($pre_only) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&setup_files($input_file, $output_file);
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} else {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$relyx_file = "temp$$";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&setup_files($input_file, $relyx_file);
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Standard
, which we define below:
\end_layout
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
<<Subroutines>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
sub setup_files {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
my($in, $out) = @_;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
open(INPUT, "<$in") || die "Cannot read $in: $!
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
open(OUTPUT, ">$out") || die "Cannot write $out: $!
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
+\end_layout
+
+\begin_layout Plain Layout
+
+@ %def setup_files
+\end_layout
+
\end_inset
-@ %def setup_files
+
\end_layout
\begin_layout Subsection
\noun on
noweb
\noun default
- scrap
+ chunk
\end_layout
\begin_layout Standard
-After we see the beginning of the scrap, we need to read in and save the
- rest of the scrap for output.
+After we see the beginning of the chunk, we need to read in and save the
+ rest of the chunk for output.
\end_layout
-\begin_layout Scrap
-<<Save the beginning of the scrap to savedScrap>>=
-\begin_inset Newline newline
-\end_inset
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Save the beginning of the chunk to savedchunk
+\end_layout
-$savedScrap = $_;
-\begin_inset Newline newline
\end_inset
+$savedchunk = $_;
+\end_layout
+
+\begin_layout Plain Layout
+
$endLine = "";
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
-\begin_layout Scrap
-<<Concatenate the rest of the scrap>>=
-\begin_inset Newline newline
-\end_inset
+\begin_layout Standard
+\begin_inset ERT
+status open
-scrapline: while (<INPUT>) {
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+<<Concatenate the rest of the chunk>>=
+\end_layout
+
+\begin_layout Plain Layout
+
+chunkline: while (<INPUT>) {
+\end_layout
+
+\begin_layout Plain Layout
- last scrapline if /^@
+ last chunkline if /^@
\backslash
s+/;
-\begin_inset Newline newline
-\end_inset
+\end_layout
- $savedScrap .= $_;
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+ $savedchunk .= $_;
+\end_layout
+
+\begin_layout Plain Layout
};
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
switch: {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
- if (/^@
+ if (/^@
\backslash
-s+$/) {$savedScrap .= $_; last switch; }
-\begin_inset Newline newline
-\end_inset
+s+$/) {$savedchunk .= $_; last switch; }
+\end_layout
- if (/^@
+\begin_layout Plain Layout
+
+ if (/^@
\backslash
-s+%def.*$/) {$savedScrap .= $_; last switch; }
-\begin_inset Newline newline
-\end_inset
+s+%def.*$/) {$savedchunk .= $_; last switch; }
+\end_layout
+
+\begin_layout Plain Layout
- if (/^@
+ if (/^@
\backslash
-s+(.*)$/) {$savedScrap .= "@
+s+(.*)$/) {$savedchunk .= "@
\backslash
n"; $endLine = "$1
\backslash
n"; }
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Subsection
-Printing out the scrap
+Printing out the chunk
\end_layout
\begin_layout Standard
The final piece of the first pass of the conversion is done by this code.
\end_layout
-\begin_layout Scrap
-<<print out the scrap in a reLyXskip block>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+print out the chunk in a reLyXskip block
+\end_layout
+
\end_inset
print OUTPUT "
begin{reLyXskip}
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
-print OUTPUT $savedScrap;
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+print OUTPUT $savedchunk;
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT "
\backslash
n
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT "$endLine";
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Standard
files.
\end_layout
-\begin_layout Scrap
-<<Close INPUT and OUTPUT>>=
-\begin_inset Newline newline
-\end_inset
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
-close(INPUT);
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
-close(OUTPUT);
-\begin_inset Newline newline
-\end_inset
+\begin_inset Argument 1
+status open
-@
+\begin_layout Plain Layout
+Close INPUT and OUTPUT
\end_layout
-\begin_layout Section
-Running reLyX
+\end_inset
+
+close(INPUT);
+\end_layout
+
+\begin_layout Plain Layout
+
+close(OUTPUT);
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Running reLyX
\end_layout
\begin_layout Standard
For this, we need to parse the intermediate file.
\end_layout
-\begin_layout Scrap
-<<Run reLyX on intermediate file>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Run reLyX on intermediate file
+\end_layout
+
\end_inset
<<Parse for document class>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Run reLyX with document class>>
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Standard
on itself and a produce a quite reasonable LyX file.
\end_layout
-\begin_layout Scrap
-<<Parse for document class>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Parse for document class
+\end_layout
+
\end_inset
open(INPUT, "<$relyx_file") ||
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
die "Cannot read $relyx_file: $!
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$class = "article"; # default if none found
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
parse: while(<INPUT>) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if (/
\backslash
\backslash
docu[m]entclass{(.*)}/) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$class = $1;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
last parse;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
close(INPUT);
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Subsection
Now that we know what the document class ought to be, we do:
\end_layout
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
<<Run reLyX with document class>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$doc_class = "literate-" .
$class;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
die "reLyX returned non-zero: $!
\backslash
n"
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if (system("reLyX -c $doc_class $relyx_file"));
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
reLyX performs the main bulk of the translation work.
Note that if the ``literate-
The outline of the post-processing steps are:
\end_layout
-\begin_layout Scrap
-<<Fix up LyX file>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Fix up LyX file
+\end_layout
+
\end_inset
<<Setup INPUT and OUTPUT for the final output>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
line: while(<INPUT>)
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
{
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Fix code chunks in latex layout>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Fix [[var]] noweb construct>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT; # default
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
<<Close INPUT and OUTPUT>>
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Standard
is taken care of by this code:
\end_layout
-\begin_layout Scrap
-<<Setup INPUT and OUTPUT for the final output>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Setup INPUT and OUTPUT for the final output
+\end_layout
+
\end_inset
if ($post_only) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&setup_files("$input_file", "$output_file");
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} else {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&setup_files("$relyx_file.lyx", "$output_file");
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Subsection
-Making sure the code chunks are in the Scrap layout
+Making sure the code chunks are in the Chunk layout
\end_layout
\begin_layout Standard
Now, as we outlined before, the final step is transforming the code-chunks
- which have been put into a LaTeX layout by LyX into the scrap layout.
+ which have been put into a LaTeX layout by LyX into the Chunk layout.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Fix code chunks in latex layout
\end_layout
-\begin_layout Scrap
-<<Fix code chunks in latex layout>>=
-\begin_inset Newline newline
\end_inset
if (/
\backslash
latex latex/) { # Beginning of some latex code
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if (($line = <INPUT>) =~ /^
\backslash
-s*<</) { # code scrap
-\begin_inset Newline newline
-\end_inset
+s*<</) { # code chunk
+\end_layout
- <<Transform this chunk into layout scrap>>
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+ <<Transform this chunk into layout chunk>>
+\end_layout
+
+\begin_layout Plain Layout
} else {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
# print the
\backslash
latex latex line + next line
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT "$_$line";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
next line;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
+
+}
+\end_layout
+
+\end_inset
-}
-\begin_inset Newline newline
-\end_inset
-@
\end_layout
\begin_layout Standard
When we are sure that we are in a code chunk, we must read in the rest of
- the code chunk and output a scrap layout for it:
+ the code chunk and output a chunk layout for it:
\end_layout
-\begin_layout Scrap
-<<Transform this chunk into layout scrap>>=
-\begin_inset Newline newline
-\end_inset
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+<<Transform this chunk into layout chunk>>=
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
-$savedScrap = "
+\begin_layout Plain Layout
+
+$savedchunk = "
\backslash
\backslash
-layout Scrap
+layout Chunk
\backslash
n
\backslash
n$line";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
codeline: while (<INPUT>) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
- $savedScrap .= $_;
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+ $savedchunk .= $_;
+\end_layout
- last codeline if /^@
+\begin_layout Plain Layout
+
+ last codeline if /^@
\backslash
s+/;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
};
-\begin_inset Newline newline
-\end_inset
+\end_layout
-print OUTPUT $savedScrap;
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+print OUTPUT $savedchunk;
+\end_layout
+
+\begin_layout Plain Layout
<<Slurp up to the end of the latex layout>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
Okay, now we just need to eat the rest of the latex layout.
There should only be a few different types of lines for us to match:
\end_layout
-\begin_layout Scrap
-<<Slurp up to the end of the latex layout>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Slurp up to the end of the latex layout
+\end_layout
+
\end_inset
slurp: while (<INPUT>) {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
last slurp if /
\backslash
\backslash
latex /;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
next slurp if /
\backslash
\backslash
newline/;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
next slurp if /^
\backslash
s*$/;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
warn "confused by line: $_";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Subsection
when it generates the final LaTeX code.
\end_layout
-\begin_layout Scrap
-<<Fix [[var]] noweb construct>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Fix [[var]] noweb construct
+\end_layout
+
\end_inset
if (/
]
\backslash
]/) { # special code for [[var]]
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
s/
\backslash
latex default
\backslash
n/g;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print OUTPUT;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
next line;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Section
The cleanup code is very simple:
\end_layout
-\begin_layout Scrap
-<<Clean up>>=
-\begin_inset Newline newline
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Clean up
+\end_layout
+
\end_inset
system("rm -f $relyx_file*") unless ($post_only || $pre_only);
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Section
files in the import pipeline.
\end_layout
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
<<Setup variables from user supplied args>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&usage() if ($#ARGV < 1); # zero or one argument
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
if ($ARGV[0] eq "-pre") {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&usage unless ($#ARGV == 2);
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} elsif ($ARGV[0] eq "-post") {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&usage unless ($#ARGV == 2);
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
} else {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
&usage unless ($#ARGV == 1);
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$input_file = $ARGV[0]; $output_file = $ARGV[1];
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
$pre_only = 0; $post_only = 0;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@ %def input_file output_file pre_only post_only
\end_layout
-\begin_layout Scrap
+\begin_layout Plain Layout
+
<<Subroutines>>=
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
sub usage() {
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
print "Usage: noweb2lyx [-pre | -post] input-file output-file
-\begin_inset Newline newline
-\end_inset
+\end_layout
+\begin_layout Plain Layout
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
If -pre is specified, only pre-processes the input-file for reLyX.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
Similarly, in the case of -post, post-processes reLyX output.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
In case of bugs, Email Kayvan Sylvan <kayvan
\backslash
@sylvan.com>.
\backslash
n";
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
exit;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
}
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
@ %def usage
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Section
Generating the
\noun on
\backslash
build_command
\family default
- to call a generic script that always extracts a scrap named
+ to call a generic script that always extracts a chunk named
\family typewriter
build-script
\family default
\begin_inset Newline newline
\end_inset
-notangle -Rbuild-script $1 | sh
+notangle -Rbuild-script $1 | env NOWEB_SOURCE=$1 NOWEB_OUTPUT_DIR=$2 sh
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+build-script
\end_layout
-\begin_layout Scrap
-<<build-script>>=
-\begin_inset Newline newline
\end_inset
PREFIX=/usr
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
notangle -Rnoweb2lyx.in noweb2lyx.nw > noweb2lyx.in
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
sed -e "s=@PERL@=$PREFIX/bin/perl=" noweb2lyx.in > noweb2lyx
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
chmod +x noweb2lyx
-\begin_inset Newline newline
+\end_layout
+
\end_inset
-@
+
\end_layout
\begin_layout Standard