mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
stick DLL_EXPORT in front of every public method of every public class
git-svn-id: svn+q:///qpdf/trunk@688 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
parent
ed13d9074e
commit
1e74c03acd
@ -8,16 +8,26 @@
|
||||
#ifndef __BUFFER_HH__
|
||||
#define __BUFFER_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
class Buffer
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Buffer();
|
||||
DLL_EXPORT
|
||||
Buffer(unsigned long size);
|
||||
DLL_EXPORT
|
||||
Buffer(Buffer const&);
|
||||
DLL_EXPORT
|
||||
Buffer& operator=(Buffer const&);
|
||||
DLL_EXPORT
|
||||
~Buffer();
|
||||
DLL_EXPORT
|
||||
unsigned long getSize() const;
|
||||
DLL_EXPORT
|
||||
unsigned char const* getBuffer() const;
|
||||
DLL_EXPORT
|
||||
unsigned char* getBuffer();
|
||||
|
||||
private:
|
||||
|
@ -30,6 +30,8 @@
|
||||
#ifndef __PIPELINE_HH__
|
||||
#define __PIPELINE_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <qpdf/QEXC.hh>
|
||||
|
||||
class Pipeline
|
||||
@ -38,24 +40,30 @@ class Pipeline
|
||||
class Exception: public QEXC::General
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Exception(std::string const& message) :
|
||||
QEXC::General(message)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
virtual ~Exception() throw()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
DLL_EXPORT
|
||||
Pipeline(char const* identifier, Pipeline* next);
|
||||
|
||||
DLL_EXPORT
|
||||
virtual ~Pipeline();
|
||||
|
||||
// Subclasses should implement write and finish to do their jobs
|
||||
// and then, if they are not end-of-line pipelines, call
|
||||
// getNext()->write or getNext()->finish.
|
||||
DLL_EXPORT
|
||||
virtual void write(unsigned char* data, int len) = 0;
|
||||
DLL_EXPORT
|
||||
virtual void finish() = 0;
|
||||
|
||||
protected:
|
||||
|
@ -16,14 +16,20 @@
|
||||
class Pl_Count: public Pipeline
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Pl_Count(char const* identifier, Pipeline* next);
|
||||
DLL_EXPORT
|
||||
virtual ~Pl_Count();
|
||||
DLL_EXPORT
|
||||
virtual void write(unsigned char*, int);
|
||||
DLL_EXPORT
|
||||
virtual void finish();
|
||||
// Returns the number of bytes written
|
||||
DLL_EXPORT
|
||||
int getCount() const;
|
||||
// Returns the last character written, or '\0' if no characters
|
||||
// have been written (in which case getCount() returns 0)
|
||||
DLL_EXPORT
|
||||
unsigned char getLastChar() const;
|
||||
|
||||
private:
|
||||
|
@ -19,9 +19,13 @@
|
||||
class Pl_Discard: public Pipeline
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Pl_Discard();
|
||||
DLL_EXPORT
|
||||
virtual ~Pl_Discard();
|
||||
DLL_EXPORT
|
||||
virtual void write(unsigned char*, int);
|
||||
DLL_EXPORT
|
||||
virtual void finish();
|
||||
};
|
||||
|
||||
|
@ -18,11 +18,13 @@ class Pl_Flate: public Pipeline
|
||||
class Exception: public Pipeline::Exception
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Exception(std::string const& message) :
|
||||
Pipeline::Exception(message)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
virtual ~Exception() throw ()
|
||||
{
|
||||
}
|
||||
@ -32,11 +34,15 @@ class Pl_Flate: public Pipeline
|
||||
|
||||
enum action_e { a_inflate, a_deflate };
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Flate(char const* identifier, Pipeline* next,
|
||||
action_e action, int out_bufsize = def_bufsize);
|
||||
DLL_EXPORT
|
||||
virtual ~Pl_Flate();
|
||||
|
||||
DLL_EXPORT
|
||||
virtual void write(unsigned char* data, int len);
|
||||
DLL_EXPORT
|
||||
virtual void finish();
|
||||
|
||||
private:
|
||||
|
@ -24,11 +24,13 @@ class Pl_StdioFile: public Pipeline
|
||||
class Exception: public Pipeline::Exception
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Exception(std::string const& message) :
|
||||
Pipeline::Exception(message)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
virtual ~Exception() throw ()
|
||||
{
|
||||
}
|
||||
@ -36,10 +38,14 @@ class Pl_StdioFile: public Pipeline
|
||||
|
||||
// f is externally maintained; this class just writes to and
|
||||
// flushes it. It does not close it.
|
||||
DLL_EXPORT
|
||||
Pl_StdioFile(char const* identifier, FILE* f);
|
||||
DLL_EXPORT
|
||||
virtual ~Pl_StdioFile();
|
||||
|
||||
DLL_EXPORT
|
||||
virtual void write(unsigned char* buf, int len);
|
||||
DLL_EXPORT
|
||||
virtual void finish();
|
||||
|
||||
private:
|
||||
|
@ -8,6 +8,8 @@
|
||||
#ifndef __QEXC_HH__
|
||||
#define __QEXC_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <string>
|
||||
#include <exception>
|
||||
#include <errno.h>
|
||||
@ -69,13 +71,19 @@ namespace QEXC
|
||||
// Application/library code should not generally catch this
|
||||
// directly. See above for caveats.
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Base();
|
||||
DLL_EXPORT
|
||||
Base(std::string const& message);
|
||||
DLL_EXPORT
|
||||
virtual ~Base() throw() {}
|
||||
DLL_EXPORT
|
||||
virtual std::string const& unparse() const;
|
||||
DLL_EXPORT
|
||||
virtual const char* what() const throw();
|
||||
|
||||
protected:
|
||||
DLL_EXPORT
|
||||
void setMessage(std::string const& message);
|
||||
|
||||
private:
|
||||
@ -87,8 +95,11 @@ namespace QEXC
|
||||
// This is the base class for normal user/library-defined
|
||||
// error conditions.
|
||||
public:
|
||||
DLL_EXPORT
|
||||
General();
|
||||
DLL_EXPORT
|
||||
General(std::string const& message);
|
||||
DLL_EXPORT
|
||||
virtual ~General() throw() {};
|
||||
};
|
||||
|
||||
@ -100,15 +111,20 @@ namespace QEXC
|
||||
class Internal: public Base
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Internal(std::string const& message);
|
||||
DLL_EXPORT
|
||||
virtual ~Internal() throw() {};
|
||||
};
|
||||
|
||||
class System: public General
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
System(std::string const& prefix, int sys_errno);
|
||||
DLL_EXPORT
|
||||
virtual ~System() throw() {};
|
||||
DLL_EXPORT
|
||||
int getErrno() const;
|
||||
|
||||
private:
|
||||
|
@ -13,6 +13,8 @@
|
||||
#include <map>
|
||||
#include <list>
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <qpdf/QPDFXRefEntry.hh>
|
||||
#include <qpdf/QPDFObjectHandle.hh>
|
||||
#include <qpdf/QPDFTokenizer.hh>
|
||||
@ -26,7 +28,9 @@ class QPDFExc;
|
||||
class QPDF
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
QPDF();
|
||||
DLL_EXPORT
|
||||
~QPDF();
|
||||
|
||||
// Associate a file with a QPDF object and do initial parsing of
|
||||
@ -36,6 +40,7 @@ class QPDF
|
||||
// potentially ask for information about the PDF file are called.
|
||||
// Prior to calling this, the only methods that are allowed are
|
||||
// those that set parameters.
|
||||
DLL_EXPORT
|
||||
void processFile(char const* filename, char const* password = "");
|
||||
|
||||
// Parameter settings
|
||||
@ -44,18 +49,21 @@ class QPDF
|
||||
// (one that contains both cross-reference streams and
|
||||
// cross-reference tables). This can be useful for testing to
|
||||
// ensure that a hybrid file would work with an older reader.
|
||||
DLL_EXPORT
|
||||
void setIgnoreXRefStreams(bool);
|
||||
|
||||
// By default, any warnings are issued to stderr as they are
|
||||
// encountered. If this is called with a true value, reporting of
|
||||
// warnings is suppressed. You may still retrieve warnings by
|
||||
// calling getWarnings.
|
||||
DLL_EXPORT
|
||||
void setSuppressWarnings(bool);
|
||||
|
||||
// By default, QPDF will try to recover if it finds certain types
|
||||
// of errors in PDF files. If turned off, it will throw an
|
||||
// exception on the first such problem it finds without attempting
|
||||
// recovery.
|
||||
DLL_EXPORT
|
||||
void setAttemptRecovery(bool);
|
||||
|
||||
// Other public methods
|
||||
@ -65,19 +73,26 @@ class QPDF
|
||||
// throws an exception. Note that if setSuppressWarnings was not
|
||||
// called or was called with a false value, any warnings retrieved
|
||||
// here will have already been issued to stderr.
|
||||
DLL_EXPORT
|
||||
std::vector<std::string> getWarnings();
|
||||
|
||||
DLL_EXPORT
|
||||
std::string getFilename() const;
|
||||
DLL_EXPORT
|
||||
std::string getPDFVersion() const;
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getTrailer();
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getRoot();
|
||||
|
||||
// Install this object handle as an indirect object and return an
|
||||
// indirect reference to it.
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle makeIndirectObject(QPDFObjectHandle);
|
||||
|
||||
// Retrieve an object by object ID and generation. Returns an
|
||||
// indirect reference to it.
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getObjectByID(int objid, int generation);
|
||||
|
||||
// Encryption support
|
||||
@ -85,6 +100,7 @@ class QPDF
|
||||
struct EncryptionData
|
||||
{
|
||||
// This class holds data read from the encryption dictionary.
|
||||
DLL_EXPORT
|
||||
EncryptionData(int V, int R, int Length_bytes, int P,
|
||||
std::string const& O, std::string const& U,
|
||||
std::string const& id1) :
|
||||
@ -107,28 +123,35 @@ class QPDF
|
||||
std::string id1;
|
||||
};
|
||||
|
||||
DLL_EXPORT
|
||||
static void trim_user_password(std::string& user_password);
|
||||
DLL_EXPORT
|
||||
static std::string compute_data_key(
|
||||
std::string const& encryption_key, int objid, int generation);
|
||||
DLL_EXPORT
|
||||
static std::string compute_encryption_key(
|
||||
std::string const& password, EncryptionData const& data);
|
||||
|
||||
DLL_EXPORT
|
||||
static void compute_encryption_O_U(
|
||||
char const* user_password, char const* owner_password,
|
||||
int V, int R, int key_len, int P,
|
||||
std::string const& id1,
|
||||
std::string& O, std::string& U);
|
||||
DLL_EXPORT
|
||||
std::string const& getUserPassword() const;
|
||||
|
||||
// Linearization support
|
||||
|
||||
// Returns true iff the file starts with a linearization parameter
|
||||
// dictionary. Does no additional validation.
|
||||
DLL_EXPORT
|
||||
bool isLinearized();
|
||||
|
||||
// Performs various sanity checks on a linearized file. Return
|
||||
// true if no errors or warnings. Otherwise, return false and
|
||||
// output errors and warnings to stdout.
|
||||
DLL_EXPORT
|
||||
bool checkLinearization();
|
||||
|
||||
// Calls checkLinearization() and, if possible, prints normalized
|
||||
@ -136,9 +159,11 @@ class QPDF
|
||||
// includes adding min values to delta values and adjusting
|
||||
// offsets based on the location and size of the primary hint
|
||||
// stream.
|
||||
DLL_EXPORT
|
||||
void showLinearizationData();
|
||||
|
||||
// Shows the contents of the cross-reference table
|
||||
DLL_EXPORT
|
||||
void showXRefTable();
|
||||
|
||||
// Optimization support -- see doc/optimization. Implemented in
|
||||
@ -152,26 +177,31 @@ class QPDF
|
||||
// This is available so that the test suite can make sure that a
|
||||
// linearized file is already optimized. When called in this way,
|
||||
// optimize() still populates the object <-> user maps
|
||||
DLL_EXPORT
|
||||
void optimize(std::map<int, int> const& object_stream_data,
|
||||
bool allow_changes = true);
|
||||
|
||||
// Replace all references to indirect objects that are "scalars"
|
||||
// (i.e., things that don't have children: not arrays, streams, or
|
||||
// dictionaries) with direct objects.
|
||||
DLL_EXPORT
|
||||
void flattenScalarReferences();
|
||||
|
||||
// Decode all streams, discarding the output. Used to check
|
||||
// correctness of stream encoding.
|
||||
DLL_EXPORT
|
||||
void decodeStreams();
|
||||
|
||||
// For QPDFWriter:
|
||||
|
||||
// Remove /ID, /Encrypt, and /Prev keys from the trailer
|
||||
// dictionary since these are regenerated during write.
|
||||
DLL_EXPORT
|
||||
void trimTrailerForWrite();
|
||||
|
||||
// Get lists of all objects in order according to the part of a
|
||||
// linearized file that they belong to.
|
||||
DLL_EXPORT
|
||||
void getLinearizedParts(
|
||||
std::map<int, int> const& object_stream_data,
|
||||
std::vector<QPDFObjectHandle>& part4,
|
||||
@ -180,6 +210,7 @@ class QPDF
|
||||
std::vector<QPDFObjectHandle>& part8,
|
||||
std::vector<QPDFObjectHandle>& part9);
|
||||
|
||||
DLL_EXPORT
|
||||
void generateHintStream(std::map<int, QPDFXRefEntry> const& xref,
|
||||
std::map<int, size_t> const& lengths,
|
||||
std::map<int, int> const& obj_renumber,
|
||||
@ -187,15 +218,18 @@ class QPDF
|
||||
int& S, int& O);
|
||||
|
||||
// Map object to object stream that contains it
|
||||
DLL_EXPORT
|
||||
void getObjectStreamData(std::map<int, int>&);
|
||||
// Get a list of objects that would be permitted in an object
|
||||
// stream
|
||||
DLL_EXPORT
|
||||
std::vector<int> getCompressibleObjects();
|
||||
|
||||
// Convenience routines for common functions. See also
|
||||
// QPDFObjectHandle.hh for additional convenience routines.
|
||||
|
||||
// Traverse page tree return all /Page objects.
|
||||
DLL_EXPORT
|
||||
std::vector<QPDFObjectHandle> const& getAllPages();
|
||||
|
||||
// Resolver class is restricted to QPDFObjectHandle so that only
|
||||
|
@ -13,9 +13,12 @@
|
||||
class QPDFExc: public QEXC::General
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
QPDFExc(std::string const& message);
|
||||
DLL_EXPORT
|
||||
QPDFExc(std::string const& filename, int offset,
|
||||
std::string const& message);
|
||||
DLL_EXPORT
|
||||
virtual ~QPDFExc() throw ();
|
||||
};
|
||||
|
||||
|
@ -8,12 +8,16 @@
|
||||
#ifndef __QPDFOBJECT_HH__
|
||||
#define __QPDFOBJECT_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <string>
|
||||
|
||||
class QPDFObject
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
virtual ~QPDFObject() {}
|
||||
DLL_EXPORT
|
||||
virtual std::string unparse() = 0;
|
||||
};
|
||||
|
||||
|
@ -13,6 +13,8 @@
|
||||
#include <set>
|
||||
#include <map>
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <qpdf/PointerHolder.hh>
|
||||
#include <qpdf/Buffer.hh>
|
||||
|
||||
@ -24,37 +26,58 @@ class QPDF;
|
||||
class QPDFObjectHandle
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle();
|
||||
DLL_EXPORT
|
||||
bool isInitialized() const;
|
||||
|
||||
// Exactly one of these will return true for any object.
|
||||
DLL_EXPORT
|
||||
bool isBool();
|
||||
DLL_EXPORT
|
||||
bool isNull();
|
||||
DLL_EXPORT
|
||||
bool isInteger();
|
||||
DLL_EXPORT
|
||||
bool isReal();
|
||||
DLL_EXPORT
|
||||
bool isName();
|
||||
DLL_EXPORT
|
||||
bool isString();
|
||||
DLL_EXPORT
|
||||
bool isArray();
|
||||
DLL_EXPORT
|
||||
bool isDictionary();
|
||||
DLL_EXPORT
|
||||
bool isStream();
|
||||
|
||||
// This returns true in addition to the query for the specific
|
||||
// type for indirect objects.
|
||||
DLL_EXPORT
|
||||
bool isIndirect();
|
||||
|
||||
// True for everything except array, dictionary, and stream
|
||||
DLL_EXPORT
|
||||
bool isScalar();
|
||||
|
||||
// Public factory methods
|
||||
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newNull();
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newBool(bool value);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newInteger(int value);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newReal(std::string const& value);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newName(std::string const& name);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newString(std::string const& str);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newArray(
|
||||
std::vector<QPDFObjectHandle> const& items);
|
||||
DLL_EXPORT
|
||||
static QPDFObjectHandle newDictionary(
|
||||
std::map<std::string, QPDFObjectHandle> const& items);
|
||||
|
||||
@ -63,55 +86,74 @@ class QPDFObjectHandle
|
||||
// type, an exception is thrown.
|
||||
|
||||
// Methods for bool objects
|
||||
DLL_EXPORT
|
||||
bool getBoolValue();
|
||||
|
||||
// Methods for integer objects
|
||||
DLL_EXPORT
|
||||
int getIntValue();
|
||||
|
||||
// Methods for real objects
|
||||
DLL_EXPORT
|
||||
std::string getRealValue();
|
||||
|
||||
// Methods that work for both integer and real objects
|
||||
DLL_EXPORT
|
||||
bool isNumber();
|
||||
DLL_EXPORT
|
||||
double getNumericValue();
|
||||
|
||||
// Methods for name objects
|
||||
DLL_EXPORT
|
||||
std::string getName();
|
||||
|
||||
// Methods for string objects
|
||||
DLL_EXPORT
|
||||
std::string getStringValue();
|
||||
DLL_EXPORT
|
||||
std::string getUTF8Value();
|
||||
|
||||
// Methods for array objects
|
||||
DLL_EXPORT
|
||||
int getArrayNItems();
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getArrayItem(int n);
|
||||
|
||||
// Methods for dictionary objects
|
||||
DLL_EXPORT
|
||||
bool hasKey(std::string const&);
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getKey(std::string const&);
|
||||
DLL_EXPORT
|
||||
std::set<std::string> getKeys();
|
||||
|
||||
// Mutator methods. Use with caution.
|
||||
|
||||
// Recursively copy this object, making it direct. Throws an
|
||||
// exception if a loop is detected or any sub-object is a stream.
|
||||
DLL_EXPORT
|
||||
void makeDirect();
|
||||
|
||||
// Mutator methods for array objects
|
||||
DLL_EXPORT
|
||||
void setArrayItem(int, QPDFObjectHandle const&);
|
||||
|
||||
// Mutator methods for dictionary objects
|
||||
|
||||
// Replace value of key, adding it if it does not exist
|
||||
DLL_EXPORT
|
||||
void replaceKey(std::string const& key, QPDFObjectHandle const&);
|
||||
// Remove key, doing nothing if key does not exist
|
||||
DLL_EXPORT
|
||||
void removeKey(std::string const& key);
|
||||
|
||||
// Methods for stream objects
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle getDict();
|
||||
|
||||
// Returns filtered (uncompressed) stream data. Throws an
|
||||
// exception if the stream is filtered and we can't decode it.
|
||||
DLL_EXPORT
|
||||
PointerHolder<Buffer> getStreamData();
|
||||
|
||||
// Write stream data through the given pipeline. A null pipeline
|
||||
@ -131,14 +173,19 @@ class QPDFObjectHandle
|
||||
// value of this function to determine whether or not the /Filter
|
||||
// and /DecodeParms keys in the stream dictionary should be
|
||||
// replaced if writing a new stream object.
|
||||
DLL_EXPORT
|
||||
bool pipeStreamData(Pipeline*, bool filter,
|
||||
bool normalize, bool compress);
|
||||
|
||||
// return 0 for direct objects
|
||||
DLL_EXPORT
|
||||
int getObjectID() const;
|
||||
DLL_EXPORT
|
||||
int getGeneration() const;
|
||||
|
||||
DLL_EXPORT
|
||||
std::string unparse();
|
||||
DLL_EXPORT
|
||||
std::string unparseResolved();
|
||||
|
||||
// Convenience routines for commonly performed functions
|
||||
@ -148,6 +195,7 @@ class QPDFObjectHandle
|
||||
// function does not presently support inherited resources. See
|
||||
// comment in the source for details. Return value is a map from
|
||||
// XObject name to the image object, which is always a stream.
|
||||
DLL_EXPORT
|
||||
std::map<std::string, QPDFObjectHandle> getPageImages();
|
||||
|
||||
// Throws an exception if this is not a Page object. Returns a
|
||||
@ -155,6 +203,7 @@ class QPDFObjectHandle
|
||||
// the given page. This routine allows the caller to not care
|
||||
// whether there are one or more than one content streams for a
|
||||
// page.
|
||||
DLL_EXPORT
|
||||
std::vector<QPDFObjectHandle> getPageContents();
|
||||
|
||||
// Initializers for objects. This Factory class gives the QPDF
|
||||
|
@ -8,6 +8,8 @@
|
||||
#ifndef __QPDFTOKENIZER_HH__
|
||||
#define __QPDFTOKENIZER_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
|
||||
@ -35,14 +37,17 @@ class QPDFTokenizer
|
||||
class Token
|
||||
{
|
||||
public:
|
||||
DLL_EXPORT
|
||||
Token() : type(tt_bad) {}
|
||||
|
||||
DLL_EXPORT
|
||||
Token(token_type_e type, std::string const& value) :
|
||||
type(type),
|
||||
value(value)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Token(token_type_e type, std::string const& value,
|
||||
std::string raw_value, std::string error_message) :
|
||||
type(type),
|
||||
@ -51,22 +56,27 @@ class QPDFTokenizer
|
||||
error_message(error_message)
|
||||
{
|
||||
}
|
||||
DLL_EXPORT
|
||||
token_type_e getType() const
|
||||
{
|
||||
return this->type;
|
||||
}
|
||||
DLL_EXPORT
|
||||
std::string const& getValue() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
DLL_EXPORT
|
||||
std::string const& getRawValue() const
|
||||
{
|
||||
return this->raw_value;
|
||||
}
|
||||
DLL_EXPORT
|
||||
std::string const& getErrorMessage() const
|
||||
{
|
||||
return this->error_message;
|
||||
}
|
||||
DLL_EXPORT
|
||||
bool operator==(Token const& rhs)
|
||||
{
|
||||
// Ignore fields other than type and value
|
||||
@ -82,6 +92,7 @@ class QPDFTokenizer
|
||||
std::string error_message;
|
||||
};
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFTokenizer();
|
||||
|
||||
// PDF files with version < 1.2 allowed the pound character
|
||||
@ -89,6 +100,7 @@ class QPDFTokenizer
|
||||
// character was allowed only when followed by two hexadecimal
|
||||
// digits. This method should be called when parsing a PDF file
|
||||
// whose version is older than 1.2.
|
||||
DLL_EXPORT
|
||||
void allowPoundAnywhereInName();
|
||||
|
||||
// Mode of operation:
|
||||
@ -99,19 +111,23 @@ class QPDFTokenizer
|
||||
|
||||
// It these are called when a token is available, an exception
|
||||
// will be thrown.
|
||||
DLL_EXPORT
|
||||
void presentCharacter(char ch);
|
||||
DLL_EXPORT
|
||||
void presentEOF();
|
||||
|
||||
// If a token is available, return true and initialize token with
|
||||
// the token, unread_char with whether or not we have to unread
|
||||
// the last character, and if unread_char, ch with the character
|
||||
// to unread.
|
||||
DLL_EXPORT
|
||||
bool getToken(Token& token, bool& unread_char, char& ch);
|
||||
|
||||
// This function returns true of the current character is between
|
||||
// tokens (i.e., white space that is not part of a string) or is
|
||||
// part of a comment. A tokenizing filter can call this to
|
||||
// determine whether to output the character.
|
||||
DLL_EXPORT
|
||||
bool betweenTokens();
|
||||
|
||||
private:
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <set>
|
||||
#include <map>
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
#include <qpdf/QPDFXRefEntry.hh>
|
||||
|
||||
#include <qpdf/PointerHolder.hh>
|
||||
@ -33,7 +35,9 @@ class QPDFWriter
|
||||
{
|
||||
public:
|
||||
// Passing null as filename means write to stdout
|
||||
DLL_EXPORT
|
||||
QPDFWriter(QPDF& pdf, char const* filename);
|
||||
DLL_EXPORT
|
||||
~QPDFWriter();
|
||||
|
||||
// Set the value of object stream mode. In disable mode, we never
|
||||
@ -44,6 +48,7 @@ class QPDFWriter
|
||||
// object streams and a cross-reference stream if there are object
|
||||
// streams. The default is o_preserve.
|
||||
enum object_stream_e { o_disable, o_preserve, o_generate };
|
||||
DLL_EXPORT
|
||||
void setObjectStreamMode(object_stream_e);
|
||||
|
||||
// Set value of stream data mode. In uncompress mode, we attempt
|
||||
@ -52,6 +57,7 @@ class QPDFWriter
|
||||
// if we can apply all filters and the stream is not already
|
||||
// optimally compressed, recompress the stream.
|
||||
enum stream_data_e { s_uncompress, s_preserve, s_compress };
|
||||
DLL_EXPORT
|
||||
void setStreamDataMode(stream_data_e);
|
||||
|
||||
// Set value of content stream normalization. The default is
|
||||
@ -61,6 +67,7 @@ class QPDFWriter
|
||||
// damage the content stream. This flag should be used only for
|
||||
// debugging and experimenting with PDF content streams. Never
|
||||
// use it for production files.
|
||||
DLL_EXPORT
|
||||
void setContentNormalization(bool);
|
||||
|
||||
// Set QDF mode. QDF mode causes special "pretty printing" of
|
||||
@ -68,22 +75,26 @@ class QPDFWriter
|
||||
// Resulting PDF files can be edited in a text editor and then run
|
||||
// through fix-qdf to update cross reference tables and stream
|
||||
// lengths.
|
||||
DLL_EXPORT
|
||||
void setQDFMode(bool);
|
||||
|
||||
// Cause a static /ID value to be generated. Use only in test
|
||||
// suites.
|
||||
DLL_EXPORT
|
||||
void setStaticID(bool);
|
||||
|
||||
// Suppress inclusion of comments indicating original object IDs
|
||||
// when writing QDF files. This can also be useful for testing,
|
||||
// particularly when using comparison of two qdf files to
|
||||
// determine whether two PDF files have identical content.
|
||||
DLL_EXPORT
|
||||
void setSuppressOriginalObjectIDs(bool);
|
||||
|
||||
// Preserve encryption. The default is true unless prefilering,
|
||||
// content normalization, or qdf mode has been selected in which
|
||||
// case encryption is never preserved. Encryption is also not
|
||||
// preserved if we explicitly set encryption parameters.
|
||||
DLL_EXPORT
|
||||
void setPreserveEncryption(bool);
|
||||
|
||||
// Set up for encrypted output. Disables stream prefiltering and
|
||||
@ -91,6 +102,7 @@ class QPDFWriter
|
||||
// parameters sets the PDF version to at least 1.3, and setting R3
|
||||
// encryption parameters pushes the PDF version number to at least
|
||||
// 1.4.
|
||||
DLL_EXPORT
|
||||
void setR2EncryptionParameters(
|
||||
char const* user_password, char const* owner_password,
|
||||
bool allow_print, bool allow_modify,
|
||||
@ -109,6 +121,7 @@ class QPDFWriter
|
||||
r3m_assembly, // allow only document assembly
|
||||
r3m_none // allow no modification
|
||||
};
|
||||
DLL_EXPORT
|
||||
void setR3EncryptionParameters(
|
||||
char const* user_password, char const* owner_password,
|
||||
bool allow_accessibility, bool allow_extract,
|
||||
@ -116,8 +129,10 @@ class QPDFWriter
|
||||
|
||||
// Create linearized output. Disables qdf mode, content
|
||||
// normalization, and stream prefiltering.
|
||||
DLL_EXPORT
|
||||
void setLinearization(bool);
|
||||
|
||||
DLL_EXPORT
|
||||
void write();
|
||||
|
||||
private:
|
||||
|
@ -8,6 +8,8 @@
|
||||
#ifndef __QPDFXREFENTRY_HH__
|
||||
#define __QPDFXREFENTRY_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
class QPDFXRefEntry
|
||||
{
|
||||
public:
|
||||
@ -17,12 +19,18 @@ class QPDFXRefEntry
|
||||
// 1 = "uncompressed"; field 1 = offset
|
||||
// 2 = "compressed"; field 1 = object stream number, field 2 = index
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFXRefEntry();
|
||||
DLL_EXPORT
|
||||
QPDFXRefEntry(int type, int field1, int field2);
|
||||
|
||||
DLL_EXPORT
|
||||
int getType() const;
|
||||
DLL_EXPORT
|
||||
int getOffset() const; // only for type 1
|
||||
DLL_EXPORT
|
||||
int getObjStreamNumber() const; // only for type 2
|
||||
DLL_EXPORT
|
||||
int getObjStreamIndex() const; // only for type 2
|
||||
|
||||
private:
|
||||
|
@ -8,8 +8,11 @@
|
||||
#ifndef __QTC_HH__
|
||||
#define __QTC_HH__
|
||||
|
||||
#include <qpdf/DLL.hh>
|
||||
|
||||
namespace QTC
|
||||
{
|
||||
DLL_EXPORT
|
||||
void TC(char const* const scope, char const* const ccase, int n = 0);
|
||||
};
|
||||
|
||||
|
@ -19,35 +19,46 @@ namespace QUtil
|
||||
{
|
||||
// This is a collection of useful utility functions that don't
|
||||
// really go anywhere else.
|
||||
DLL_EXPORT
|
||||
std::string int_to_string(int, int length = 0);
|
||||
DLL_EXPORT
|
||||
std::string double_to_string(double, int decimal_places = 0);
|
||||
|
||||
// If status is -1, convert the current value of errno to a
|
||||
// QEXC::System exception. Otherwise, return status.
|
||||
DLL_EXPORT
|
||||
int os_wrapper(std::string const& description, int status)
|
||||
throw (QEXC::System);
|
||||
|
||||
DLL_EXPORT
|
||||
FILE* fopen_wrapper(std::string const&, FILE*)
|
||||
throw (QEXC::System);
|
||||
|
||||
DLL_EXPORT
|
||||
char* copy_string(std::string const&);
|
||||
|
||||
// Set stdin, stdout to binary mode
|
||||
DLL_EXPORT
|
||||
void binary_stdout();
|
||||
DLL_EXPORT
|
||||
void binary_stdin();
|
||||
|
||||
// May modify argv0
|
||||
DLL_EXPORT
|
||||
char* getWhoami(char* argv0);
|
||||
|
||||
// Get the value of an environment variable in a portable fashion.
|
||||
// Returns true iff the variable is defined. If `value' is
|
||||
// non-null, initializes it with the value of the variable.
|
||||
DLL_EXPORT
|
||||
bool get_env(std::string const& var, std::string* value = 0);
|
||||
|
||||
DLL_EXPORT
|
||||
time_t get_current_time();
|
||||
|
||||
// Return a string containing the byte representation of the UTF-8
|
||||
// encoding for the unicode value passed in.
|
||||
DLL_EXPORT
|
||||
std::string toUTF8(unsigned long uval);
|
||||
};
|
||||
|
||||
|
@ -3,22 +3,26 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
DLL_EXPORT
|
||||
Buffer::Buffer()
|
||||
{
|
||||
init(0);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Buffer::Buffer(unsigned long size)
|
||||
{
|
||||
init(size);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Buffer::Buffer(Buffer const& rhs)
|
||||
{
|
||||
init(0);
|
||||
copy(rhs);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Buffer&
|
||||
Buffer::operator=(Buffer const& rhs)
|
||||
{
|
||||
@ -26,6 +30,7 @@ Buffer::operator=(Buffer const& rhs)
|
||||
return *this;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Buffer::~Buffer()
|
||||
{
|
||||
destroy();
|
||||
@ -60,18 +65,21 @@ Buffer::destroy()
|
||||
this->buf = 0;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
unsigned long
|
||||
Buffer::getSize() const
|
||||
{
|
||||
return this->size;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
unsigned char const*
|
||||
Buffer::getBuffer() const
|
||||
{
|
||||
return this->buf;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
unsigned char*
|
||||
Buffer::getBuffer()
|
||||
{
|
||||
|
@ -2,12 +2,14 @@
|
||||
|
||||
#include <qpdf/Pipeline.hh>
|
||||
|
||||
DLL_EXPORT
|
||||
Pipeline::Pipeline(char const* identifier, Pipeline* next) :
|
||||
identifier(identifier),
|
||||
next(next)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Pipeline::~Pipeline()
|
||||
{
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
#include <qpdf/Pl_Count.hh>
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Count::Pl_Count(char const* identifier, Pipeline* next) :
|
||||
Pipeline(identifier, next),
|
||||
count(0),
|
||||
@ -8,10 +9,12 @@ Pl_Count::Pl_Count(char const* identifier, Pipeline* next) :
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Count::~Pl_Count()
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Count::write(unsigned char* buf, int len)
|
||||
{
|
||||
@ -23,18 +26,21 @@ Pl_Count::write(unsigned char* buf, int len)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Count::finish()
|
||||
{
|
||||
getNext()->finish();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
Pl_Count::getCount() const
|
||||
{
|
||||
return this->count;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
unsigned char
|
||||
Pl_Count::getLastChar() const
|
||||
{
|
||||
|
@ -3,20 +3,24 @@
|
||||
|
||||
// Exercised in md5 test suite
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Discard::Pl_Discard() :
|
||||
Pipeline("discard", 0)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Discard::~Pl_Discard()
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Discard::write(unsigned char* buf, int len)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Discard::finish()
|
||||
{
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <qpdf/QUtil.hh>
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Flate::Pl_Flate(char const* identifier, Pipeline* next,
|
||||
action_e action, int out_bufsize) :
|
||||
Pipeline(identifier, next),
|
||||
@ -21,6 +22,7 @@ Pl_Flate::Pl_Flate(char const* identifier, Pipeline* next,
|
||||
zstream.avail_out = out_bufsize;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_Flate::~Pl_Flate()
|
||||
{
|
||||
if (this->outbuf)
|
||||
@ -30,6 +32,7 @@ Pl_Flate::~Pl_Flate()
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Flate::write(unsigned char* data, int len)
|
||||
{
|
||||
@ -117,6 +120,7 @@ Pl_Flate::handleData(unsigned char* data, int len, int flush)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_Flate::finish()
|
||||
{
|
||||
|
@ -3,16 +3,19 @@
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_StdioFile::Pl_StdioFile(char const* identifier, FILE* f) :
|
||||
Pipeline(identifier, 0),
|
||||
file(f)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
Pl_StdioFile::~Pl_StdioFile()
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_StdioFile::write(unsigned char* buf, int len)
|
||||
{
|
||||
@ -33,6 +36,7 @@ Pl_StdioFile::write(unsigned char* buf, int len)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
Pl_StdioFile::finish()
|
||||
{
|
||||
|
@ -3,29 +3,34 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::Base::Base()
|
||||
{
|
||||
// nothing needed
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::Base::Base(std::string const& message) :
|
||||
message(message)
|
||||
{
|
||||
// nothing needed
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string const&
|
||||
QEXC::Base::unparse() const
|
||||
{
|
||||
return this->message;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QEXC::Base::setMessage(std::string const& message)
|
||||
{
|
||||
this->message = message;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
const char*
|
||||
QEXC::Base::what() const throw()
|
||||
{
|
||||
@ -36,17 +41,20 @@ QEXC::Base::what() const throw()
|
||||
return this->unparse().c_str();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::General::General()
|
||||
{
|
||||
// nothing needed
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::General::General(std::string const& message) :
|
||||
Base(message)
|
||||
{
|
||||
// nothing needed
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::System::System(std::string const& prefix, int sys_errno)
|
||||
{
|
||||
// Note: using sys_errno in case errno is a macro.
|
||||
@ -54,12 +62,14 @@ QEXC::System::System(std::string const& prefix, int sys_errno)
|
||||
this->setMessage(prefix + ": " + strerror(sys_errno));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QEXC::System::getErrno() const
|
||||
{
|
||||
return this->sys_errno;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QEXC::Internal::Internal(std::string const& message) :
|
||||
Base("INTERNAL ERROR: " + message)
|
||||
{
|
||||
|
@ -247,6 +247,7 @@ QPDF::ObjGen::operator<(ObjGen const& rhs) const
|
||||
((this->obj == rhs.obj) && (this->gen < rhs.gen)));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDF::QPDF() :
|
||||
encrypted(false),
|
||||
encryption_initialized(false),
|
||||
@ -260,10 +261,12 @@ QPDF::QPDF() :
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDF::~QPDF()
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::processFile(char const* filename, char const* password)
|
||||
{
|
||||
@ -272,24 +275,28 @@ QPDF::processFile(char const* filename, char const* password)
|
||||
parse();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::setIgnoreXRefStreams(bool val)
|
||||
{
|
||||
this->ignore_xref_streams = val;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::setSuppressWarnings(bool val)
|
||||
{
|
||||
this->suppress_warnings = val;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::setAttemptRecovery(bool val)
|
||||
{
|
||||
this->attempt_recovery = val;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::vector<std::string>
|
||||
QPDF::getWarnings()
|
||||
{
|
||||
@ -926,6 +933,7 @@ QPDF::insertXrefEntry(int obj, int f0, int f1, int f2, bool overwrite)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::showXRefTable()
|
||||
{
|
||||
@ -1610,6 +1618,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDF::makeIndirectObject(QPDFObjectHandle oh)
|
||||
{
|
||||
@ -1624,12 +1633,14 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
|
||||
return QPDFObjectHandle::Factory::newIndirect(this, next.obj, next.gen);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDF::getObjectByID(int objid, int generation)
|
||||
{
|
||||
return QPDFObjectHandle::Factory::newIndirect(this, objid, generation);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::trimTrailerForWrite()
|
||||
{
|
||||
@ -1652,30 +1663,35 @@ QPDF::trimTrailerForWrite()
|
||||
this->trailer.removeKey("/XRefStm");
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDF::getFilename() const
|
||||
{
|
||||
return this->file.getName();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDF::getPDFVersion() const
|
||||
{
|
||||
return this->pdf_version;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDF::getTrailer()
|
||||
{
|
||||
return this->trailer;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDF::getRoot()
|
||||
{
|
||||
return this->trailer.getKey("/Root");
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::getObjectStreamData(std::map<int, int>& omap)
|
||||
{
|
||||
@ -1692,6 +1708,7 @@ QPDF::getObjectStreamData(std::map<int, int>& omap)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::vector<int>
|
||||
QPDF::getCompressibleObjects()
|
||||
{
|
||||
@ -1840,6 +1857,7 @@ QPDF::pipeStreamData(int objid, int generation,
|
||||
pipeline->finish();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::decodeStreams()
|
||||
{
|
||||
@ -1857,6 +1875,7 @@ QPDF::decodeStreams()
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::vector<QPDFObjectHandle> const&
|
||||
QPDF::getAllPages()
|
||||
{
|
||||
|
@ -3,11 +3,13 @@
|
||||
|
||||
#include <qpdf/QUtil.hh>
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFExc::QPDFExc(std::string const& message) :
|
||||
QEXC::General(message)
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFExc::QPDFExc(std::string const& filename, int offset,
|
||||
std::string const& message) :
|
||||
QEXC::General(filename + ": offset " + QUtil::int_to_string(offset) +
|
||||
@ -15,6 +17,7 @@ QPDFExc::QPDFExc(std::string const& filename, int offset,
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFExc::~QPDFExc() throw ()
|
||||
{
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle::QPDFObjectHandle() :
|
||||
initialized(false),
|
||||
objid(0),
|
||||
@ -42,6 +43,7 @@ QPDFObjectHandle::QPDFObjectHandle(QPDFObject* data) :
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isInitialized() const
|
||||
{
|
||||
@ -58,6 +60,7 @@ class QPDFObjectTypeAccessor
|
||||
}
|
||||
};
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isBool()
|
||||
{
|
||||
@ -65,6 +68,7 @@ QPDFObjectHandle::isBool()
|
||||
return QPDFObjectTypeAccessor<QPDF_Bool>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isNull()
|
||||
{
|
||||
@ -72,6 +76,7 @@ QPDFObjectHandle::isNull()
|
||||
return QPDFObjectTypeAccessor<QPDF_Null>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isInteger()
|
||||
{
|
||||
@ -79,6 +84,7 @@ QPDFObjectHandle::isInteger()
|
||||
return QPDFObjectTypeAccessor<QPDF_Integer>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isReal()
|
||||
{
|
||||
@ -86,12 +92,14 @@ QPDFObjectHandle::isReal()
|
||||
return QPDFObjectTypeAccessor<QPDF_Real>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isNumber()
|
||||
{
|
||||
return (isInteger() || isReal());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
double
|
||||
QPDFObjectHandle::getNumericValue()
|
||||
{
|
||||
@ -111,6 +119,7 @@ QPDFObjectHandle::getNumericValue()
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isName()
|
||||
{
|
||||
@ -118,6 +127,7 @@ QPDFObjectHandle::isName()
|
||||
return QPDFObjectTypeAccessor<QPDF_Name>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isString()
|
||||
{
|
||||
@ -125,6 +135,7 @@ QPDFObjectHandle::isString()
|
||||
return QPDFObjectTypeAccessor<QPDF_String>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isArray()
|
||||
{
|
||||
@ -132,6 +143,7 @@ QPDFObjectHandle::isArray()
|
||||
return QPDFObjectTypeAccessor<QPDF_Array>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isDictionary()
|
||||
{
|
||||
@ -139,6 +151,7 @@ QPDFObjectHandle::isDictionary()
|
||||
return QPDFObjectTypeAccessor<QPDF_Dictionary>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isStream()
|
||||
{
|
||||
@ -146,6 +159,7 @@ QPDFObjectHandle::isStream()
|
||||
return QPDFObjectTypeAccessor<QPDF_Stream>::check(obj.getPointer());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isIndirect()
|
||||
{
|
||||
@ -153,6 +167,7 @@ QPDFObjectHandle::isIndirect()
|
||||
return (this->objid != 0);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::isScalar()
|
||||
{
|
||||
@ -161,6 +176,7 @@ QPDFObjectHandle::isScalar()
|
||||
|
||||
// Bool accessors
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::getBoolValue()
|
||||
{
|
||||
@ -170,6 +186,7 @@ QPDFObjectHandle::getBoolValue()
|
||||
|
||||
// Integer accessors
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFObjectHandle::getIntValue()
|
||||
{
|
||||
@ -179,6 +196,7 @@ QPDFObjectHandle::getIntValue()
|
||||
|
||||
// Real accessors
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::getRealValue()
|
||||
{
|
||||
@ -188,6 +206,7 @@ QPDFObjectHandle::getRealValue()
|
||||
|
||||
// Name accessors
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::getName()
|
||||
{
|
||||
@ -197,6 +216,7 @@ QPDFObjectHandle::getName()
|
||||
|
||||
// String accessors
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::getStringValue()
|
||||
{
|
||||
@ -204,6 +224,7 @@ QPDFObjectHandle::getStringValue()
|
||||
return dynamic_cast<QPDF_String*>(obj.getPointer())->getVal();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::getUTF8Value()
|
||||
{
|
||||
@ -213,6 +234,7 @@ QPDFObjectHandle::getUTF8Value()
|
||||
|
||||
// Array accessors
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFObjectHandle::getArrayNItems()
|
||||
{
|
||||
@ -220,6 +242,7 @@ QPDFObjectHandle::getArrayNItems()
|
||||
return dynamic_cast<QPDF_Array*>(obj.getPointer())->getNItems();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::getArrayItem(int n)
|
||||
{
|
||||
@ -229,6 +252,7 @@ QPDFObjectHandle::getArrayItem(int n)
|
||||
|
||||
// Array mutators
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item)
|
||||
{
|
||||
@ -238,6 +262,7 @@ QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item)
|
||||
|
||||
// Dictionary accessors
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::hasKey(std::string const& key)
|
||||
{
|
||||
@ -245,6 +270,7 @@ QPDFObjectHandle::hasKey(std::string const& key)
|
||||
return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->hasKey(key);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::getKey(std::string const& key)
|
||||
{
|
||||
@ -252,6 +278,7 @@ QPDFObjectHandle::getKey(std::string const& key)
|
||||
return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getKey(key);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::set<std::string>
|
||||
QPDFObjectHandle::getKeys()
|
||||
{
|
||||
@ -261,6 +288,7 @@ QPDFObjectHandle::getKeys()
|
||||
|
||||
// Dictionary mutators
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFObjectHandle::replaceKey(std::string const& key,
|
||||
QPDFObjectHandle const& value)
|
||||
@ -270,6 +298,7 @@ QPDFObjectHandle::replaceKey(std::string const& key,
|
||||
obj.getPointer())->replaceKey(key, value);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFObjectHandle::removeKey(std::string const& key)
|
||||
{
|
||||
@ -278,6 +307,7 @@ QPDFObjectHandle::removeKey(std::string const& key)
|
||||
}
|
||||
|
||||
// Stream accessors
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::getDict()
|
||||
{
|
||||
@ -285,6 +315,7 @@ QPDFObjectHandle::getDict()
|
||||
return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getDict();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
PointerHolder<Buffer>
|
||||
QPDFObjectHandle::getStreamData()
|
||||
{
|
||||
@ -292,6 +323,7 @@ QPDFObjectHandle::getStreamData()
|
||||
return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getStreamData();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFObjectHandle::pipeStreamData(Pipeline* p, bool filter,
|
||||
bool normalize, bool compress)
|
||||
@ -301,18 +333,21 @@ QPDFObjectHandle::pipeStreamData(Pipeline* p, bool filter,
|
||||
p, filter, normalize, compress);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFObjectHandle::getObjectID() const
|
||||
{
|
||||
return this->objid;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFObjectHandle::getGeneration() const
|
||||
{
|
||||
return this->generation;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::map<std::string, QPDFObjectHandle>
|
||||
QPDFObjectHandle::getPageImages()
|
||||
{
|
||||
@ -361,6 +396,7 @@ QPDFObjectHandle::getPageImages()
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::vector<QPDFObjectHandle>
|
||||
QPDFObjectHandle::getPageContents()
|
||||
{
|
||||
@ -399,6 +435,7 @@ QPDFObjectHandle::getPageContents()
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::unparse()
|
||||
{
|
||||
@ -415,6 +452,7 @@ QPDFObjectHandle::unparse()
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDFObjectHandle::unparseResolved()
|
||||
{
|
||||
@ -428,48 +466,56 @@ QPDFObjectHandle::newIndirect(QPDF* qpdf, int objid, int generation)
|
||||
return QPDFObjectHandle(qpdf, objid, generation);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newBool(bool value)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Bool(value));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newNull()
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Null());
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newInteger(int value)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Integer(value));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newReal(std::string const& value)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Real(value));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newName(std::string const& name)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Name(name));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newString(std::string const& str)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_String(str));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newArray(std::vector<QPDFObjectHandle> const& items)
|
||||
{
|
||||
return QPDFObjectHandle(new QPDF_Array(items));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFObjectHandle
|
||||
QPDFObjectHandle::newDictionary(
|
||||
std::map<std::string, QPDFObjectHandle> const& items)
|
||||
|
@ -17,12 +17,14 @@ static bool is_hex_digit(char ch)
|
||||
return (strchr("0123456789abcdefABCDEF", ch) != 0);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFTokenizer::QPDFTokenizer() :
|
||||
pound_special_in_name(true)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFTokenizer::allowPoundAnywhereInName()
|
||||
{
|
||||
@ -45,6 +47,7 @@ QPDFTokenizer::reset()
|
||||
last_char_was_bs = false;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFTokenizer::presentCharacter(char ch)
|
||||
{
|
||||
@ -418,6 +421,7 @@ QPDFTokenizer::presentCharacter(char ch)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDFTokenizer::presentEOF()
|
||||
{
|
||||
@ -439,6 +443,7 @@ QPDFTokenizer::presentEOF()
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFTokenizer::getToken(Token& token, bool& unread_char, char& ch)
|
||||
{
|
||||
@ -453,6 +458,7 @@ QPDFTokenizer::getToken(Token& token, bool& unread_char, char& ch)
|
||||
return ready;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDFTokenizer::betweenTokens()
|
||||
{
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <qpdf/QPDFExc.hh>
|
||||
#include <qpdf/QUtil.hh>
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFXRefEntry::QPDFXRefEntry() :
|
||||
type(0),
|
||||
field1(0),
|
||||
@ -10,6 +11,7 @@ QPDFXRefEntry::QPDFXRefEntry() :
|
||||
{
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
QPDFXRefEntry::QPDFXRefEntry(int type, int field1, int field2) :
|
||||
type(type),
|
||||
field1(field1),
|
||||
@ -21,12 +23,14 @@ QPDFXRefEntry::QPDFXRefEntry(int type, int field1, int field2) :
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFXRefEntry::getType() const
|
||||
{
|
||||
return this->type;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFXRefEntry::getOffset() const
|
||||
{
|
||||
@ -38,6 +42,7 @@ QPDFXRefEntry::getOffset() const
|
||||
return this->field1;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFXRefEntry::getObjStreamNumber() const
|
||||
{
|
||||
@ -49,6 +54,7 @@ QPDFXRefEntry::getObjStreamNumber() const
|
||||
return this->field1;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QPDFXRefEntry::getObjStreamIndex() const
|
||||
{
|
||||
|
@ -32,6 +32,7 @@ pad_or_truncate_password(std::string const& password, char k1[key_bytes])
|
||||
memcpy(k1 + password_bytes, padding_string, pad_bytes);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::trim_user_password(std::string& user_password)
|
||||
{
|
||||
@ -97,6 +98,7 @@ iterate_rc4(unsigned char* data, int data_len,
|
||||
delete [] key;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDF::compute_data_key(std::string const& encryption_key,
|
||||
int objid, int generation)
|
||||
@ -120,6 +122,7 @@ QPDF::compute_data_key(std::string const& encryption_key,
|
||||
std::min(result.length(), (size_t) 16));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QPDF::compute_encryption_key(
|
||||
std::string const& password, EncryptionData const& data)
|
||||
@ -424,6 +427,7 @@ QPDF::decryptStream(Pipeline*& pipeline, int objid, int generation,
|
||||
heap.push_back(pipeline);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::compute_encryption_O_U(
|
||||
char const* user_password, char const* owner_password,
|
||||
@ -436,6 +440,7 @@ QPDF::compute_encryption_O_U(
|
||||
U = compute_U_value(user_password, data);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string const&
|
||||
QPDF::getUserPassword() const
|
||||
{
|
||||
|
@ -53,6 +53,7 @@ load_vector_vector(BitStream& bit_stream,
|
||||
bit_stream.skipToNextByte();
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDF::checkLinearization()
|
||||
{
|
||||
@ -69,6 +70,7 @@ QPDF::checkLinearization()
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QPDF::isLinearized()
|
||||
{
|
||||
@ -982,6 +984,7 @@ QPDF::checkHOutlines(std::list<std::string>& warnings)
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::showLinearizationData()
|
||||
{
|
||||
@ -1739,6 +1742,7 @@ QPDF::pushOutlinesToPart(
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::getLinearizedParts(
|
||||
std::map<int, int> const& object_stream_data,
|
||||
@ -2070,6 +2074,7 @@ QPDF::writeHGeneric(BitWriter& w, HGeneric& t)
|
||||
w.writeBits(t.group_length, 32); // 4
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::generateHintStream(std::map<int, QPDFXRefEntry> const& xref,
|
||||
std::map<int, size_t> const& lengths,
|
||||
|
@ -58,6 +58,7 @@ QPDF::ObjUser::operator<(ObjUser const& rhs) const
|
||||
return false;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::flattenScalarReferences()
|
||||
{
|
||||
@ -140,6 +141,7 @@ QPDF::flattenScalarReferences()
|
||||
}
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QPDF::optimize(std::map<int, int> const& object_stream_data,
|
||||
bool allow_changes)
|
||||
|
@ -11,6 +11,7 @@ static bool tc_active(char const* const scope)
|
||||
return (QUtil::get_env("TC_SCOPE", &value) && (value == scope));
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void QTC::TC(char const* const scope, char const* const ccase, int n)
|
||||
{
|
||||
static std::set<std::pair<std::string, int> > cache;
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QUtil::int_to_string(int num, int fullpad)
|
||||
{
|
||||
@ -41,6 +42,7 @@ QUtil::int_to_string(int num, int fullpad)
|
||||
return std::string(t);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QUtil::double_to_string(double num, int decimal_places)
|
||||
{
|
||||
@ -76,6 +78,7 @@ QUtil::double_to_string(double num, int decimal_places)
|
||||
return std::string(t);
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
int
|
||||
QUtil::os_wrapper(std::string const& description, int status) throw (QEXC::System)
|
||||
{
|
||||
@ -86,6 +89,7 @@ QUtil::os_wrapper(std::string const& description, int status) throw (QEXC::Syste
|
||||
return status;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
FILE*
|
||||
QUtil::fopen_wrapper(std::string const& description, FILE* f) throw (QEXC::System)
|
||||
{
|
||||
@ -96,6 +100,7 @@ QUtil::fopen_wrapper(std::string const& description, FILE* f) throw (QEXC::Syste
|
||||
return f;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
char*
|
||||
QUtil::copy_string(std::string const& str)
|
||||
{
|
||||
@ -106,6 +111,7 @@ QUtil::copy_string(std::string const& str)
|
||||
return result;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QUtil::binary_stdout()
|
||||
{
|
||||
@ -114,6 +120,7 @@ QUtil::binary_stdout()
|
||||
#endif
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
void
|
||||
QUtil::binary_stdin()
|
||||
{
|
||||
@ -122,6 +129,7 @@ QUtil::binary_stdin()
|
||||
#endif
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
char*
|
||||
QUtil::getWhoami(char* argv0)
|
||||
{
|
||||
@ -149,6 +157,7 @@ QUtil::getWhoami(char* argv0)
|
||||
return whoami;
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
bool
|
||||
QUtil::get_env(std::string const& var, std::string* value)
|
||||
{
|
||||
@ -186,6 +195,7 @@ QUtil::get_env(std::string const& var, std::string* value)
|
||||
#endif
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
time_t
|
||||
QUtil::get_current_time()
|
||||
{
|
||||
@ -212,6 +222,7 @@ QUtil::get_current_time()
|
||||
#endif
|
||||
}
|
||||
|
||||
DLL_EXPORT
|
||||
std::string
|
||||
QUtil::toUTF8(unsigned long uval)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user