Fix # 8414: Use the noweb module instead of literate-* article layouts

Now that we have module support for literate programming, it is possible to do a noweb cleanup. This is basically a patch from Kayvan Sylvan:

- get rid of literate-xxx classes
- rename Scrap to Chunk, since this is the name noweb doc uses (Scrap is from nuweb)
- update lyx file format and add lyx2lyx support for gettting rid of literate-xxx classes
- update documentation

On the top of it, update tex2lyx to
- avoid creating files with literate-xxx class
- fix conflict between parsing << as a quote and parsing it as a Chunk
- create Chunk layouts instead of Scrap ones.
This commit is contained in:
Jean-Marc Lasgouttes 2012-11-28 12:54:34 +01:00
parent 72c2a72afd
commit 4f6c0b5202
20 changed files with 1127 additions and 987 deletions

View File

@ -12,6 +12,15 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
----------------------- -----------------------
2012-11-25 Kayvan Sylvan <kayvan@sylvan.com>
* Format incremented to 448: Change Noweb literate style Scrap
to Chunk to be consistent with all the other literate tools
(including noweb!) and add the needed preamble bits to Noweb module
support, also remove the literate-* layouts.
2012-11-24 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 447: IEEEtran layout revision.
2012-11-19 Jürgen Spitzmüller <spitz@lyx.org> 2012-11-19 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 446: Change of InsetArgument syntax. * Format incremented to 446: Change of InsetArgument syntax.
InsetArgument now has a numeric identifier which determines InsetArgument now has a numeric identifier which determines

View File

@ -399,7 +399,7 @@ dist_images_DATA = \
images/layout_Itemize.png \ images/layout_Itemize.png \
images/layout_List.png \ images/layout_List.png \
images/layout_LyX-Code.png \ images/layout_LyX-Code.png \
images/layout_Scrap.png \ images/layout_Chunk.png \
images/layout_Section.png \ images/layout_Section.png \
images/lyx-quit.png \ images/lyx-quit.png \
images/marginalnote-insert.png \ images/marginalnote-insert.png \
@ -1365,7 +1365,7 @@ dist_imagesclassic_DATA = \
images/classic/layout_Itemize.png \ images/classic/layout_Itemize.png \
images/classic/layout_List.png \ images/classic/layout_List.png \
images/classic/layout_LyX-Code.png \ images/classic/layout_LyX-Code.png \
images/classic/layout_Scrap.png \ images/classic/layout_Chunk.png \
images/classic/layout_Section.png \ images/classic/layout_Section.png \
images/classic/marginalnote-insert.png \ images/classic/marginalnote-insert.png \
images/classic/master-buffer-update.png \ images/classic/master-buffer-update.png \
@ -1588,10 +1588,6 @@ dist_layouts_DATA =\
layouts/lettre.layout \ layouts/lettre.layout \
layouts/lilypond.module \ layouts/lilypond.module \
layouts/linguistics.module \ layouts/linguistics.module \
layouts/literate-article.layout \
layouts/literate-book.layout \
layouts/literate-report.layout \
layouts/literate-scrap.inc \
layouts/llncs.layout \ layouts/llncs.layout \
layouts/logicalmkup.module \ layouts/logicalmkup.module \
layouts/ltugboat.layout \ layouts/ltugboat.layout \

View File

@ -647,7 +647,7 @@ def checkConverterEntries():
path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [in_place, 'tex2lyx' + version_suffix, 'tex2lyx'], path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [in_place, 'tex2lyx' + version_suffix, 'tex2lyx'],
rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" "" rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" ""
\converter literate lyx "%% -n -f $$i $$o" ""'''], not_found = 'tex2lyx') \converter literate lyx "%% -n -m noweb -f $$i $$o" ""'''], not_found = 'tex2lyx')
if path == '': if path == '':
logger.warning("Failed to find tex2lyx on your system.") logger.warning("Failed to find tex2lyx on your system.")

View File

@ -1,5 +1,5 @@
#LyX 2.1 created this file. For more info see http://www.lyx.org/ #LyX 2.1 created this file. For more info see http://www.lyx.org/
\lyxformat 445 \lyxformat 447
\begin_document \begin_document
\begin_header \begin_header
\textclass scrbook \textclass scrbook
@ -38,6 +38,7 @@
% extra space for tables % extra space for tables
\newcommand{\extratablespace}[1]{\noalign{\vskip#1}} \newcommand{\extratablespace}[1]{\noalign{\vskip#1}}
\usepackage{enumitem}
\end_preamble \end_preamble
\options fleqn,bibliography=totoc,index=totoc,BCOR7.5mm,titlepage,captions=tableheading \options fleqn,bibliography=totoc,index=totoc,BCOR7.5mm,titlepage,captions=tableheading
\use_default_options false \use_default_options false
@ -79,7 +80,7 @@ End
\font_tt_scale 100 \font_tt_scale 100
\graphics default \graphics default
\default_output_format default \default_output_format default
\output_sync 1 \output_sync 0
\bibtex_command default \bibtex_command default
\index_command default \index_command default
\paperfontsize 12 \paperfontsize 12
@ -135,7 +136,7 @@ End
\html_math_output 0 \html_math_output 0
\html_css_as_file 0 \html_css_as_file 0
\html_be_strict true \html_be_strict true
\author 274215730 "scott" \author 819523532 "Kayvan Sylvan"
\end_header \end_header
\begin_body \begin_body
@ -14993,7 +14994,7 @@ Poemtitle*: Same as poemtitle, but it adds no entry to the table of contents.
\begin_layout Section \begin_layout Section
Article (mwart), book (mwbk) and report (mwrep) Article (mwart), book (mwbk) and report (mwrep)
\begin_inset Argument \begin_inset Argument status
status collapsed status collapsed
\begin_layout Plain Layout \begin_layout Plain Layout
@ -21378,11 +21379,7 @@ Starting from there you can reach many other interesting links and even
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
LyX and Literate Programming LyX and Literate Programming with Noweb
\change_inserted 274215730 1350434640
with Noweb
\change_unchanged
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -21413,51 +21410,38 @@ Generating documents and code (weaving and tangling)
\end_layout \end_layout
\begin_layout Paragraph \begin_layout Paragraph
Selecting the document class Using the noweb module
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
If you have installed Noweb and LyX successfully, whenever you open a new If you have installed Noweb and LyX successfully, whenever you open a new
document or try to change the document class of an existing one, you will document, after you have chosen its document class, use the Document->Settings
find that there are three new document classes available: menu to add the
\end_layout \begin_inset Quotes eld
\begin_layout Itemize
Article (Noweb)
\end_layout
\begin_layout Itemize
Book (Noweb)
\end_layout
\begin_layout Itemize
Report (Noweb)
\end_layout
\begin_layout Standard
You must select one of them to create your literate documents from.
\end_layout
\begin_layout Standard
Note that literate documents are not limited to these three classes.
New classes can be generated from other styles like letter or in combination
with other class variations like Article (AMS).
If you have special needs that cannot be covered by one of the existing
classes, let the LyX developers list (lyx-devel@lists.lyx.org) know and we
will arrange to insert a new entry, or teach you how to do it.
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
It is very simple, it involves the creation of a file with four lines, and
re-running of the auto configuration.
\end_layout
\end_inset \end_inset
Moreover, if you use a literate tool other than Noweb you may need to create noweb
a new set of document classes for it. \begin_inset Quotes erd
\end_inset
module.
If Noweb is correctly installed, when you click on the
\begin_inset Quotes eld
\end_inset
Modules
\begin_inset Quotes erd
\end_inset
link, you will see the
\begin_inset Quotes eld
\end_inset
noweb
\begin_inset Quotes erd
\end_inset
module in the available list and you can add it to your document.
\end_layout \end_layout
\begin_layout Paragraph \begin_layout Paragraph
@ -21466,10 +21450,32 @@ Typing code in
\begin_layout Standard \begin_layout Standard
LyX enables you to write code with a layout named LyX enables you to write code with a layout named
\change_inserted 819523532 1353904450
\begin_inset Flex Noun
status collapsed
\begin_layout Plain Layout
\change_inserted 819523532 1353904450
Chunk
\change_unchanged
\end_layout
\end_inset
\change_deleted 819523532 1353904406
\noun on \noun on
Scrap Scrap
\change_unchanged
\noun default \noun default
. .
\change_deleted 819523532 1353904396
\begin_inset Foot \begin_inset Foot
status collapsed status collapsed
@ -21497,11 +21503,25 @@ scrap
\end_inset \end_inset
Noweb delimits scraps like this:
\change_unchanged
Noweb delimits
\change_deleted 819523532 1353904459
scraps
\change_inserted 819523532 1353904461
chunks
\change_unchanged
like this:
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
<<My scrap>>= <<My
\change_deleted 819523532 1353904469
scrap
\change_inserted 819523532 1353904470
code
\change_unchanged
>>=
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
@ -21535,76 +21555,13 @@ e.
LyX should be prevented from making any special interpretation of what has LyX should be prevented from making any special interpretation of what has
been written. been written.
This is handled by a special layout named Scrap, that works like a normal This is handled by a special layout named
paragraph but has a free spacing capability. \change_deleted 819523532 1353904493
\end_layout Scrap
\change_inserted 819523532 1353904494
\begin_layout Standard Chunk
The down
\change_deleted 274215730 1350432842
\change_unchanged \change_unchanged
side of the Scrap paragraph layout is that consecutive paragraphs of code , that works like a normal paragraph but has a free spacing capability.
will be spaced with one empty line in the source code and also in the printed
documentation.
The work around is to enter each line of code within a single Scrap, with
a newline (ctrl-return).
The example above will look like this:
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
If you have a printed version of this document you will not see any difference
between the previous example and this one.
\end_layout
\end_inset
\end_layout
\begin_layout LyX-Code
<<My scrap>>=
\begin_inset Newline newline
\end_inset
code
\begin_inset Newline newline
\end_inset
more code
\begin_inset Newline newline
\end_inset
even more code
\begin_inset Newline newline
\end_inset
@
\end_layout
\begin_layout Standard
This layout works fine.
The only real inconvenience is that you have to type ctrl-return instead
of a plain return.
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
It is in my list of
\begin_inset Quotes eld
\end_inset
improvements
\begin_inset Quotes erd
\end_inset
to fix that.
\end_layout
\end_inset
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -21616,24 +21573,53 @@ As a special note, you can also use the
\begin_inset Quotes erd \begin_inset Quotes erd
\end_inset \end_inset
construct of Noweb in your scraps to add items to Noweb's identifier cross-refe construct of Noweb in your
rence: \change_deleted 819523532 1353904503
scraps
\change_inserted 819523532 1353904504
chunks
\change_unchanged
to add items to Noweb's identifier cross-reference:
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
<<My scrap>>= <<My
\begin_inset Newline newline \change_deleted 819523532 1353904516
\end_inset scrap
\change_inserted 819523532 1353904517
chunk
\change_unchanged
>>=
\change_inserted 819523532 1353904523
def some_function(args): \end_layout
\begin_inset Newline newline
\end_inset
"This is the doc string for this function." \begin_layout LyX-Code
\begin_inset Newline newline
\end_inset
print "My args: ", args \change_deleted 819523532 1353904528
\change_unchanged
def some_function(args):
\change_inserted 819523532 1353904543
\end_layout
\begin_layout LyX-Code
\change_deleted 819523532 1353904543
\change_unchanged
"This is the doc string for this function."
\change_inserted 819523532 1353904550
\end_layout
\begin_layout LyX-Code
\change_deleted 819523532 1353904550
\change_unchanged
print "My args: ", args
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
@ -21703,8 +21689,13 @@ literate
\begin_layout Enumerate \begin_layout Enumerate
Note that the only difference so far is in the name of the file, no special Note that the only difference so far is in the name of the file, no special
processing is required by LyX. processing is required by LyX.
Given that you formatted the code using the Scrap layout that, by itself, Given that you formatted the code using the
takes care of the business. \change_deleted 819523532 1353904586
Scrap
\change_inserted 819523532 1353904587
Chunk
\change_unchanged
layout that, by itself, takes care of the business.
\end_layout \end_layout
\begin_layout Enumerate \begin_layout Enumerate
@ -21909,7 +21900,13 @@ Noweb->Program
conversion may produce several files, and so most of these would then be conversion may produce several files, and so most of these would then be
deleted when LyX was closed. deleted when LyX was closed.
This is why we pass in the NOWEB_OUTPUT_DIR environment variable so that This is why we pass in the NOWEB_OUTPUT_DIR environment variable so that
the build-script scrap can place the generated files in that location. the build-script
\change_deleted 819523532 1353904613
scrap
\change_inserted 819523532 1353904614
chunk
\change_unchanged
can place the generated files in that location.
\end_layout \end_layout
\begin_layout Paragraph \begin_layout Paragraph
@ -21925,9 +21922,21 @@ build-script
\begin_inset Quotes erd \begin_inset Quotes erd
\end_inset \end_inset
scrap.
\change_deleted 819523532 1353904625
scrap
\change_inserted 819523532 1353904625
chunk
\change_unchanged
.
Generally, the instructions for building your program should be embedded Generally, the instructions for building your program should be embedded
in a scrap of its own. in a
\change_deleted 819523532 1353904630
scrap
\change_inserted 819523532 1353904630
chunk
\change_unchanged
of its own.
The noweb-specific The noweb-specific
\begin_inset Quotes eld \begin_inset Quotes eld
\end_inset \end_inset
@ -21936,7 +21945,13 @@ build-script
\begin_inset Quotes erd \begin_inset Quotes erd
\end_inset \end_inset
above uses the notangle command to look for this scrap (called above uses the notangle command to look for this
\change_deleted 819523532 1353904632
scrap
\change_inserted 819523532 1353904632
chunk
\change_unchanged
(called
\begin_inset Quotes eld \begin_inset Quotes eld
\end_inset \end_inset
@ -21956,50 +21971,21 @@ sh
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
Typically, such a scrap would look something like this: Typically, such a
\change_deleted 819523532 1353904634
scrap
\change_inserted 819523532 1353904634
chunk
\change_unchanged
would look something like this:
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
<<build-script>>= <<build-script>>=#!/bin/shif [ -z "${NOWEB_SOURCE}" ]then NOWEB_SOURCE=myfile.nw
\begin_inset Newline newline fi[...
\end_inset
#!/bin/sh
\begin_inset Newline newline
\end_inset
\begin_inset Newline newline
\end_inset
if [ -z "${NOWEB_SOURCE}" ]
\begin_inset Newline newline
\end_inset
then
\begin_inset Newline newline
\end_inset
NOWEB_SOURCE=myfile.nw
\begin_inset Newline newline
\end_inset
fi
\begin_inset Newline newline
\end_inset
[...
code to extract files ... code to extract files ...
use NOWEB_OUTPUT_DIR here ...] use NOWEB_OUTPUT_DIR here ...][...
\begin_inset Newline newline code to compile files ...]@
\end_inset
[...
code to compile files ...]
\begin_inset Newline newline
\end_inset
@
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -22214,11 +22200,8 @@ Helpers
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
I take advantage of the new I take advantage of the newly created LyX server function and this ddd feature,
\change_inserted 274215730 1350432999 and set
ly
\change_unchanged
created LyX server function and this ddd feature, and set
\begin_inset Quotes eld \begin_inset Quotes eld
\end_inset \end_inset
@ -22236,15 +22219,9 @@ echo "LYXCMD:monitor:server-goto-file-row:@FILE@ @LINE@" >~/.lyxpipe.in
\begin_layout Standard \begin_layout Standard
With this, whenever you are using ddd and find a point in the program that With this, whenever you are using ddd and find a point in the program that
you want to edit, you just press shift-ctrl-V (in the ddd window), and you want to edit, you just press shift-ctrl-V (in the ddd window), and
ddd ddd will forward this information to LyX through the LyX server and then
\change_deleted 274215730 1350433047 the LyX window will show the same file with the cursor at the same position
you ddd was pointing to.
\change_inserted 274215730 1350433047
will
\change_unchanged
forward this information to LyX through the LyX server and then the LyX
window will show the same file with the cursor at the same position ddd
was pointing to.
No more guessing or long scrolling to locate a point in the program back No more guessing or long scrolling to locate a point in the program back
from debugging ! from debugging !
\end_layout \end_layout
@ -22314,8 +22291,14 @@ LaTeX
LyX-Code LyX-Code
\family default \family default
, and , and
\change_deleted 819523532 1353904643
\family sans \family sans
Scrap Scrap
\change_inserted 819523532 1353904651
Chunk
\change_unchanged
\family default \family default
. .
The last one is a short cut to the The last one is a short cut to the
@ -22381,7 +22364,13 @@ Toolbar
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
Icon "layout Scrap" Icon "layout
\change_deleted 819523532 1353904661
Scrap
\change_inserted 819523532 1353904668
Chunk
\change_unchanged
"
\end_layout \end_layout
\begin_layout LyX-Code \begin_layout LyX-Code
@ -22431,9 +22420,19 @@ Preferences
\family default \family default
. .
One of the things that bothers people is the LaTeX font color. One of the things that bothers people is the LaTeX font color.
The default color is red, since the scraps uses LaTeX font, and there is The default color is red, since the
a lot of scraps in literate documents, you may get tired of seeing everything \change_deleted 819523532 1353904675
in red. scrap
\change_inserted 819523532 1353904675
chunk
\change_unchanged
s uses LaTeX font, and there is a lot of
\change_deleted 819523532 1353904682
scrap
\change_inserted 819523532 1353904682
chunk
\change_unchanged
s in literate documents, you may get tired of seeing everything in red.
You can change it by going to the tabs You can change it by going to the tabs
\family sans \family sans
Look&Feel Look&Feel
@ -22450,26 +22449,15 @@ The next thing is the visible presence of the newline character in the screen.
I recommend you choosing a color that is close to the background but not I recommend you choosing a color that is close to the background but not
equal, that way you still can see it is there, but it is not bothering equal, that way you still can see it is there, but it is not bothering
you anymore. you anymore.
\change_deleted 274215730 1350434691
\change_inserted 274215730 1350434708
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
\change_inserted 274215730 1350434732
LyX and knitr/Sweave LyX and knitr/Sweave
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
\change_inserted 274215730 1350434777
Support for knitr and Sweave is documented in the knitr.lyx example file Support for knitr and Sweave is documented in the knitr.lyx example file
and in the Sweave manual (in the Help > Specific Manuals submenu). and in the Sweave manual (in the Help > Specific Manuals submenu).
\change_unchanged
\end_layout \end_layout
\begin_layout Chapter \begin_layout Chapter

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
#LyX 2.0 created this file. For more info see http://www.lyx.org/ #LyX 2.1 created this file. For more info see http://www.lyx.org/
\lyxformat 413 \lyxformat 445
\begin_document \begin_document
\begin_header \begin_header
\textclass article \textclass article
@ -27,13 +27,13 @@ sweave
\font_roman palatino \font_roman palatino
\font_sans lmss \font_sans lmss
\font_typewriter lmtt \font_typewriter lmtt
\font_math auto
\font_default_family default \font_default_family default
\use_non_tex_fonts false \use_non_tex_fonts false
\font_sc false \font_sc false
\font_osf false \font_osf false
\font_sf_scale 100 \font_sf_scale 100
\font_tt_scale 100 \font_tt_scale 100
\graphics default \graphics default
\default_output_format default \default_output_format default
\output_sync 0 \output_sync 0
@ -44,15 +44,21 @@ sweave
\use_hyperref false \use_hyperref false
\papersize default \papersize default
\use_geometry true \use_geometry true
\use_amsmath 1 \use_package amsmath 1
\use_esint 1 \use_package amssymb 1
\use_mhchem 1 \use_package esint 1
\use_mathdots 1 \use_package mathdots 1
\use_package mathtools 0
\use_package mhchem 1
\use_package undertilde 0
\cite_engine basic \cite_engine basic
\cite_engine_type numerical
\biblio_style plain
\use_bibtopic false \use_bibtopic false
\use_indices false \use_indices false
\paperorientation portrait \paperorientation portrait
\suppress_date false \suppress_date false
\justification true
\use_refstyle 0 \use_refstyle 0
\index Index \index Index
\shortcut idx \shortcut idx
@ -197,19 +203,7 @@ Since LyX 2.0, Sweave can be used out of the box with any document class
\family sans \family sans
Sweave Sweave
\family default \family default
module, which means we no longer need to modify the module.
\family sans
preferences
\family default
file manually or add special layouts such as
\family sans
literate-article.layout
\family default
and
\family sans
literate-book.layout
\family default
like we did before.
We can add the We can add the
\family sans \family sans
Sweave Sweave

View File

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 327 B

View File

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 327 B

View File

@ -1,13 +0,0 @@
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[article,noweb.sty]{Noweb Article}
# \DeclareCategory{Articles}
# literate-article textclass definition file.
# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
Format 41
Preamble
\usepackage{noweb}
EndPreamble
Input article.layout
Input literate-scrap.inc

View File

@ -1,13 +0,0 @@
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[book,noweb.sty]{Noweb Book}
# \DeclareCategory{Books}
# literate-book textclass definition file.
# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
Format 41
Preamble
\usepackage{noweb}
EndPreamble
Input book.layout
Input literate-scrap.inc

View File

@ -1,13 +0,0 @@
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[report,noweb.sty]{Noweb Report}
# \DeclareCategory{Reports}
# literate-report textclass definition file.
# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
Format 41
Preamble
\usepackage{noweb}
EndPreamble
Input report.layout
Input literate-scrap.inc

View File

@ -1,31 +0,0 @@
# Suggested style to write your code:
# Within same scrap, lines are separated by newlines (Ctrl-Return), use:
# ItemSep 0.4
# . disavantage: must type ctrl-return every single line
# . advantage: looks better (IMHO)
# resembles more closely the produced paper doc (more WYSIWYG)
#
Format 41
OutputType literate
Style Scrap
Margin First_Dynamic
LatexType Paragraph
LatexName dummy
LeftMargin MMM
Align Left
AlignPossible Block,Left
NewLine 0
FreeSpacing 1
PassThru 1
ParbreakIsNewline 1
LabelType Static
LabelFont
Color magenta
EndFont
TextFont
Color latex
Family Typewriter
EndFont
End

View File

@ -7,8 +7,11 @@
Format 41 Format 41
OutputType literate OutputType literate
# FIXME: Use the Chunk layout from the sweave module? AddToPreamble
Style Scrap \usepackage{noweb}
EndPreamble
Style Chunk
Margin First_Dynamic Margin First_Dynamic
LatexType Paragraph LatexType Paragraph
LatexName dummy LatexName dummy

View File

@ -1397,6 +1397,37 @@ def convert_IJMP(document):
if i == -1: if i == -1:
return return
def revert_literate(document):
" Revert Literate document to old format "
if del_token(document.header, "noweb", 0):
document.textclass = "literate-" + document.textclass
i = 0
while True:
i = find_token(document.body, "\\begin_layout Chunk", i)
if i == -1:
break
document.body[i] = "\\begin_layout Scrap"
i = i + 1
def convert_literate(document):
" Convert Literate document to new format"
i = find_token(document.header, "\\textclass", 0)
if (i != -1) and "literate-" in document.header[i]:
document.textclass = document.header[i].replace("\\textclass literate-", "")
j = find_token(document.header, "\\begin_modules", 0)
if (j != -1):
document.header.insert(j + 1, "noweb")
else:
document.header.insert(i + 1, "\\end_modules")
document.header.insert(i + 1, "noweb")
document.header.insert(i + 1, "\\begin_modules")
i = 0
while True:
i = find_token(document.body, "\\begin_layout Scrap", i)
if i == -1:
break
document.body[i] = "\\begin_layout Chunk"
i = i + 1
## ##
# Conversion hub # Conversion hub
@ -1437,10 +1468,12 @@ convert = [
[444, []], [444, []],
[445, []], [445, []],
[446, [convert_latexargs]], [446, [convert_latexargs]],
[447, [convert_IEEEtran, convert_AASTeX, convert_AGUTeX, convert_IJMP]] [447, [convert_IEEEtran, convert_AASTeX, convert_AGUTeX, convert_IJMP]],
[448, [convert_literate]]
] ]
revert = [ revert = [
[447, [revert_literate]],
[446, [revert_IEEEtran, revert_AASTeX, revert_AGUTeX, revert_IJMP]], [446, [revert_IEEEtran, revert_AASTeX, revert_AGUTeX, revert_IJMP]],
[445, [revert_latexargs]], [445, [revert_latexargs]],
[444, [revert_uop]], [444, [revert_uop]],

View File

@ -1648,8 +1648,6 @@ void Preamble::parse(Parser & p, string const & forceclass,
// Force textclass if the user wanted it // Force textclass if the user wanted it
if (!forceclass.empty()) if (!forceclass.empty())
h_textclass = forceclass; h_textclass = forceclass;
if (noweb_mode && !prefixIs(h_textclass, "literate-"))
h_textclass.insert(0, "literate-");
tc.setName(h_textclass); tc.setName(h_textclass);
if (!tc.load()) { if (!tc.load()) {
cerr << "Error: Could not read layout file for textclass \"" << h_textclass << "\"." << endl; cerr << "Error: Could not read layout file for textclass \"" << h_textclass << "\"." << endl;

View File

@ -581,7 +581,7 @@ int parse_help(string const &, string const &)
"\t-e encoding Set the default encoding (latex name).\n" "\t-e encoding Set the default encoding (latex name).\n"
"\t-f Force overwrite of .lyx files.\n" "\t-f Force overwrite of .lyx files.\n"
"\t-help Print this message and quit.\n" "\t-help Print this message and quit.\n"
"\t-n translate a noweb (aka literate programming) file.\n" "\t-n translate literate programming (noweb, sweave,... ) file.\n"
"\t-skipchildren Do not translate included child documents.\n" "\t-skipchildren Do not translate included child documents.\n"
"\t-roundtrip re-export created .lyx file infile.lyx.lyx to infile.lyx.tex.\n" "\t-roundtrip re-export created .lyx file infile.lyx.lyx to infile.lyx.tex.\n"
"\t-s syntaxfile read additional syntax file.\n" "\t-s syntaxfile read additional syntax file.\n"

View File

@ -1944,27 +1944,27 @@ void copy_file(FileName const & src, string dstname)
} }
/// Parse a NoWeb Scrap section. The initial "<<" is already parsed. /// Parse a NoWeb Chunk section. The initial "<<" is already parsed.
void parse_noweb(Parser & p, ostream & os, Context & context) void parse_noweb(Parser & p, ostream & os, Context & context)
{ {
// assemble the rest of the keyword // assemble the rest of the keyword
string name("<<"); string name("<<");
bool scrap = false; bool chunk = false;
while (p.good()) { while (p.good()) {
Token const & t = p.get_token(); Token const & t = p.get_token();
if (t.asInput() == ">" && p.next_token().asInput() == ">") { if (t.asInput() == ">" && p.next_token().asInput() == ">") {
name += ">>"; name += ">>";
p.get_token(); p.get_token();
scrap = (p.good() && p.next_token().asInput() == "="); chunk = (p.good() && p.next_token().asInput() == "=");
if (scrap) if (chunk)
name += p.get_token().asInput(); name += p.get_token().asInput();
break; break;
} }
name += t.asInput(); name += t.asInput();
} }
if (!scrap || !context.new_layout_allowed || if (!chunk || !context.new_layout_allowed ||
!context.textclass.hasLayout(from_ascii("Scrap"))) { !context.textclass.hasLayout(from_ascii("Chunk"))) {
cerr << "Warning: Could not interpret '" << name cerr << "Warning: Could not interpret '" << name
<< "'. Ignoring it." << endl; << "'. Ignoring it." << endl;
return; return;
@ -1978,7 +1978,7 @@ void parse_noweb(Parser & p, ostream & os, Context & context)
// always must be in an own paragraph. // always must be in an own paragraph.
context.new_paragraph(os); context.new_paragraph(os);
Context newcontext(true, context.textclass, Context newcontext(true, context.textclass,
&context.textclass[from_ascii("Scrap")]); &context.textclass[from_ascii("Chunk")]);
newcontext.check_layout(os); newcontext.check_layout(os);
os << name; os << name;
while (p.good()) { while (p.good()) {
@ -1990,12 +1990,12 @@ void parse_noweb(Parser & p, ostream & os, Context & context)
else { else {
ostringstream oss; ostringstream oss;
Context tmp(false, context.textclass, Context tmp(false, context.textclass,
&context.textclass[from_ascii("Scrap")]); &context.textclass[from_ascii("Chunk")]);
tmp.need_end_layout = true; tmp.need_end_layout = true;
tmp.check_layout(oss); tmp.check_layout(oss);
os << subst(t.asInput(), "\n", oss.str()); os << subst(t.asInput(), "\n", oss.str());
} }
// The scrap chunk is ended by an @ at the beginning of a line. // The chunk is ended by an @ at the beginning of a line.
// After the @ the line may contain a comment and/or // After the @ the line may contain a comment and/or
// whitespace, but nothing else. // whitespace, but nothing else.
if (t.asInput() == "@" && p.prev_token().cat() == catNewline && if (t.asInput() == "@" && p.prev_token().cat() == catNewline &&
@ -2282,6 +2282,12 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
skip_braces(p); skip_braces(p);
} }
else if (t.asInput() == "<"
&& p.next_token().asInput() == "<" && noweb_mode) {
p.get_token();
parse_noweb(p, os, context);
}
else if (t.asInput() == "<" && p.next_token().asInput() == "<") { else if (t.asInput() == "<" && p.next_token().asInput() == "<") {
context.check_layout(os); context.check_layout(os);
begin_inset(os, "Quotes "); begin_inset(os, "Quotes ");
@ -2291,12 +2297,6 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
skip_braces(p); skip_braces(p);
} }
else if (t.asInput() == "<"
&& p.next_token().asInput() == "<" && noweb_mode) {
p.get_token();
parse_noweb(p, os, context);
}
else if (t.cat() == catSpace || (t.cat() == catNewline && ! p.isParagraph())) else if (t.cat() == catSpace || (t.cat() == catNewline && ! p.isParagraph()))
check_space(p, os, context); check_space(p, os, context);

View File

@ -30,8 +30,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in // Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own. // independent branches. Instead add your own.
#define LYX_FORMAT_LYX 447 // uwestoehr: IEEEtran layout revision #define LYX_FORMAT_LYX 448 // kayvan: fix for noweb literate docs
#define LYX_FORMAT_TEX2LYX 447 #define LYX_FORMAT_TEX2LYX 448
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER #ifndef _MSC_VER