1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
load "file";
function encode_tex(t) {
t =~ s/\\/\\textbackslash{}/g;
t =~ s/~/\\textasciitilde{}/g;
t =~ s/\^/\\textasciicircum{}/g;
t =~ s/(?<!textbackslash|textbackslash\{|$[
]textasciicircum|textasciicircum\{|$[
]textasciitilde|textasciitilde\{$[
])[_&$#{}\^%]/\\$0/g;
t =~ s/([<>]|--+)/\$$1\$/g;
return t;
}
if (not declared parameters or not declared parameters.infile) {
write("Need parameter 'infile' for input file!\n");
exit;
}
if (not declared parameters or not declared parameters.outfile) {
write("Need parameter 'outfile' for output file!\n");
exit;
}
if (not declared parameters or not declared parameters.title) {
write("Need parameter 'title' for document title!\n");
exit;
}
if (not declared parameters or not declared parameters.author) {
write("Need parameter 'author' for document author!\n");
exit;
}
var input_file = parameters.infile;
var output_file = parameters.outfile;
var title = parameters.title;
var author = parameters.author;
var text;
while (input_file =~ s/([^,]+)//)
text ~= file_read($1) ~ "\n\n";
var latex = <>
\documentclass[a4paper]{report}
\begin{document}
\title{${tex::title}}
\author{${tex::author}}
\maketitle
\tableofcontents
</>;
var blank_lines = 0;
while (text =~ s/^(.*)\n//)
{
var line = $1;
if (text =~ /^=+\s*\n/) {
latex ~= "\\chapter{${tex::line}}\n";
text =~ s/^.*\n//;
blank_lines = 0;
} else
if (text =~ /^-+\s*\n/) {
latex ~= "\\section{${tex::line}}\n";
text =~ s/^.*\n//;
blank_lines = 0;
} else
if (text =~ /^~+\s*\n/) {
latex ~= "\\subsection{${tex::line}}\n";
text =~ s/^.*\n//;
blank_lines = 0;
} else
if (text =~ /^\.+\s*\n/) {
latex ~= "\\subsubsection{${tex::line}}\n";
text =~ s/^.*\n//;
blank_lines = 0;
} else
if (line =~ /^\s/) {
latex ~= "\\begin{verbatim}\n";
latex ~= "$line\n";
if (line =~ ,^\s*/\*\s+--\s+(\S+)\s+--\s+\*/\s*$,) {
var prog = file_read($1);
prog =~ s,^/\*.*?\*/\s*,\n,s;
prog =~ s,\n,\n\t,g;
prog =~ s,\s+$,\n,;
latex ~= prog;
}
while (text =~ /^\n*[\t ]/) {
text =~ s/^(.*\n)//;
latex ~= $1;
}
latex ~= "\\end{verbatim}\n";
blank_lines = 0;
} else {
if ( line =~ /\S/ ) {
if (blank_lines >= 2)
latex ~= "\\vspace*{.3cm}\n";
blank_lines = 0;
} else
blank_lines++;
latex ~= "${tex::line}\n";
}
}
latex ~= <>
\end{document}
</>;
latex =~ s/\t/ /g;
file_write(output_file, latex);
|