mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 18:08:10 +00:00
d63b6a3073
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@634 a592a061-630c-0410-9148-cb99ea01b6c8
131 lines
3.8 KiB
Plaintext
131 lines
3.8 KiB
Plaintext
#!@PERL@
|
|
#
|
|
# Copyright (C) 1999 Kayvan A. Sylvan <kayvan@sylvan.com>
|
|
# You are free to use and modify this code under the terms of
|
|
# the GNU General Public Licence version 2 or later.
|
|
#
|
|
# Written with assistance from:
|
|
# Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
|
|
# Amir Karger <karger@post.harvard.edu>
|
|
#
|
|
# $Id: noweb2lyx.in,v 1.2 2000/03/29 23:02:36 karger Exp $
|
|
#
|
|
# NOTE: This file was automatically generated from noweb2lyx.lyx using noweb.
|
|
#
|
|
&usage() if ($#ARGV < 1); # zero or one argument
|
|
if ($ARGV[0] eq "-pre") {
|
|
&usage unless ($#ARGV == 2);
|
|
$input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
|
|
} elsif ($ARGV[0] eq "-post") {
|
|
&usage unless ($#ARGV == 2);
|
|
$input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
|
|
} else {
|
|
&usage unless ($#ARGV == 1);
|
|
$input_file = $ARGV[0]; $output_file = $ARGV[1];
|
|
$pre_only = 0; $post_only = 0;
|
|
}
|
|
sub setup_files {
|
|
my($in, $out) = @_;
|
|
open(INPUT, "<$in") || die "Can not read $in: $!\n";
|
|
open(OUTPUT, ">$out") || die "Can not write $out: $!\n";
|
|
}
|
|
sub usage() {
|
|
print "Usage: noweb2lyx [-pre | -post] input-file output-file
|
|
|
|
If -pre is specified, only pre-processes the input-file for reLyX.
|
|
Similarly, in the case of -post, post-processes reLyX output.
|
|
In case of bugs, Email Kayvan Sylvan <kayvan\@sylvan.com>.\n";
|
|
exit;
|
|
}
|
|
if (!$post_only) {
|
|
if ($pre_only) {
|
|
&setup_files($input_file, $output_file);
|
|
} else {
|
|
$relyx_file = "temp$$";
|
|
&setup_files($input_file, $relyx_file);
|
|
}
|
|
inputline: while(<INPUT>)
|
|
{
|
|
if (/^\s*\<\<.*\>\>=/) { # Beginning of a noweb scrap
|
|
$savedScrap = $_;
|
|
$endLine = "";
|
|
scrapline: while (<INPUT>) {
|
|
last scrapline if /^@\s+/;
|
|
$savedScrap .= $_;
|
|
};
|
|
switch: {
|
|
if (/^@\s+$/) {$savedScrap .= $_; last switch; }
|
|
if (/^@\s+%def.*$/) {$savedScrap .= $_; last switch; }
|
|
if (/^@\s+(.*)$/) {$savedScrap .= "@\n"; $endLine = "$1\n"; }
|
|
}
|
|
print OUTPUT "\\begin{reLyXskip}\n";
|
|
print OUTPUT $savedScrap;
|
|
print OUTPUT "\\end{reLyXskip}\n\n";
|
|
print OUTPUT "$endLine";
|
|
} elsif (/^@\s+(.*)/) { # Beginning of a documentation chunk
|
|
print OUTPUT $1; # We do not need the ``@'' part
|
|
} elsif (/\[\[.+\]\]/) { # noweb quoted code
|
|
s/\[\[.+?\]{2,}/{$&}/g;
|
|
print OUTPUT;
|
|
} else {
|
|
print OUTPUT; # Just let the line pass through
|
|
}
|
|
}
|
|
close(INPUT);
|
|
close(OUTPUT);
|
|
}
|
|
if ((!$pre_only) && (!$post_only)) {
|
|
open(INPUT, "<$relyx_file") ||
|
|
die "Can not read $relyx_file: $!\n";
|
|
$class = "article"; # default if none found
|
|
parse: while(<INPUT>) {
|
|
if (/\\docu[m]entclass{(.*)}/) {
|
|
$class = $1;
|
|
last parse;
|
|
}
|
|
}
|
|
close(INPUT);
|
|
$doc_class = "literate-" . $class;
|
|
die "reLyX returned non-zero: $!\n"
|
|
if (system("reLyX -c $doc_class $relyx_file"));
|
|
}
|
|
if (!$pre_only) {
|
|
if ($post_only) {
|
|
&setup_files("$input_file", "$output_file");
|
|
} else {
|
|
&setup_files("$relyx_file.lyx", "$output_file");
|
|
}
|
|
line: while(<INPUT>)
|
|
{
|
|
if (/\\latex latex/) { # Beginning of some latex code
|
|
if (($line = <INPUT>) =~ /^\s*<</) { # code scrap
|
|
$savedScrap = "\\layout Scrap\n\n$line";
|
|
codeline: while (<INPUT>) {
|
|
$savedScrap .= $_;
|
|
last codeline if /^@\s+/;
|
|
};
|
|
print OUTPUT $savedScrap;
|
|
slurp: while (<INPUT>) {
|
|
last slurp if /\\latex /;
|
|
next slurp if /\\newline/;
|
|
next slurp if /^\s*$/;
|
|
warn "confused by line: $_";
|
|
}
|
|
} else {
|
|
# print the \latex latex line + next line
|
|
print OUTPUT "$_$line";
|
|
}
|
|
next line;
|
|
}
|
|
if (/\[\[.+\]\]/) { # special code for [[var]]
|
|
s/\[\[.+?\]{2,}/\n\\latex latex\n$&\n\\latex default\n/g;
|
|
print OUTPUT;
|
|
next line;
|
|
}
|
|
print OUTPUT; # default
|
|
}
|
|
close(INPUT);
|
|
close(OUTPUT);
|
|
}
|
|
system("rm -f $relyx_file*") unless ($post_only || $pre_only);
|