From 0776c00129fac282e2e758bf1f32474af85db50e Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 18 Dec 2018 21:56:56 -0500 Subject: Add QPDFNameTreeObjectHelper --- include/qpdf/QPDFNameTreeObjectHelper.hh | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 include/qpdf/QPDFNameTreeObjectHelper.hh (limited to 'include') diff --git a/include/qpdf/QPDFNameTreeObjectHelper.hh b/include/qpdf/QPDFNameTreeObjectHelper.hh new file mode 100644 index 00000000..4b207131 --- /dev/null +++ b/include/qpdf/QPDFNameTreeObjectHelper.hh @@ -0,0 +1,83 @@ +// Copyright (c) 2005-2018 Jay Berkenbilt +// +// This file is part of qpdf. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Versions of qpdf prior to version 7 were released under the terms +// of version 2.0 of the Artistic License. At your option, you may +// continue to consider qpdf to be licensed under those terms. Please +// see the manual for additional information. + +#ifndef QPDFNAMETREEOBJECTHELPER_HH +#define QPDFNAMETREEOBJECTHELPER_HH + +#include +#include +#include + +#include + +// This is an object helper for name trees. See section 7.9.6 in the +// PDF spec (ISO 32000) for a description of name trees. This +// implementation disregards stated limits and sequencing and simply +// builds a map from string object. If the array of values does not +// contain a string where expected, this implementation silently skips +// forward until it finds a string. When looking up items in the name +// tree, use UTF-8 strings. All names are normalized for lookup +// purposes. + +class QPDFNameTreeObjectHelper: public QPDFObjectHelper +{ + public: + QPDF_DLL + QPDFNameTreeObjectHelper(QPDFObjectHandle); + QPDF_DLL + virtual ~QPDFNameTreeObjectHelper(); + + // Return whether the number tree has an explicit entry for this + // number. + QPDF_DLL + bool hasName(std::string const& utf8); + + // Find an object by name. If found, returns true and initializes + // oh. + QPDF_DLL + bool findObject(std::string const& utf8, QPDFObjectHandle& oh); + + QPDF_DLL + std::map getAsMap() const; + + private: + class Members + { + friend class QPDFNameTreeObjectHelper; + + public: + QPDF_DLL + ~Members(); + + private: + Members(); + Members(Members const&); + + std::map entries; + std::set seen; + }; + + void updateMap(QPDFObjectHandle oh); + + PointerHolder m; +}; + +#endif // QPDFNAMETREEOBJECTHELPER_HH -- cgit v1.2.3-54-g00ecf