source: wkhtmltox/trunk/fuentes/src/shared/htmloutputter.cc @ 51

Last change on this file since 51 was 51, checked in by mabarracus, 4 years ago

wip

File size: 3.7 KB
Line 
1// -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
2// vi:set ts=4 sts=4 sw=4 noet :
3//
4// Copyright 2010, 2011 wkhtmltopdf authors
5//
6// This file is part of wkhtmltopdf.
7//
8// wkhtmltopdf is free software: you can redistribute it and/or modify
9// it under the terms of the GNU Lesser General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12//
13// wkhtmltopdf is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU Lesser General Public License
19// along with wkhtmltopdf.  If not, see <http://www.gnu.org/licenses/>.
20
21#include "outputter.hh"
22#include <QTextDocument>
23
24#if QT_VERSION >= 0x050000
25#define S(x) x.toHtmlEscaped().toUtf8().constData()
26#else
27#define S(x) Qt::escape(x).toUtf8().constData()
28#endif
29
30class HtmlOutputter: public Outputter {
31private:
32        FILE * fd;
33        bool ordered;
34public:
35        HtmlOutputter(FILE * _): fd(_) {
36                fprintf(fd,
37                                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
38                                "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\" dir=\"ltr\">\n"
39                                "<head>\n"
40                                "  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"
41                                "  <title>wkhtmltopdf - Manual</title>\n"
42                                "  <style type=\"text/css\">\n"
43                                "    body {width: 70em}\n"
44                                "    .short {font-weight: bold; width:2em}\n"
45                                "    .long {font-weight: bold; width: 15em}\n"
46                                "    .arg {font-style: italic; width: 12em}\n"
47                                "    tr {vertical-align: top}\n"
48                                "  </style>\n"
49                                "</head><body>");
50        }
51
52        ~HtmlOutputter() {
53                fprintf(fd,"</body></html>\n");
54        }
55
56        void beginSection(const QString & name) {
57                fprintf(fd, "<a name=\"%s\"><h1>%s</h1></a>\n", S(name), S(name));
58        }
59
60        void endSection() {
61        }
62
63        void beginParagraph() {
64                fprintf(fd,"<p>");
65        }
66
67        void endParagraph() {
68                fprintf(fd,"</p>\n");
69        }
70
71        void text(const QString & t) {
72                fprintf(fd, "%s", S(t));
73        }
74
75        void sectionLink(const QString & s) {
76                fprintf(fd, "<a href=\"#%s\">%s</a>", S(s), S(s));
77        }
78
79        void bold(const QString & t) {
80                fprintf(fd, "<b>%s</b>", S(t));
81        }
82
83        void italic(const QString & t) {
84                fprintf(fd, "<i>%s</i>", S(t));
85        }
86
87        void link(const QString & t) {
88                fprintf(fd, "<a href=\"%s\">%s</a>", S(t),S(t));
89        }
90
91        void verbatim(const QString & t) {
92                fprintf(fd, "<pre>%s</pre>", S(t));
93        }
94
95        void beginList(bool o) {
96                ordered = o;
97                fprintf(fd, ordered?"<ol>":"<ul>");
98        }
99
100        void endList() {
101                fprintf(fd, ordered?"</ol>":"</ul>");
102        }
103
104        void listItem(const QString & s) {
105                fprintf(fd, "<li>%s</li>\n", S(s));
106        }
107
108        void beginSwitch() {
109                fprintf(fd, "<table>\n");
110        }
111
112        void cswitch(const ArgHandler * h) {
113                fprintf(fd, "<tr><td class=\"short\">");
114                if (h->shortSwitch)
115                        fprintf(fd, "-%c,",h->shortSwitch);
116                fprintf(fd, "</td><td class=\"long\">--%s%s</td><td class=\"arg\">",S(h->longName),
117                                (h->qthack?"<span style=\"font-weight: normal; font-size: 80%; color:red;\">*</span>":""));
118                foreach (const QString & arg, h->argn)
119                        fprintf(fd, "&lt;%s&gt; ",S(arg));
120                fprintf(fd, "</td><td class=\"desc\">%s</td></tr>\n",S(h->getDesc()));
121        }
122
123        void endSwitch() {
124                fprintf(fd, "</table>\n");
125                fprintf(fd, "<p>Items marked <span style=\"font-weight: normal; font-size: 80%%; color:red;\">*</span> are only available using patched QT.</p>");
126        }
127
128};
129
130/*!
131  Create a Html outputter
132  \param fd A file description to output to
133*/
134  Outputter * Outputter::html(FILE * fd) {
135        return new HtmlOutputter(fd);
136}
Note: See TracBrowser for help on using the repository browser.