aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/BufferInputSource.hh10
-rw-r--r--include/qpdf/FileInputSource.hh11
-rw-r--r--include/qpdf/InputSource.hh35
-rw-r--r--include/qpdf/QPDF.hh21
4 files changed, 77 insertions, 0 deletions
diff --git a/include/qpdf/BufferInputSource.hh b/include/qpdf/BufferInputSource.hh
index 64ee4605..db055783 100644
--- a/include/qpdf/BufferInputSource.hh
+++ b/include/qpdf/BufferInputSource.hh
@@ -15,17 +15,27 @@
class BufferInputSource: public InputSource
{
public:
+ QPDF_DLL
BufferInputSource(std::string const& description, Buffer* buf,
bool own_memory = false);
+ QPDF_DLL
BufferInputSource(std::string const& description,
std::string const& contents);
+ QPDF_DLL
virtual ~BufferInputSource();
+ QPDF_DLL
virtual qpdf_offset_t findAndSkipNextEOL();
+ QPDF_DLL
virtual std::string const& getName() const;
+ QPDF_DLL
virtual qpdf_offset_t tell();
+ QPDF_DLL
virtual void seek(qpdf_offset_t offset, int whence);
+ QPDF_DLL
virtual void rewind();
+ QPDF_DLL
virtual size_t read(char* buffer, size_t length);
+ QPDF_DLL
virtual void unreadCh(char ch);
private:
diff --git a/include/qpdf/FileInputSource.hh b/include/qpdf/FileInputSource.hh
index 64457365..3f0c05a9 100644
--- a/include/qpdf/FileInputSource.hh
+++ b/include/qpdf/FileInputSource.hh
@@ -14,16 +14,27 @@
class FileInputSource: public InputSource
{
public:
+ QPDF_DLL
FileInputSource();
+ QPDF_DLL
void setFilename(char const* filename);
+ QPDF_DLL
void setFile(char const* description, FILE* filep, bool close_file);
+ QPDF_DLL
virtual ~FileInputSource();
+ QPDF_DLL
virtual qpdf_offset_t findAndSkipNextEOL();
+ QPDF_DLL
virtual std::string const& getName() const;
+ QPDF_DLL
virtual qpdf_offset_t tell();
+ QPDF_DLL
virtual void seek(qpdf_offset_t offset, int whence);
+ QPDF_DLL
virtual void rewind();
+ QPDF_DLL
virtual size_t read(char* buffer, size_t length);
+ QPDF_DLL
virtual void unreadCh(char ch);
private:
diff --git a/include/qpdf/InputSource.hh b/include/qpdf/InputSource.hh
index a731918e..c20e5076 100644
--- a/include/qpdf/InputSource.hh
+++ b/include/qpdf/InputSource.hh
@@ -9,6 +9,7 @@
#ifndef __QPDF_INPUTSOURCE_HH__
#define __QPDF_INPUTSOURCE_HH__
+#include <qpdf/DLL.h>
#include <qpdf/Types.h>
#include <stdio.h>
#include <string>
@@ -16,18 +17,52 @@
class InputSource
{
public:
+ QPDF_DLL
InputSource() :
last_offset(0)
{
}
+ QPDF_DLL
virtual ~InputSource()
{
}
+ class Finder
+ {
+ public:
+ Finder()
+ {
+ }
+ virtual ~Finder()
+ {
+ }
+
+ virtual bool check() = 0;
+ };
+
+ QPDF_DLL
void setLastOffset(qpdf_offset_t);
+ QPDF_DLL
qpdf_offset_t getLastOffset() const;
+ QPDF_DLL
std::string readLine(size_t max_line_length);
+ // Find first or last occurrence of a sequence of characters
+ // starting within the range defined by offset and len such that,
+ // when the input source is positioned at the beginning of that
+ // sequence, finder.check() returns true. If len is 0, the search
+ // proceeds until EOF. If a qualifying pattern these methods
+ // return true and leave the input source positioned wherever
+ // check() left it at the end of the matching pattern.
+ QPDF_DLL
+ bool findFirst(char const* start_chars,
+ qpdf_offset_t offset, size_t len,
+ Finder& finder);
+ QPDF_DLL
+ bool findLast(char const* start_chars,
+ qpdf_offset_t offset, size_t len,
+ Finder& finder);
+
virtual qpdf_offset_t findAndSkipNextEOL() = 0;
virtual std::string const& getName() const = 0;
virtual qpdf_offset_t tell() = 0;
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index f57789a0..c9d120b4 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -1006,6 +1006,27 @@ class QPDF
std::string key; // if ou_trailer_key or ou_root_key
};
+ class PatternFinder: public InputSource::Finder
+ {
+ public:
+ PatternFinder(QPDF& qpdf, bool (QPDF::*checker)()) :
+ qpdf(qpdf),
+ checker(checker)
+ {
+ }
+ virtual ~PatternFinder()
+ {
+ }
+ virtual bool check()
+ {
+ return (this->qpdf.*checker)();
+ }
+
+ private:
+ QPDF& qpdf;
+ bool (QPDF::*checker)();
+ };
+
// methods to support linearization checking -- implemented in
// QPDF_linearization.cc
void readLinearizationData();