diff options
author | Jay Berkenbilt <ejb@ql.org> | 2018-02-16 02:45:19 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2018-02-19 03:05:47 +0100 |
commit | e410b0fe0d8c1da3e0b0e075b54f247b952389ef (patch) | |
tree | 49020a0201961e9e6e0da9b4ab7fa2a498529759 /libqpdf | |
parent | 1fdd86a04924e4ab9543133b74df3322cffbd358 (diff) | |
download | qpdf-e410b0fe0d8c1da3e0b0e075b54f247b952389ef.tar.zst |
Simplify TokenFilter interface
Expose Pl_QPDFTokenizer, and have it do more of the work of managing
the token filter's pipeline.
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/ContentNormalizer.cc | 6 | ||||
-rw-r--r-- | libqpdf/Pl_QPDFTokenizer.cc | 18 | ||||
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 29 | ||||
-rw-r--r-- | libqpdf/QPDF_Stream.cc | 6 | ||||
-rw-r--r-- | libqpdf/qpdf/ContentNormalizer.hh | 1 |
5 files changed, 22 insertions, 38 deletions
diff --git a/libqpdf/ContentNormalizer.cc b/libqpdf/ContentNormalizer.cc index f85ab829..83754937 100644 --- a/libqpdf/ContentNormalizer.cc +++ b/libqpdf/ContentNormalizer.cc @@ -82,12 +82,6 @@ ContentNormalizer::handleToken(QPDFTokenizer::Token const& token) } } -void -ContentNormalizer::handleEOF() -{ - finish(); -} - bool ContentNormalizer::anyBadTokens() const { diff --git a/libqpdf/Pl_QPDFTokenizer.cc b/libqpdf/Pl_QPDFTokenizer.cc index 4fc37767..577c5cc7 100644 --- a/libqpdf/Pl_QPDFTokenizer.cc +++ b/libqpdf/Pl_QPDFTokenizer.cc @@ -15,14 +15,15 @@ Pl_QPDFTokenizer::Members::~Members() { } -Pl_QPDFTokenizer::Pl_QPDFTokenizer( - char const* identifier, - QPDFObjectHandle::TokenFilter* filter) - : - Pipeline(identifier, 0), +Pl_QPDFTokenizer::Pl_QPDFTokenizer(char const* identifier, + QPDFObjectHandle::TokenFilter* filter, + Pipeline* next) : + Pipeline(identifier, next), m(new Members) { m->filter = filter; + QPDFObjectHandle::TokenFilter::PipelineAccessor::setPipeline( + m->filter, next); m->tokenizer.allowEOF(); m->tokenizer.includeIgnorable(); } @@ -88,4 +89,11 @@ Pl_QPDFTokenizer::finish() } this->m->filter->handleEOF(); + QPDFObjectHandle::TokenFilter::PipelineAccessor::setPipeline( + m->filter, 0); + Pipeline* next = this->getNext(true); + if (next) + { + next->finish(); + } } diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 5d7b0bb9..195442ca 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -16,7 +16,6 @@ #include <qpdf/Pl_Buffer.hh> #include <qpdf/Pl_Concatenate.hh> #include <qpdf/Pl_QPDFTokenizer.hh> -#include <qpdf/Pl_Discard.hh> #include <qpdf/BufferInputSource.hh> #include <qpdf/QPDFExc.hh> @@ -65,6 +64,11 @@ CoalesceProvider::provideStreamData(int, int, Pipeline* p) } void +QPDFObjectHandle::TokenFilter::handleEOF() +{ +} + +void QPDFObjectHandle::TokenFilter::setPipeline(Pipeline* p) { this->pipeline = p; @@ -75,8 +79,7 @@ QPDFObjectHandle::TokenFilter::write(char const* data, size_t len) { if (! this->pipeline) { - throw std::logic_error( - "TokenFilter::write called before setPipeline"); + return; } if (len) { @@ -98,17 +101,6 @@ QPDFObjectHandle::TokenFilter::writeToken(QPDFTokenizer::Token const& token) } void -QPDFObjectHandle::TokenFilter::finish() -{ - if (! this->pipeline) - { - throw std::logic_error( - "TokenFilter::finish called before setPipeline"); - } - this->pipeline->finish(); -} - -void QPDFObjectHandle::ParserCallbacks::terminateParsing() { throw TerminateParsing(); @@ -1007,14 +999,7 @@ QPDFObjectHandle::filterPageContents(TokenFilter* filter, Pipeline* next) std::string description = "token filter for page object " + QUtil::int_to_string(this->objid) + " " + QUtil::int_to_string(this->generation); - Pl_QPDFTokenizer token_pipeline(description.c_str(), filter); - PointerHolder<Pipeline> next_p; - if (next == 0) - { - next_p = new Pl_Discard(); - next = next_p.getPointer(); - } - filter->setPipeline(next); + Pl_QPDFTokenizer token_pipeline(description.c_str(), filter, next); this->pipePageContents(&token_pipeline); } diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc index bb1e24e6..7b84d10c 100644 --- a/libqpdf/QPDF_Stream.cc +++ b/libqpdf/QPDF_Stream.cc @@ -459,9 +459,8 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, if (encode_flags & qpdf_ef_normalize) { normalizer = new ContentNormalizer(); - normalizer->setPipeline(pipeline); pipeline = new Pl_QPDFTokenizer( - "normalizer", normalizer.getPointer()); + "normalizer", normalizer.getPointer(), pipeline); to_delete.push_back(pipeline); } @@ -470,9 +469,8 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, this->token_filters.rbegin(); iter != this->token_filters.rend(); ++iter) { - (*iter)->setPipeline(pipeline); pipeline = new Pl_QPDFTokenizer( - "token filter", (*iter).getPointer()); + "token filter", (*iter).getPointer(), pipeline); to_delete.push_back(pipeline); } diff --git a/libqpdf/qpdf/ContentNormalizer.hh b/libqpdf/qpdf/ContentNormalizer.hh index 89b28f3a..0d505a37 100644 --- a/libqpdf/qpdf/ContentNormalizer.hh +++ b/libqpdf/qpdf/ContentNormalizer.hh @@ -9,7 +9,6 @@ class ContentNormalizer: public QPDFObjectHandle::TokenFilter ContentNormalizer(); virtual ~ContentNormalizer(); virtual void handleToken(QPDFTokenizer::Token const&); - virtual void handleEOF(); bool anyBadTokens() const; bool lastTokenWasBad() const; |