File: txt2tex.spl

package info (click to toggle)
spl 1.0~pre6-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,364 kB
  • ctags: 2,070
  • sloc: ansic: 16,614; yacc: 3,182; sh: 299; makefile: 167; xml: 156
file content (122 lines) | stat: -rw-r--r-- 2,425 bytes parent folder | download | duplicates (5)
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);