-#This file was created by <kayvan> Sun May 2 15:56:35 1999
-#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
-\lyxformat 2.15
-\textclass literate-article
+#LyX 2.2 created this file. For more info see http://www.lyx.org/
+\lyxformat 503
+\begin_document
+\begin_header
+\origin /systemlyxdir/examples/
+\textclass article
\begin_preamble
%
% This relaxes the noweb constraint that chunks are
\def\nwendcode{\endtrivlist \endgroup}
\let\nwdocspar=\smallbreak
\end_preamble
-\language default
+\use_default_options false
+\begin_modules
+noweb
+\end_modules
+\maintain_unincluded_children false
+\language english
+\language_package default
\inputencoding default
-\fontscheme default
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
\paperfontsize default
-\spacing single
-\papersize Default
-\paperpackage a4
-\use_geometry 0
-\use_amsmath 0
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\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
-\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
-\layout Title
+\begin_body
+\begin_layout Title
-\noun on
+\noun on
noweb2lyx
-\layout Author
+\end_layout
+\begin_layout Author
Kayvan A.
Sylvan <kayvan@sylvan.com>
-\layout Date
+\end_layout
+\begin_layout Date
May 6, 1999
-\layout Abstract
+\end_layout
+\begin_layout Abstract
This document describes and implements a perl script for importing noweb
- files into LyX
-\layout Standard
-\pagebreak_bottom
+ files into \SpecialCharNoPassThru LyX
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset toc
+LatexCommand tableofcontents
+
+\end_inset
-\begin_inset LatexCommand \tableofcontents{}
-\end_inset
+\end_layout
+\begin_layout Standard
+\begin_inset Newpage newpage
+\end_inset
-\layout Section
+\end_layout
+
+\begin_layout Section
Introduction
-\layout Standard
+\end_layout
-Since version 1.0.1, LyX now supports Literate Programming using
-\noun on
+\begin_layout Standard
+Since version 1.0.1, \SpecialCharNoPassThru LyX
+ now supports Literate Programming using
+\noun on
noweb
-\noun default
+\noun default
.
- This addition to LyX made it very pleasant to write programs in the literate
+ This addition to \SpecialCharNoPassThru LyX
+ made it very pleasant to write programs in the literate
style (like this one).
In addition to being able to write new literate programs, it would be quite
useful if old
-\noun on
+\noun on
noweb
-\noun default
- code could be imported into LyX in some fashion.
+\noun default
+ code could be imported into \SpecialCharNoPassThru LyX
+ in some fashion.
That's where this program comes in.
-\layout Standard
+\end_layout
+\begin_layout Standard
The purpose of
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
is to convert a
-\noun on
+\noun on
noweb
-\noun default
- file to LyX.
-\layout Scrap
+\noun default
+ file to \SpecialCharNoPassThru LyX
+.
+\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
+noweb2lyx.in
+\end_layout
+
+\end_inset
-<<noweb2lyx.in>>=
-\newline
#!@PERL@
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
#
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
# Copyright (C) 1999 Kayvan A.
Sylvan <kayvan@sylvan.com>
-\newline
-#
-\protected_separator
-You are free to use and modify this code under the terms of
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+# You are free to use and modify this code under the terms of
+\end_layout
+
+\begin_layout Plain Layout
+
# the GNU General Public Licence version 2 or later.
-\newline
-#
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
#
-\protected_separator
-Written with assistance from:
-\newline
-#
-\protected_separator
- Edmar Wienskoski Jr.
+\end_layout
+
+\begin_layout Plain Layout
+
+# Written with assistance from:
+\end_layout
+
+\begin_layout Plain Layout
+
+# Edmar Wienskoski Jr.
<edmar-w-jr@technologist.com>
-\newline
-#
-\protected_separator
- Amir Karger <karger@post.harvard.edu>
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+# Amir Karger <karger@post.harvard.edu>
+\end_layout
+
+\begin_layout Plain Layout
+
#
-\newline
-# $Id: noweb2lyx.lyx,v 1.1 1999/09/27 18:44:32 larsbj Exp $
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+# $Id: noweb2lyx.lyx,v 1.5 2005/07/18 09:42:27 jamatos Exp $
+\end_layout
+
+\begin_layout Plain Layout
+
#
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
# NOTE: This file was automatically generated from noweb2lyx.lyx using noweb.
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
#
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
<<Setup variables from user supplied args>>
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
<<Subroutines>>
-\newline
-<<Convert noweb to LyX>>
-\newline
-@
-\layout Section
+\end_layout
+
+\begin_layout Plain Layout
+<<Convert noweb to \SpecialCharNoPassThru LyX
+>>
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
The Noweb file defined
-\layout Standard
+\end_layout
+\begin_layout Standard
A
-\noun on
+\noun on
noweb
-\noun default
+\noun default
file is a collection of documentation and code chunks.
Documentation chunks simply start with an ``@'' and have no name:
-\layout LyX-Code
+\end_layout
+\begin_layout LyX-Code
@ Here is some documentation.
-\newline
-We can do arbitrary LaTeX code here.
-\newline
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+We can do arbitrary \SpecialCharNoPassThru LaTeX
+ code here.
+\end_layout
+
+\begin_layout Plain Layout
+
[...
blah blah blah ...]
-\layout Standard
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
Code chunks look like this:
-\layout LyX-Code
+\end_layout
+
+\begin_layout LyX-Code
+<
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+{}
+\end_layout
+
+\end_inset
+
+<Name of chunk here>
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+{}
+\end_layout
+
+\end_inset
+
+>=
+\begin_inset Newline newline
+\end_inset
-<<Name of chunk here>>=
-\newline
{...
code for the chunk goes here ...}
-\newline
+\begin_inset Newline newline
+\end_inset
+
@
-\layout Standard
+\end_layout
+\begin_layout Standard
The ``@'' is a necessary delimiter to end the code chunk.
The other form that the ``@'' line takes is as follows:
-\layout LyX-Code
+\end_layout
+
+\begin_layout LyX-Code
+<
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+{}
+\end_layout
+
+\end_inset
+
+<Name of chunk here>
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+{}
+\end_layout
+
+\end_inset
+
+>=
+\begin_inset Newline newline
+\end_inset
-<<Name of chunk here>>=
-\newline
{...
code for the chunk ...}
-\newline
+\begin_inset Newline newline
+\end_inset
+
@ %def identifier1 identifier2
-\layout Standard
+\end_layout
+\begin_layout Standard
In the latter form, we are declaring to
-\noun on
+\noun on
noweb
-\noun default
+\noun default
that this code chunk defines identifier1, identifier2, etc.
-\layout Standard
-
-When first tackling this problem, I spoke with members of the LyX team that
- knew about the literate programming extensions and reLyX (the LaTeX importing
+\end_layout
+
+\begin_layout Standard
+When first tackling this problem, I spoke with members of the \SpecialCharNoPassThru LyX
+ team that
+ knew about the literate programming extensions and re\SpecialCharNoPassThru LyX
+ (the \SpecialCharNoPassThru LaTeX
+ importing
code).
-\layout Standard
+\end_layout
-One of the first ideas was to extend the reLyX code to understand the
-\noun on
+\begin_layout Standard
+One of the first ideas was to extend the re\SpecialCharNoPassThru LyX
+ code to understand the
+\noun on
noweb
-\noun default
+\noun default
code chunks.
This proved to be too hard and presents other problems
-\begin_float footnote
-\layout Standard
+\begin_inset Foot
+status collapsed
+\begin_layout Plain Layout
Not the least of these problems is the fact that << is a quote in French.
-\end_float
+\end_layout
+
+\end_inset
+
.
- On the other hand, it turns out that reLyX contains a very useful literal
+ On the other hand, it turns out that re\SpecialCharNoPassThru LyX
+ contains a very useful literal
quoting mechanism.
If the input file contains the construct
-\layout LyX-Code
+\end_layout
+
+\begin_layout LyX-Code
+\backslash
+begin{re\SpecialCharNoPassThru LyX
+skip}
+\begin_inset Newline newline
+\end_inset
-\backslash
-begin{reLyXskip}
-\newline
{...
- LaTeX stuff ...}
-\newline
+ \SpecialCharNoPassThru LaTeX
+ stuff ...}
+\begin_inset Newline newline
+\end_inset
-\backslash
-end{reLyXskip}
-\layout Standard
-then reLyX will copy the surrounded code to the output file verbatim.
+\backslash
+end{re\SpecialCharNoPassThru LyX
+skip}
+\end_layout
+
+\begin_layout Standard
+then re\SpecialCharNoPassThru LyX
+ will copy the surrounded code to the output file verbatim.
Given this, the first part of the translation is easy; we simply have to
copy the code chunks into an intermediate file that surrounds them with
-\family typewriter
+\family typewriter
-\backslash
-begin{reLyXskip}
-\family default
+\backslash
+begin{re\SpecialCharNoPassThru LyX
+skip}
+\family default
and
-\family typewriter
+\family typewriter
-\backslash
-end{reLyXskip}
-\family default
+\backslash
+end{re\SpecialCharNoPassThru LyX
+skip}
+\family default
.
-\layout Standard
+\end_layout
-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.
-\layout Standard
+\begin_layout Standard
+Once re\SpecialCharNoPassThru LyX
+ is done with the input file, the problem is reduced to changing
+ the code chunks from \SpecialCharNoPassThru LyX
+'s \SpecialCharNoPassThru LaTeX
+ layout to the Chunk layout.
+\end_layout
+\begin_layout Standard
There is one final constraint on
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
.
We want to be able to run it as a simple pre-processor and post-processor
- from within reLyX.
+ from within re\SpecialCharNoPassThru LyX
+.
We can accomplish this by setting the flags
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[pre_only]]
-\latex default
- and
-\latex latex
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+and
+\color none
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[post_only]]
-\latex default
- before we reach the main conversion code.
-\layout Standard
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+before we reach the main conversion code.
+\end_layout
+\begin_layout Standard
With all that preamble out of the way, we now have the basic high-level
outline for our code:
-\layout Scrap
+\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
+Convert noweb to \SpecialCharNoPassThru LyX
+\end_layout
+
+\end_inset
-<<Convert noweb to LyX>>=
-\newline
if (!$post_only) {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ <<Transform noweb for re\SpecialCharNoPassThru LyX
+>>
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-<<Transform noweb for reLyX>>
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
if ((!$pre_only) && (!$post_only)) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
+
+ <<Run re\SpecialCharNoPassThru LyX
+ on intermediate file>>
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-<<Run reLyX on intermediate file>>
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
if (!$pre_only) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
+
+ <<Fix up \SpecialCharNoPassThru LyX
+ file>>
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-<<Fix up LyX file>>
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
<<Clean up>>
-\newline
-@
-\layout Section
+\end_layout
-Making a file that reLyX can process
-\layout Standard
+\end_inset
+
+\end_layout
+
+\begin_layout Section
+Making a file that re\SpecialCharNoPassThru LyX
+ can process
+\end_layout
+
+\begin_layout Standard
In this section, we present the code that performs the task of creating
- the intermediate file that reLyX can process, using the algorithm that
+ the intermediate file that re\SpecialCharNoPassThru LyX
+ can process, using the algorithm that
we just outlined.
This algorithm is outlined in the code that follows:
-\layout Scrap
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Chunk
+status open
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+<<Transform noweb for re\SpecialCharNoPassThru LyX
+>>=
+\end_layout
+
+\begin_layout Plain Layout
-<<Transform noweb for reLyX>>=
-\newline
<<Setup INPUT and OUTPUT>>
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
inputline: while(<INPUT>)
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
{
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (/^
-\backslash
+ if (/^
+\backslash
s*
-\backslash
+\backslash
<
-\backslash
+\backslash
<.*
-\backslash
+\backslash
>
-\backslash
->=/) { # Beginning of a noweb scrap
-\newline
+\backslash
+>=/) { # Beginning of a noweb chunk
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ <<Read in and output the noweb code chunk>>
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-<<Read in and output the noweb code chunk>>
-\newline
-
-\protected_separator
-
-\protected_separator
-} elsif (/^@
-\backslash
+ } elsif (/^@
+\backslash
s+(.*)/) { # Beginning of a documentation chunk
-\newline
-
-\protected_separator
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ print OUTPUT $1; # We do not need the ``@'' part
+\end_layout
-\protected_separator
-print OUTPUT $1; # We do not need the ``@'' part
-\newline
+\begin_layout Plain Layout
-\protected_separator
-
-\protected_separator
-} elsif (/
-\backslash
+ } elsif (/
+\backslash
[
-\backslash
+\backslash
[.+
-\backslash
+\backslash
]
-\backslash
+\backslash
]/) { # noweb quoted code
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ <<Perform special input quoting of [[var]]>>
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-<<Perform special input quoting of [[var]]>>
-\newline
+ } else {
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-} else {
-\newline
+ print OUTPUT; # Just let the line pass through
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ }
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-print OUTPUT; # Just let the line pass through
-\newline
+}
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-}
-\newline
-}
-\newline
<<Close INPUT and OUTPUT>>
-\newline
-@
-\layout Standard
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
In the code above, we do some pre-processing of the noweb ``[[...]]'' construct.
- This avoids some problems with reLyX confusing lists composed of ``[[...]]''
+ This avoids some problems with re\SpecialCharNoPassThru LyX
+ confusing lists composed of ``[[...]]''
constructs.
-\layout Scrap
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
<<Perform special input quoting of [[var]]>>=
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
s/
-\backslash
+\backslash
[
-\backslash
+\backslash
[.+?
-\backslash
+\backslash
]{2,}/{$&}/g;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
print OUTPUT;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
@
-\layout Standard
+\end_layout
+
+\end_inset
+
+\end_layout
+
+\begin_layout Standard
While reading in the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[INPUT]]
-\latex default
- file, once we have identified a
-\noun on
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+file, once we have identified a
+\noun on
noweb
-\noun default
- code chunk, we transform it into a form that is usable by reLyX.
-\layout Scrap
-
-<<Read in and output the noweb code chunk>>=
-\newline
-<<Save the beginning of the scrap to savedScrap>>
-\newline
-<<Concatenate the rest of the scrap>>
-\newline
-<<print out the scrap in a reLyXskip block>>
-\newline
-@
-\layout Subsection
+\noun default
+ code chunk, we transform it into a form that is usable by re\SpecialCharNoPassThru LyX
+.
+\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
+Read in and output the noweb code chunk
+\end_layout
+
+\end_inset
+<<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 re\SpecialCharNoPassThru LyX
+skip block>>
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
File input and output for the pre-processing step
-\layout Standard
+\end_layout
+\begin_layout Standard
In
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
, we will use
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[INPUT]]
-\latex default
- and
-\latex latex
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+and
+\color none
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[OUTPUT]]
-\latex default
- to read and write files.
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+to read and write files.
In the code fragment above, we need to read from the input file and write
- to a file that will be later transformed by reLyX.
+ to a file that will be later transformed by re\SpecialCharNoPassThru LyX
+.
If we are being called only to pre-process the input file, then there is
no need to create a temporary file.
-\layout Scrap
+\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
+Setup INPUT and OUTPUT
+\end_layout
+
+\end_inset
-<<Setup INPUT and OUTPUT>>=
-\newline
if ($pre_only) {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ &setup_files($input_file, $output_file);
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-&setup_files($input_file, $output_file);
-\newline
} else {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$relyx_file = "temp$$";
-\newline
+ $relyx_file = "temp$$";
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
+
+ &setup_files($input_file, $relyx_file);
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-&setup_files($input_file, $relyx_file);
-\newline
}
-\newline
-@
-\layout Standard
+\end_layout
+
+\end_inset
+
+\end_layout
+
+\begin_layout Standard
This code uses a small perl subroutine,
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[setup_files]]
-\latex default
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color inherit
, which we define below:
-\layout Scrap
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
<<Subroutines>>=
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
sub setup_files {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-my($in, $out) = @_;
-\newline
+ my($in, $out) = @_;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-open(INPUT, "<$in") || die "Can not read $in: $!
-\backslash
+ open(INPUT, "<$in") || die "Cannot read $in: $!
+\backslash
n";
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-open(OUTPUT, ">$out") || die "Can not write $out: $!
-\backslash
+ open(OUTPUT, ">$out") || die "Cannot write $out: $!
+\backslash
n";
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
}
-\newline
-@ %def setup_files
-\protected_separator
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\layout Subsection
+@ %def setup_files
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
Reading in the
-\noun on
+\noun on
noweb
-\noun default
- scrap
-\layout Standard
-
-After we see the beginning of the scrap, we need to read in and save the
- rest of the scrap for output.
-\layout Scrap
-
-<<Save the beginning of the scrap to savedScrap>>=
-\newline
-$savedScrap = $_;
-\newline
+\noun default
+ chunk
+\end_layout
+
+\begin_layout Standard
+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 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
+
+\end_inset
+
+$savedchunk = $_;
+\end_layout
+
+\begin_layout Plain Layout
+
$endLine = "";
-\newline
-@
-\layout Scrap
+\end_layout
-<<Concatenate the rest of the scrap>>=
-\newline
-scrapline: while (<INPUT>) {
-\newline
+\end_inset
-\protected_separator
-\protected_separator
-last scrapline if /^@
-\backslash
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\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 chunkline if /^@
+\backslash
s+/;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ $savedchunk .= $_;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$savedScrap .= $_;
-\newline
};
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
switch: {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (/^@
-\backslash
-s+$/) {$savedScrap .= $_; last switch; }
-\newline
+ if (/^@
+\backslash
+s+$/) {$savedchunk .= $_; last switch; }
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (/^@
-\backslash
-s+%def.*$/) {$savedScrap .= $_; last switch; }
-\newline
+ if (/^@
+\backslash
+s+%def.*$/) {$savedchunk .= $_; last switch; }
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (/^@
-\backslash
-s+(.*)$/) {$savedScrap .= "@
-\backslash
+ if (/^@
+\backslash
+s+(.*)$/) {$savedchunk .= "@
+\backslash
n"; $endLine = "$1
-\backslash
+\backslash
n"; }
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
@
-\layout Subsection
+\end_layout
+
+\end_inset
+
+
+\end_layout
-Printing out the scrap
-\layout Standard
+\begin_layout Subsection
+Printing out the chunk
+\end_layout
+\begin_layout Standard
The final piece of the first pass of the conversion is done by this code.
-\layout Scrap
+\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
+print out the chunk in a re\SpecialCharNoPassThru LyX
+skip block
+\end_layout
+
+\end_inset
-<<print out the scrap in a reLyXskip block>>=
-\newline
print OUTPUT "
-\backslash
+\backslash
-\backslash
-begin{reLyXskip}
-\backslash
+\backslash
+begin{re\SpecialCharNoPassThru LyX
+skip}
+\backslash
n";
-\newline
-print OUTPUT $savedScrap;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+print OUTPUT $savedchunk;
+\end_layout
+
+\begin_layout Plain Layout
+
print OUTPUT "
-\backslash
+\backslash
-\backslash
-end{reLyXskip}
-\backslash
+\backslash
+end{re\SpecialCharNoPassThru LyX
+skip}
+\backslash
n
-\backslash
+\backslash
n";
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
print OUTPUT "$endLine";
-\newline
-@
-\layout Standard
+\end_layout
+
+\end_inset
+
+\end_layout
+
+\begin_layout Standard
Finally, we need to close the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[INPUT]]
-\latex default
- and
-\latex latex
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+and
+\color none
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[OUTPUT]]
-\latex default
- files.
-\layout Scrap
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+files.
+\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
+Close INPUT and OUTPUT
+\end_layout
+
+\end_inset
-<<Close INPUT and OUTPUT>>=
-\newline
close(INPUT);
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
close(OUTPUT);
-\newline
-@
-\layout Section
+\end_layout
+
+\end_inset
-Running reLyX
-\layout Standard
-In this section, we describe and implement the code that runs reLyX on the
+\end_layout
+
+\begin_layout Section
+Running re\SpecialCharNoPassThru LyX
+\end_layout
+
+\begin_layout Standard
+In this section, we describe and implement the code that runs re\SpecialCharNoPassThru LyX
+ on the
intermediate file
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[relyx_file]]
-\latex default
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color inherit
.
-\layout Subsection
+\end_layout
+\begin_layout Subsection
Selecting the document class
-\layout Standard
+\end_layout
-In order to run reLyX, we need to know the article class of the input document
+\begin_layout Standard
+In order to run re\SpecialCharNoPassThru LyX
+, we need to know the article class of the input document
(to choose the corresponding literate document layout).
For this, we need to parse the intermediate file.
-\layout Scrap
+\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
+Run re\SpecialCharNoPassThru LyX
+ on intermediate file
+\end_layout
+
+\end_inset
-<<Run reLyX on intermediate file>>=
-\newline
<<Parse for document class>>
-\newline
-<<Run reLyX with document class>>
-\newline
-@
-\layout Standard
+\end_layout
+
+\begin_layout Plain Layout
+
+<<Run re\SpecialCharNoPassThru LyX
+ with document class>>
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
In the code below, you'll see a strange regular expression to search for
the document class.
The reason for this kludge is that without it, we can't run
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
on the
-\emph on
+\emph on
noweb2lyx.nw
-\emph default
- file that is generated by LyX
-\begin_float footnote
-\layout Standard
+\emph default
+ file that is generated by \SpecialCharNoPassThru LyX
+\begin_inset Foot
+status collapsed
-reLyX searches for
-\backslash
+\begin_layout Plain Layout
+re\SpecialCharNoPassThru LyX
+ searches for
+\backslash
-\backslash
+\backslash
doc
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
{}
-\latex default
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color inherit
ument
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
{}
-\latex default
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color inherit
class and gets confused, so we have to obfuscate it slightly.
-\end_float
+\end_layout
+
+\end_inset
+
.
With the regular expression as it is, we can actually run
-\noun on
+\noun on
noweb2lyx
-\noun default
- on itself and a produce a quite reasonable LyX file.
-\layout Scrap
+\noun default
+ on itself and a produce a quite reasonable \SpecialCharNoPassThru LyX
+ file.
+\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
+Parse for document class
+\end_layout
+
+\end_inset
-<<Parse for document class>>=
-\newline
open(INPUT, "<$relyx_file") ||
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-die "Can not read $relyx_file: $!
-\backslash
+ die "Cannot read $relyx_file: $!
+\backslash
n";
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
$class = "article"; # default if none found
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
parse: while(<INPUT>) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (/
-\backslash
+ if (/
+\backslash
-\backslash
+\backslash
docu[m]entclass{(.*)}/) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ $class = $1;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$class = $1;
-\newline
+ last parse;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ }
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-last parse;
-\newline
+}
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-}
-\newline
-}
-\newline
close(INPUT);
-\newline
-@
-\layout Subsection
+\end_layout
-Running reLyX with the corresponding literate document layout
-\layout Standard
+\end_inset
+
+\end_layout
+
+\begin_layout Subsection
+Running re\SpecialCharNoPassThru LyX
+ with the corresponding literate document layout
+\end_layout
+
+\begin_layout Standard
Now that we know what the document class ought to be, we do:
-\layout Scrap
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+<<Run re\SpecialCharNoPassThru LyX
+ with document class>>=
+\end_layout
+
+\begin_layout Plain Layout
-<<Run reLyX with document class>>=
-\newline
$doc_class = "literate-" .
$class;
-\newline
-die "reLyX returned non-zero: $!
-\backslash
+\end_layout
+
+\begin_layout Plain Layout
+
+die "re\SpecialCharNoPassThru LyX
+ returned non-zero: $!
+\backslash
n"
-\newline
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
+ if (system("re\SpecialCharNoPassThru LyX
+ -c $doc_class $relyx_file"));
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-if (system("reLyX -c $doc_class $relyx_file"));
-\newline
@
-\layout Standard
+\end_layout
+
+\end_inset
-reLyX performs the main bulk of the translation work.
+
+\end_layout
+
+\begin_layout Standard
+re\SpecialCharNoPassThru LyX
+ performs the main bulk of the translation work.
Note that if the ``literate-
-\emph on
+\emph on
class
-\emph default
-'' document layout is not found, then reLyX will fail with an error.
+\emph default
+'' document layout is not found, then re\SpecialCharNoPassThru LyX
+ will fail with an error.
In that case, you may need to modify your
-\noun on
+\noun on
noweb
-\noun default
+\noun default
input file to a supported document type.
-\layout Section
+\end_layout
-Fixing the reLyX output
-\layout Standard
+\begin_layout Section
+Fixing the re\SpecialCharNoPassThru LyX
+ output
+\end_layout
-We need to perform some post-processing of what reLyX produces in order
+\begin_layout Standard
+We need to perform some post-processing of what re\SpecialCharNoPassThru LyX
+ produces in order
to have the best output for our literate document.
The outline of the post-processing steps are:
-\layout Scrap
+\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 up \SpecialCharNoPassThru LyX
+ file
+\end_layout
+
+\end_inset
-<<Fix up LyX file>>=
-\newline
<<Setup INPUT and OUTPUT for the final output>>
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
line: while(<INPUT>)
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
{
-\newline
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
+ <<Fix code chunks in latex layout>>
+\end_layout
-\protected_separator
-<<Fix code chunks in latex layout>>
-\newline
+\begin_layout Plain Layout
-\protected_separator
+ <<Fix [[var]] noweb construct>>
+\end_layout
-\protected_separator
-<<Fix [[var]] noweb construct>>
-\newline
+\begin_layout Plain Layout
-\protected_separator
+ print OUTPUT; # default
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-print OUTPUT; # default
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
<<Close INPUT and OUTPUT>>
-\newline
-@
-\layout Standard
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
Note that in the perl code that is contained in the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[while(<INPUT>)]]
-\latex default
- loop above, the perl construct
-\latex latex
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+loop above, the perl construct
+\color none
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[next line]]
-\latex default
- is sufficient to restart the loop.
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+is sufficient to restart the loop.
We can use this construct to do some relatively complex parsing of the
- reLyX generated file.
-\layout Subsection
+ re\SpecialCharNoPassThru LyX
+ generated file.
+\end_layout
+\begin_layout Subsection
File input and output for the post-processing
-\layout Standard
+\end_layout
+\begin_layout Standard
Setting up the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[INPUT]]
-\latex default
- and
-\latex latex
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+and
+\color none
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
[[OUTPUT]]
-\latex default
- is taken care of by this code:
-\layout Scrap
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+
+\color inherit
+is taken care of by this code:
+\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
+Setup INPUT and OUTPUT for the final output
+\end_layout
+
+\end_inset
-<<Setup INPUT and OUTPUT for the final output>>=
-\newline
if ($post_only) {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
+ &setup_files("$input_file", "$output_file");
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-&setup_files("$input_file", "$output_file");
-\newline
} else {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ &setup_files("$relyx_file.lyx", "$output_file");
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
- &setup_files("$relyx_file.lyx", "$output_file");
-\newline
}
-\newline
-@
-\layout Subsection
+\end_layout
+
+\end_inset
+
+
+\end_layout
-Making sure the code chunks are in the Scrap layout
-\layout Standard
+\begin_layout Subsection
+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.
-\layout Scrap
+ which have been put into a \SpecialCharNoPassThru LaTeX
+ layout by \SpecialCharNoPassThru 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
+
+\end_inset
-<<Fix code chunks in latex layout>>=
-\newline
if (/
-\backslash
+\backslash
-\backslash
+\backslash
latex latex/) { # Beginning of some latex code
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-if (($line = <INPUT>) =~ /^
-\backslash
-s*<</) { # code scrap
-\newline
+ if (($line = <INPUT>) =~ /^
+\backslash
+s*<</) { # code chunk
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-
-\protected_separator
-<<Transform this chunk into layout scrap>>
-\newline
+ <<Transform this chunk into layout chunk>>
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-} else {
-\newline
+ } else {
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ # print the
+\backslash
+latex latex line + next line
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-# print the
-\backslash
-latex latex line + next line
-\newline
+ print OUTPUT "$_$line";
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
+ }
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-print OUTPUT "$_$line";
-\newline
+ next line;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
}
-\newline
+\end_layout
-\protected_separator
+\end_inset
-\protected_separator
-next line;
-\newline
-}
-\newline
-@
-\layout Standard
+\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:
-\layout Scrap
+ the code chunk and output a chunk layout for it:
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+<<Transform this chunk into layout chunk>>=
+\end_layout
+
+\begin_layout Plain Layout
-<<Transform this chunk into layout scrap>>=
-\newline
-$savedScrap = "
-\backslash
+\end_layout
-\backslash
-layout Scrap
-\backslash
+\begin_layout Plain Layout
+
+$savedchunk = "
+\backslash
+
+\backslash
+layout Chunk
+\backslash
n
-\backslash
+\backslash
n$line";
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
codeline: while (<INPUT>) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$savedScrap .= $_;
-\newline
+ $savedchunk .= $_;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-last codeline if /^@
-\backslash
+ last codeline if /^@
+\backslash
s+/;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
};
-\newline
-print OUTPUT $savedScrap;
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+print OUTPUT $savedchunk;
+\end_layout
+
+\begin_layout Plain Layout
+
<<Slurp up to the end of the latex layout>>
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
@
-\layout Standard
+\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:
-\layout Scrap
+\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
+Slurp up to the end of the latex layout
+\end_layout
+
+\end_inset
-<<Slurp up to the end of the latex layout>>=
-\newline
slurp: while (<INPUT>) {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-last slurp if /
-\backslash
+ last slurp if /
+\backslash
-\backslash
+\backslash
latex /;
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-next slurp if /
-\backslash
+ next slurp if /
+\backslash
-\backslash
+\backslash
newline/;
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-next slurp if /^
-\backslash
+ next slurp if /^
+\backslash
s*$/;
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
+
+ warn "confused by line: $_";
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-warn "confused by line: $_";
-\newline
}
-\newline
-@
-\layout Subsection
+\end_layout
+
+\end_inset
+
+\end_layout
+
+\begin_layout Subsection
Taking care of the
-\noun on
+\noun on
noweb
-\noun default
+\noun default
-\emph on
+\emph on
[[quoted code]]
-\emph default
+\emph default
construct
-\layout Standard
+\end_layout
+\begin_layout Standard
-\noun on
+\noun on
noweb
-\noun default
+\noun default
allows the user to use a special code quoting mechanism in documentation
chunks.
Fixing this ``[[quoted-code]]''
-\noun on
+\noun on
noweb
-\noun default
- syntax means putting the ``[[quoted-code]]'' in a LaTeX layout in the LyX
+\noun default
+ syntax means putting the ``[[quoted-code]]'' in a \SpecialCharNoPassThru LaTeX
+ layout in the \SpecialCharNoPassThru LyX
file.
- Otherwise, LyX will backslash-quote the brackets, creating ugly output.
+ Otherwise, \SpecialCharNoPassThru LyX
+ will backslash-quote the brackets, creating ugly output.
The quoted-code is transformed by
-\noun on
+\noun on
noweb
-\noun default
- when it generates the final LaTeX code.
-\layout Scrap
+\noun default
+ when it generates the final \SpecialCharNoPassThru LaTeX
+ code.
+\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 [[var]] noweb construct
+\end_layout
+
+\end_inset
-<<Fix [[var]] noweb construct>>=
-\newline
if (/
-\backslash
+\backslash
[
-\backslash
+\backslash
[.+
-\backslash
+\backslash
]
-\backslash
+\backslash
]/) { # special code for [[var]]
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-s/
-\backslash
+ s/
+\backslash
[
-\backslash
+\backslash
[.+?
-\backslash
+\backslash
]{2,}/
-\backslash
+\backslash
n
-\backslash
+\backslash
-\backslash
+\backslash
latex latex
-\backslash
+\backslash
n$&
-\backslash
+\backslash
n
-\backslash
+\backslash
-\backslash
+\backslash
latex default
-\backslash
+\backslash
n/g;
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-print OUTPUT;
-\newline
+ print OUTPUT;
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
+ next line;
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-next line;
-\newline
}
-\newline
-@
-\layout Section
+\end_layout
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
Cleaning up intermediate files
-\layout Standard
+\end_layout
+\begin_layout Standard
The cleanup code is very simple:
-\layout Scrap
+\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
+Clean up
+\end_layout
+
+\end_inset
-<<Clean up>>=
-\newline
system("rm -f $relyx_file*") unless ($post_only || $pre_only);
-\newline
-@
-\layout Section
+\end_layout
+
+\end_inset
+
+
+\end_layout
+\begin_layout Section
User supplied arguments
-\layout Standard
+\end_layout
+\begin_layout Standard
The
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
script understands two arguments, input-file and output-file.
- It is also set up to be used internally by reLyX to pre-process or postprocess
+ It is also set up to be used internally by re\SpecialCharNoPassThru LyX
+ to pre-process or postprocess
files in the import pipeline.
-\layout Scrap
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
<<Setup variables from user supplied args>>=
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
&usage() if ($#ARGV < 1); # zero or one argument
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
if ($ARGV[0] eq "-pre") {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ &usage unless ($#ARGV == 2);
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-&usage unless ($#ARGV == 2);
-\newline
+ $input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
-\newline
} elsif ($ARGV[0] eq "-post") {
-\newline
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-&usage unless ($#ARGV == 2);
-\newline
+ &usage unless ($#ARGV == 2);
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
+
+ $input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-$input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
-\newline
} else {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ &usage unless ($#ARGV == 1);
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-&usage unless ($#ARGV == 1);
-\newline
+ $input_file = $ARGV[0]; $output_file = $ARGV[1];
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$input_file = $ARGV[0];
-\protected_separator
-$output_file = $ARGV[1];
-\newline
+ $pre_only = 0; $post_only = 0;
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-$pre_only = 0; $post_only = 0;
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
@ %def input_file output_file pre_only post_only
-\layout Scrap
+\end_layout
+
+\begin_layout Plain Layout
<<Subroutines>>=
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
sub usage() {
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
+ print "Usage: noweb2lyx [-pre | -post] input-file output-file
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+If -pre is specified, only pre-processes the input-file for re\SpecialCharNoPassThru LyX
+.
+\end_layout
-\protected_separator
+\begin_layout Plain Layout
-\protected_separator
-print "Usage: noweb2lyx [-pre | -post] input-file output-file
-\newline
+Similarly, in the case of -post, post-processes re\SpecialCharNoPassThru LyX
+ output.
+\end_layout
+
+\begin_layout Plain Layout
-\newline
-If -pre is specified, only pre-processes the input-file for reLyX.
-\newline
-Similarly, in the case of -post, post-processes reLyX output.
-\newline
In case of bugs, Email Kayvan Sylvan <kayvan
-\backslash
+\backslash
@sylvan.com>.
-\backslash
+\backslash
n";
-\newline
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
+ exit;
+\end_layout
+
+\begin_layout Plain Layout
-\protected_separator
-exit;
-\newline
}
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
@ %def usage
-\layout Section
+\end_layout
+
+\end_inset
+
+
+\end_layout
+\begin_layout Section
Generating the
-\noun on
+\noun on
noweb2lyx
-\noun default
+\noun default
script
-\layout Standard
+\end_layout
-The noweb2lyx script can be tangled from LyX if you set
-\family typewriter
+\begin_layout Standard
+The noweb2lyx script can be tangled from \SpecialCharNoPassThru LyX
+ if you set
+\family typewriter
-\backslash
+\backslash
build_command
-\family default
- to call a generic script that always extracts a scrap named
-\family typewriter
+\family default
+ to call a generic script that always extracts a chunk named
+\family typewriter
build-script
-\family default
+\family default
and executes it.
Here is an example of such a script:
-\layout LyX-Code
+\end_layout
+\begin_layout LyX-Code
#!/bin/sh
-\newline
-notangle -Rbuild-script $1 | sh
-\layout Scrap
+\begin_inset Newline newline
+\end_inset
+
+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
+
+\end_inset
-<<build-script>>=
-\newline
PREFIX=/usr
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
notangle -Rnoweb2lyx.in noweb2lyx.nw > noweb2lyx.in
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
sed -e "s=@PERL@=$PREFIX/bin/perl=" noweb2lyx.in > noweb2lyx
-\newline
+\end_layout
+
+\begin_layout Plain Layout
+
chmod +x noweb2lyx
-\newline
-@
-\layout Section*
-\pagebreak_top
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Newpage newpage
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section*
Macros
-\layout Standard
+\end_layout
+
+\begin_layout Standard
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+\begin_inset ERT
+status collapsed
-\latex latex
+\begin_layout Plain Layout
-\backslash
+
+\backslash
nowebchunks
-\layout Section*
+\end_layout
+
+\end_inset
+
+\end_layout
+
+\begin_layout Section*
Identifiers
-\layout Standard
+\end_layout
+
+\begin_layout Standard
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+\begin_inset ERT
+status collapsed
+\begin_layout Plain Layout
-\latex latex
-\backslash
+\backslash
nowebindex
-\the_end
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document