util: use die() to write a message and exit(1)
[ctxt.git] / tex.c
bloba306bdfee4900d4c8ac9138975e038daf6450e8a
1 #include <stdlib.h>
2 #include "ctxt.h"
4 static void latex_doc_beg(struct doc *doc)
6 doc_write(doc, "\\begin{document}\n");
9 static void latex_doc_end(struct doc *doc)
11 doc_write(doc, "\\end{document}\n");
14 static void latex_head_beg(struct doc *doc, int level)
16 switch (level) {
17 case 0:
18 doc_write(doc, "\\section*{");
19 break;
20 case 1:
21 doc_write(doc, "\\subsection*{");
22 break;
23 default:
24 doc_write(doc, "\\subsection*{");
28 static void latex_head_end(struct doc *doc, int level)
30 doc_write(doc, "}\n");
33 static void latex_par_beg(struct doc *doc)
37 static void latex_par_end(struct doc *doc)
41 static void latex_put(struct doc *doc, char *s)
43 doc_write(doc, s);
46 static void latex_list_beg(struct doc *doc)
48 doc_write(doc, "\\begin{itemize}\n");
51 static void latex_list_end(struct doc *doc)
53 doc_write(doc, "\\end{itemize}\n");
56 static void latex_item_beg(struct doc *doc)
58 doc_write(doc, "\\item ");
61 static void latex_item_end(struct doc *doc)
63 doc_write(doc, "");
66 static void latex_pre_beg(struct doc *doc)
68 doc_write(doc, "\\begin{verbatim}\n");
71 static void latex_pre_end(struct doc *doc)
73 doc_write(doc, "\\end{verbatim}\n");
76 static void latex_formula_beg(struct doc *doc)
78 doc_write(doc, "\\[ ");
81 static void latex_formula_end(struct doc *doc)
83 doc_write(doc, " \\]\n");
86 static void latex_put_emph(struct doc *doc, char *s)
88 doc_write(doc, "\\emph{");
89 doc_write(doc, s);
90 doc_write(doc, "}");
93 static void latex_put_raw(struct doc *doc, char *s)
95 doc_write(doc, s);
98 static void latex_put_ref(struct doc *doc, char *s)
100 doc_write(doc, "\\cite{");
101 doc_write(doc, s);
102 doc_write(doc, "}");
105 static void latex_put_url(struct doc *doc, char *url, char *desc)
107 doc_write(doc, url);
108 if (desc && *desc) {
109 doc_write(doc, " (");
110 doc_write(doc, desc);
111 doc_write(doc, ")");
115 static void latex_table_beg(struct doc *doc, int columns)
117 int i;
118 doc_write(doc, "\\begin{tabular}{|");
119 for (i = 0; i < columns; i++)
120 doc_write(doc, "l|");
121 doc_write(doc, "}\n");
124 static void latex_table_end(struct doc *doc)
126 doc_write(doc, "\\hline\n");
127 doc_write(doc, "\\end{tabular}\n");
130 /* a hack to identify the first entry in each row */
131 static int entcol;
133 static void latex_row_beg(struct doc *doc)
135 entcol = 0;
136 doc_write(doc, "\\hline\n");
139 static void latex_row_end(struct doc *doc)
141 doc_write(doc, "\t\\\\\n");
144 static void latex_entry_beg(struct doc *doc)
146 if (entcol++)
147 doc_write(doc, "\t& ");
150 static void latex_entry_end(struct doc *doc)
154 struct fmt_ops latex_ops = {
155 .doc_beg = latex_doc_beg,
156 .doc_end = latex_doc_end,
157 .head_beg = latex_head_beg,
158 .head_end = latex_head_end,
159 .par_beg = latex_par_beg,
160 .par_end = latex_par_end,
161 .list_beg = latex_list_beg,
162 .list_end = latex_list_end,
163 .item_beg = latex_item_beg,
164 .item_end = latex_item_end,
165 .pre_beg = latex_pre_beg,
166 .pre_end = latex_pre_end,
167 .formula_beg = latex_formula_beg,
168 .formula_end = latex_formula_end,
169 .table_beg = latex_table_beg,
170 .table_end = latex_table_end,
171 .row_beg = latex_row_beg,
172 .row_end = latex_row_end,
173 .entry_beg = latex_entry_beg,
174 .entry_end = latex_entry_end,
175 .put_emph = latex_put_emph,
176 .put_raw = latex_put_raw,
177 .put_ref = latex_put_ref,
178 .put_url = latex_put_url,
179 .put = latex_put