source: wkhtmltox/trunk/fuentes/src/pdf/pdfcommandlineparser.cc @ 51

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

wip

File size: 5.8 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 "pdfcommandlineparser.hh"
23#include <qwebframe.h>
24
25using namespace wkhtmltopdf::settings;
26/*!
27  \file commandlineparser.hh
28  \brief Defines the PdfCommandLineParser class
29*/
30
31/*!
32  \file commandlineparser_p.hh
33  \brief Defines the PdfCommandLineParserPrivate, ArgHandler and Outputter class
34*/
35
36/*!
37  Output the man page to a given file
38  \param fd The file to store the man page
39*/
40void PdfCommandLineParser::manpage(FILE * fd) const {
41        Outputter * o = Outputter::man(fd);
42        outputManName(o);
43        outputSynopsis(o);
44        outputDescripton(o);
45        outputSwitches(o, true, false);
46        outputProxyDoc(o);
47#ifdef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
48        outputHeaderFooterDoc(o);
49        outputOutlineDoc(o);
50        outputTableOfContentDoc(o);
51#else
52        outputNotPatched(o,true);
53#endif
54        outputPageSizes(o);
55        outputArgsFromStdin(o);
56        outputPageBreakDoc(o);
57        outputContact(o);
58        outputAuthors(o);
59        delete o;
60}
61
62/*!
63  Output usage information aka. --help
64  \param fd The file to output the information to
65  \param extended Should we show extended arguments
66*/
67void PdfCommandLineParser::usage(FILE * fd, bool extended) const {
68        Outputter * o = Outputter::text(fd,false);
69        outputName(o);
70        outputSynopsis(o);
71        outputDescripton(o);
72        outputSwitches(o, extended, false);
73#ifndef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
74        outputNotPatched(o, true);
75#endif
76        if (extended) {
77                outputPageSizes(o);
78                outputArgsFromStdin(o);
79                outputProxyDoc(o);
80                outputHeaderFooterDoc(o);
81                outputOutlineDoc(o);
82                outputTableOfContentDoc(o);
83        }
84        outputContact(o);
85        delete o;
86}
87
88/*!
89  Output the readme/manual
90  \param fd The file to output to
91  \param html Do we want the html manual, or the README
92*/
93void PdfCommandLineParser::readme(FILE * fd, bool html) const {
94        Outputter * o = html?Outputter::html(fd):Outputter::text(fd, true);
95        outputDocStart(o);
96        outputContact(o);
97        outputNotPatched(o, false);
98        outputLicense(o);
99        outputAuthors(o);
100        outputSynopsis(o);
101        outputSwitches(o, true, true);
102        outputProxyDoc(o);
103        outputHeaderFooterDoc(o);
104        outputOutlineDoc(o);
105        outputTableOfContentDoc(o);
106        outputPageBreakDoc(o);
107        outputPageSizes(o);
108        outputArgsFromStdin(o);
109        outputStaticProblems(o);
110        outputInstallation(o);
111        outputExamples(o);
112        delete o;
113}
114
115/*!
116 * Load default arguments and put them in the settings structure
117 */
118//void PdfCommandLineParser::loadDefaults() {
119        //settings.in.clear();
120        //settings.proxy.host = "";
121        //foreach(ArgHandler * h, longToHandler)
122        //      h->useDefault(*d);
123
124        //Load configuration from environment
125        //char * val;
126        //const char * vars[] = {"proxy","all_proxy","http_proxy", NULL};
127        //for(int i=0; vars[i]; ++i) {
128        //      if ((val = getenv("proxy"))) {
129        //              bool ok=false;
130        //              Settings::ProxySettings p = Settings::strToProxy(val, &ok);
131        //              if (ok)
132        //                      settings.proxy = p;
133        //      }
134        //}
135//}
136
137
138/*!
139 * Parse command line arguments, and set settings accordingly.
140 * \param argc the number of command line arguments
141 * \param argv a NULL terminated list with the arguments
142 */
143void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fromStdin) {
144        bool defaultMode = false;
145        int arg=1;
146
147        PdfObject def;
148
149        //Parse global options
150        for (;arg < argc;++arg) {
151                if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
152                parseArg(global | page, argc, argv, defaultMode, arg, (char *)&def);
153        }
154
155        if (readArgsFromStdin && !fromStdin) return;
156
157        //Parse page options
158        while (arg < argc-1) {
159                pageSettings.push_back(def);
160                PdfObject & ps = pageSettings.back();
161                int sections = page;
162                if (!strcmp(argv[arg],"cover")) {
163                        ++arg;
164                        if (arg >= argc-1) {
165                                fprintf(stderr, "You need to specify a input file to cover\n\n");
166                                usage(stderr, false);
167                                exit(1);
168                        }
169                        ps.page = QString::fromLocal8Bit(argv[arg++]);
170                        // parse page options and then override the header/footer settings
171                        for (;arg < argc;++arg) {
172                                if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
173                                parseArg(sections, argc, argv, defaultMode, arg, (char*)&ps);
174                        }
175
176                        ps.header.left = ps.header.right = ps.header.center = "";
177                        ps.footer.left = ps.footer.right = ps.footer.center = "";
178                        ps.header.line = ps.footer.line = false;
179                        ps.header.htmlUrl = ps.footer.htmlUrl = "";
180                        ps.includeInOutline = false;
181
182                        continue;
183                } else if (!strcmp(argv[arg],"toc")) {
184                        ++arg;
185                        sections = page | toc;
186                        ps.isTableOfContent = true;
187                } else {
188                        if (!strcmp(argv[arg],"page")) {
189                                ++arg;
190                                if (arg >= argc-1) {
191                                        fprintf(stderr, "You need to specify a input file to page\n\n");
192                                        usage(stderr, false);
193                                        exit(1);
194                                }
195                        }
196                        QByteArray a(argv[arg]);
197                        ps.page = QString::fromLocal8Bit(a);
198                        ++arg;
199                }
200                for (;arg < argc;++arg) {
201                        if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
202                        parseArg(sections, argc, argv, defaultMode, arg, (char*)&ps);
203                }
204        }
205
206        if (pageSettings.size() == 0 || argc < 2) {
207                fprintf(stderr, "You need to specify at least one input file, and exactly one output file\nUse - for stdin or stdout\n\n");
208                usage(stderr, false);
209                exit(1);
210        }
211        globalSettings.out = QString::fromLocal8Bit(argv[argc-1]);
212}
Note: See TracBrowser for help on using the repository browser.