Skip to content
This repository has been archived by the owner on Jan 2, 2023. It is now read-only.

openssl fix; unicode fixes; new wkhtmltox tool #2858

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -8,7 +8,7 @@ wkhtmltopdf.app/
wkhtmltopdf.xcodeproj/
release*/
test/
static-build/
static-build*/
.obj/
doc/
libdoc/
Expand All @@ -21,3 +21,4 @@ gitcontrol.bat
gitcmd.lnk
*.tar.bz2
*.pyc
*.user
2 changes: 1 addition & 1 deletion scripts/build.py
Expand Up @@ -269,7 +269,7 @@
DEPENDENT_LIBS = {
'openssl': {
'order' : 1,
'url' : 'https://openssl.org/source/openssl-1.0.2f.tar.gz',
'url' : 'https://openssl.org/source/old/1.0.2/openssl-1.0.2f.tar.gz',
'sha1' : '2047c592a6e5a42bd37970bdb4a931428110a927',
'build' : {
'msvc*-win32*': {
Expand Down
2 changes: 1 addition & 1 deletion src/image/image.pro
Expand Up @@ -47,4 +47,4 @@ CONFIG(shared, shared|static) {
}

# Input
SOURCES += wkhtmltoimage.cc imagearguments.cc imagecommandlineparser.cc imagedocparts.cc
SOURCES += wkhtmltoimage.cc imagearguments.cc imagecommandlineparser.cc imagedocparts.cc main.cc
9 changes: 5 additions & 4 deletions src/image/imagecommandlineparser.cc
Expand Up @@ -109,17 +109,18 @@ void ImageCommandLineParser::readme(FILE * fd, bool html) const {
* \param argc the number of command line arguments
* \param argv a NULL terminated list with the arguments
*/
void ImageCommandLineParser::parseArguments(int argc, const char ** argv, bool final) {
void ImageCommandLineParser::parseArguments(const QStringList& argv, bool final) {
settings.in="";
settings.out="";
bool defaultMode=false;
int argc = argv.size();
for (int i=1; i < argc; ++i) {
if (i==argc-2 && (argv[i][0] != '-' || argv[i][1] == '\0')) { // the arg before last (in)
settings.in = QString::fromLocal8Bit(argv[i]);
settings.in = argv[i];
} else if (i==argc-1 && (argv[i][0] != '-' || argv[i][1] == '\0')) { // the last arg (out)
settings.out = QString::fromLocal8Bit(argv[i]);
settings.out = argv[i];
} else {
parseArg(global, argc, argv, defaultMode, i, 0);
parseArg(global, argv, defaultMode, i, 0);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/image/imagecommandlineparser.hh
Expand Up @@ -54,7 +54,7 @@ public:
virtual QString appName() const {return "wkhtmltoimage";}

//void loadDefaults();
void parseArguments(int argc, const char ** argv, bool final=false);
void parseArguments(const QStringList &argv, bool final=false);

};
#endif //__IMAGECOMMANDLINEPARSER_HH__
25 changes: 25 additions & 0 deletions src/image/main.cc
@@ -0,0 +1,25 @@
// -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
// vi:set ts=4 sts=4 sw=4 noet :
//
// Copyright 2010, 2011 wkhtmltopdf authors
//
// This file is part of wkhtmltopdf.
//
// wkhtmltopdf is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// wkhtmltopdf is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with wkhtmltopdf. If not, see <http://www.gnu.org/licenses/>.

#include "declarations.hh"

int main(int argc, char * argv[]) {
return toimage(argc, argv);
}
21 changes: 13 additions & 8 deletions src/image/wkhtmltoimage.cc
Expand Up @@ -25,31 +25,36 @@
#include <wkhtmltox/imageconverter.hh>
#include <wkhtmltox/imagesettings.hh>
#include <wkhtmltox/utilities.hh>
#include "declarations.hh"

#if defined(Q_OS_UNIX)
#include <locale.h>
#endif

int main(int argc, char** argv) {
int toimage(int argc, char** argv) {
#if defined(Q_OS_UNIX)
setlocale(LC_ALL, "");
#endif
//This will store all our settings
wkhtmltopdf::settings::ImageGlobal settings;
//Create a command line parser to parse commandline arguments
ImageCommandLineParser parser(settings);
//Parse the arguments
parser.parseArguments(argc, (const char**)argv);


bool use_graphics=true;
bool use_graphics=true;
#if defined(Q_OS_UNIX) || defined(Q_OS_MAC)
#ifdef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
use_graphics=settings.useGraphics;
if (!use_graphics) QApplication::setGraphicsSystem("raster");
use_graphics=settings.useGraphics;
if (!use_graphics) QApplication::setGraphicsSystem("raster");
#endif
#endif
QApplication a(argc, argv, use_graphics);
QApplication a(argc, argv, use_graphics);
QStringList args = a.arguments();
if (argc > 1 && QRegExp("image|pdf").exactMatch(args.at(1)))
args.removeAt(1);

//Parse the arguments
parser.parseArguments(args);

MyLooksStyle * style = new MyLooksStyle();
a.setStyle(style);

Expand Down
4 changes: 2 additions & 2 deletions src/lib/pdf_c_bindings.cc
Expand Up @@ -357,11 +357,11 @@ CAPI(void) wkhtmltopdf_destroy_global_settings(wkhtmltopdf_global_settings * obj
*
* \param settings The settings object to change
* \param name The name of the setting
* \param value The new value for the setting
* \param value The new value for the setting (UTF-8 encoded)
* \returns 1 if the setting was updated successfully and 0 otherwise.
*/
CAPI(int) wkhtmltopdf_set_global_setting(wkhtmltopdf_global_settings * settings, const char * name, const char * value) {
return reinterpret_cast<settings::PdfGlobal *>(settings)->set(name, value);
return reinterpret_cast<settings::PdfGlobal *>(settings)->set(name, QString::fromUtf8(value));
}

/**
Expand Down
25 changes: 25 additions & 0 deletions src/pdf/main.cc
@@ -0,0 +1,25 @@
// -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
// vi:set ts=4 sts=4 sw=4 noet :
//
// Copyright 2010, 2011 wkhtmltopdf authors
//
// This file is part of wkhtmltopdf.
//
// wkhtmltopdf is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// wkhtmltopdf is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with wkhtmltopdf. If not, see <http://www.gnu.org/licenses/>.

#include "declarations.hh"

int main(int argc, char * argv[]) {
return topdf(argc, argv);
}
2 changes: 1 addition & 1 deletion src/pdf/pdf.pro
Expand Up @@ -48,4 +48,4 @@ CONFIG(shared, shared|static) {

#Application part
SOURCES += wkhtmltopdf.cc pdfarguments.cc pdfcommandlineparser.cc \
pdfdocparts.cc
pdfdocparts.cc main.cc
6 changes: 3 additions & 3 deletions src/pdf/pdfarguments.cc
Expand Up @@ -121,7 +121,7 @@ struct OrientationTM: public SomeSetterTM<QPrinter::Orientation> {
typedef SomeSetter<OrientationTM> OrientationSetter;

struct DefaultTocFunc {
bool operator()(const char **, CommandLineParserBase &, char *) {
bool operator()(const QStringList&, CommandLineParserBase &, char *) {
QFile file;
file.open(stdout, QIODevice::WriteOnly | QIODevice::Text);
QTextStream stream(&file);
Expand All @@ -136,7 +136,7 @@ struct DefaultTocFunc {
Set the default header
*/
struct DefaultHeaderFunc {
bool operator()(const char **, CommandLineParserBase & p, char * page) {
bool operator()(const QStringList&, CommandLineParserBase & p, char * page) {
reinterpret_cast<PdfObject*>(page)->header.left="[webpage]";
reinterpret_cast<PdfObject*>(page)->header.right="[page]/[topage]";
reinterpret_cast<PdfObject*>(page)->header.line=true;
Expand All @@ -149,7 +149,7 @@ struct DefaultHeaderFunc {
Setup default book mode
*/
struct BookFunc {
bool operator()(const char **, CommandLineParserBase &) {
bool operator()(const QStringList&, CommandLineParserBase &) {
//p.settings.header.left="[section]";
//p.settings.header.right="[page]/[toPage]";
//p.settings.header.line=true;
Expand Down
28 changes: 14 additions & 14 deletions src/pdf/pdfcommandlineparser.cc
Expand Up @@ -140,16 +140,17 @@ void PdfCommandLineParser::readme(FILE * fd, bool html) const {
* \param argc the number of command line arguments
* \param argv a NULL terminated list with the arguments
*/
void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fromStdin) {
void PdfCommandLineParser::parseArguments(const QStringList& argv, bool fromStdin) {
bool defaultMode = false;
int arg=1;
int argc = argv.size();

PdfObject def;

//Parse global options
for (;arg < argc;++arg) {
if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
parseArg(global | page, argc, argv, defaultMode, arg, (char *)&def);
if (argv[arg][0] != '-' || argv[arg].size() == 1 || defaultMode) break;
parseArg(global | page, argv, defaultMode, arg, (char *)&def);
}

if (readArgsFromStdin && !fromStdin) return;
Expand All @@ -159,18 +160,18 @@ void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fro
pageSettings.push_back(def);
PdfObject & ps = pageSettings.back();
int sections = page;
if (!strcmp(argv[arg],"cover")) {
if (argv[arg] == "cover") {
++arg;
if (arg >= argc-1) {
fprintf(stderr, "You need to specify a input file to cover\n\n");
usage(stderr, false);
exit(1);
}
ps.page = QString::fromLocal8Bit(argv[arg++]);
ps.page = argv[arg++];
// parse page options and then override the header/footer settings
for (;arg < argc;++arg) {
if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
parseArg(sections, argc, argv, defaultMode, arg, (char*)&ps);
if (argv[arg][0] != '-' || argv[arg].size() == 1 || defaultMode) break;
parseArg(sections, argv, defaultMode, arg, (char*)&ps);
}

ps.header.left = ps.header.right = ps.header.center = "";
Expand All @@ -180,26 +181,25 @@ void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fro
ps.includeInOutline = false;

continue;
} else if (!strcmp(argv[arg],"toc")) {
} else if (argv[arg] == "toc") {
++arg;
sections = page | toc;
ps.isTableOfContent = true;
} else {
if (!strcmp(argv[arg],"page")) {
if (argv[arg] == "page") {
++arg;
if (arg >= argc-1) {
fprintf(stderr, "You need to specify a input file to page\n\n");
usage(stderr, false);
exit(1);
}
}
QByteArray a(argv[arg]);
ps.page = QString::fromLocal8Bit(a);
ps.page = argv[arg];
++arg;
}
for (;arg < argc;++arg) {
if (argv[arg][0] != '-' || argv[arg][1] == '\0' || defaultMode) break;
parseArg(sections, argc, argv, defaultMode, arg, (char*)&ps);
if (argv[arg][0] != '-' || argv[arg].size() == 1 || defaultMode) break;
parseArg(sections, argv, defaultMode, arg, (char*)&ps);
}
}

Expand All @@ -208,5 +208,5 @@ void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fro
usage(stderr, false);
exit(1);
}
globalSettings.out = QString::fromLocal8Bit(argv[argc-1]);
globalSettings.out =argv[argc-1];
}
2 changes: 1 addition & 1 deletion src/pdf/pdfcommandlineparser.hh
Expand Up @@ -61,7 +61,7 @@ public:
virtual void manpage(FILE * fd) const;
virtual void readme(FILE * fd, bool html) const;

void parseArguments(int argc, const char ** argv, bool fromStdin=false);
void parseArguments(const QStringList& argv, bool fromStdin=false);

virtual char * mapAddress(char * d, char * ns) const {
const char * _od = reinterpret_cast<const char *>(&od);
Expand Down
42 changes: 23 additions & 19 deletions src/pdf/wkhtmltopdf.cc
Expand Up @@ -33,6 +33,7 @@
#include <wkhtmltox/pdfconverter.hh>
#include <wkhtmltox/pdfsettings.hh>
#include <wkhtmltox/utilities.hh>
#include "declarations.hh"

#if defined(Q_OS_UNIX)
#include <locale.h>
Expand All @@ -49,7 +50,7 @@ using namespace wkhtmltopdf;
* \param nargv on return will hold the arguments read and be NULL terminated
*/
enum State {skip, tok, q1, q2, q1_esc, q2_esc, tok_esc};
void parseString(char * buff, int &nargc, char **nargv) {
void parseString(char * buff, int &nargc, QStringList& nargv) {
State state = skip;
int write_start=0;
int write=0;
Expand All @@ -72,7 +73,8 @@ void parseString(char * buff, int &nargc, char **nargv) {
next_state=skip;
if (write_start != write) {
buff[write++]='\0';
nargv[nargc++] = buff+write_start;
nargc++;
nargv.append(QString::fromUtf8(buff+write_start));
if (nargc > 998) exit(1);
}
write_start = write;
Expand Down Expand Up @@ -111,12 +113,13 @@ void parseString(char * buff, int &nargc, char **nargv) {
//Remember the last parameter
if (write_start != write) {
buff[write++]='\0';
nargv[nargc++] = buff+write_start;
}
nargv[nargc]=NULL;
nargc++;
nargv.append(QString::fromUtf8(buff+write_start));
}
nargc = nargv.size();
}

int main(int argc, char * argv[]) {
int topdf(int argc, char * argv[]) {
#if defined(Q_OS_UNIX)
setlocale(LC_ALL, "");
#endif
Expand All @@ -129,28 +132,29 @@ int main(int argc, char * argv[]) {
//Setup default values in settings
//parser.loadDefaults();

//Parse the arguments
parser.parseArguments(argc, (const char**)argv);

//Construct QApplication required for printing
bool use_graphics=true;
//Construct QApplication required for printing
bool use_graphics=true;
#if defined(Q_OS_UNIX) || defined(Q_OS_MAC)
#ifdef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
use_graphics=globalSettings.useGraphics;
if (!use_graphics) QApplication::setGraphicsSystem("raster");
use_graphics=globalSettings.useGraphics;
if (!use_graphics) QApplication::setGraphicsSystem("raster");
#endif
#endif
QApplication a(argc, argv, use_graphics);
QApplication a(argc, argv, use_graphics);
QStringList args = a.arguments();
if (argc > 1 && QRegExp("image|pdf").exactMatch(args.at(1)))
args.removeAt(1);

//Parse the arguments
parser.parseArguments(args);
MyLooksStyle * style = new MyLooksStyle();
a.setStyle(style);

if (parser.readArgsFromStdin) {
char buff[20400];
char *nargv[1000];
nargv[0] = argv[0];
for (int i=0; i < argc; ++i) nargv[i] = argv[i];
QStringList nargv = args;
while (fgets(buff,20398,stdin)) {
int nargc=argc;
int nargc=args.size();
parseString(buff,nargc,nargv);

PdfGlobal globalSettings;
Expand All @@ -160,7 +164,7 @@ int main(int argc, char * argv[]) {
//Setup default values in settings
//parser.loadDefaults();
//Parse the arguments
parser.parseArguments(nargc, (const char**)nargv, true);
parser.parseArguments(nargv, true);

PdfConverter converter(globalSettings);
ProgressFeedback feedback(globalSettings.quiet, converter);
Expand Down