summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp185
1 files changed, 0 insertions, 185 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp
deleted file mode 100644
index a342e740cdb..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*************************************************************************
-** PDFParser.hpp **
-** **
-** This file is part of dvisvgm -- a fast DVI to SVG converter **
-** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> **
-** **
-** This program is free software; you can redistribute it and/or **
-** modify it under the terms of the GNU General Public License as **
-** published by the Free Software Foundation; either version 3 of **
-** the License, or (at your option) any later version. **
-** **
-** This program 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 General Public License **
-** along with this program; if not, see <http://www.gnu.org/licenses/>. **
-*************************************************************************/
-
-#ifndef PDFPARSER_HPP
-#define PDFPARSER_HPP
-
-#include <initializer_list>
-#include <istream>
-#include <functional>
-#include <map>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-#include <mpark/variant.hpp>
-#include "MessageException.hpp"
-
-template <typename K, typename V>
-class Dictionary {
- using Map = std::map<K, V>;
-
- public:
- typename Map::const_iterator begin () const {return _map.begin();}
- typename Map::const_iterator end () const {return _map.end();}
- typename Map::iterator begin () {return _map.begin();}
- typename Map::iterator end () {return _map.end();}
- typename Map::const_iterator find (const K &key) const {return _map.find(key);}
- bool empty () const {return _map.empty();}
- bool exists (const K &key) const {return _map.find(key) != _map.end();}
- size_t size () const {return _map.size();}
-
- const V* get (const K &key) const {
- auto it = _map.find(key);
- if (it != _map.end())
- return &it->second;
- return nullptr;
- }
-
- std::pair<typename Map::iterator,bool> emplace (const K &key, V &&value) {
- return _map.emplace(key, std::forward<V>(value));
- }
-
- private:
- Map _map;
-};
-
-//////////////////////////////////////////////////////////////////////////
-// PDF object types
-
-struct PDFNull {};
-struct PDFStream {};
-
-struct PDFIndirectObject {
- PDFIndirectObject (int n, int gen) : objnum(n), gennum(gen) {}
- int objnum, gennum;
-};
-
-struct PDFObjectRef {
- PDFObjectRef (int n, int gen) : objnum(n), gennum(gen) {}
- int objnum, gennum;
-};
-
-struct PDFOperator {
- explicit PDFOperator (std::string name) : opname(std::move(name)) {}
- std::string opname;
-};
-
-struct PDFName {
- explicit PDFName (std::string val) : str(std::move(val)) {}
- bool operator == (const PDFName &name) const {return str == name.str;}
- std::string str;
-};
-
-class PDFObject;
-
-using PDFArray = std::vector<PDFObject>;
-using PDFDict = Dictionary<std::string, PDFObject>;
-
-//////////////////////////////////////////////////////////////////////////
-
-/** This class represents a single variadic PDF object. */
-class PDFObject {
- using Value = mpark::variant<
- PDFNull,
- bool,
- int,
- double,
- PDFName,
- PDFStream,
- PDFIndirectObject,
- PDFObjectRef,
- PDFOperator,
- std::string,
- std::unique_ptr<PDFArray>,
- std::unique_ptr<PDFDict>
- >;
-
- public:
- PDFObject () : _value(0) {}
-
- template <typename T>
- explicit PDFObject (T &&value) : _value(std::forward<T>(value)) {}
-
- explicit PDFObject (const char *value) : _value(std::string(value)) {}
- explicit operator std::string () const;
- explicit operator double () const;
-
- template <typename T>
- const T* get () const {return mpark::get_if<T>(&_value);}
-
- void write (std::ostream &os) const;
-
- private:
- Value _value;
-};
-
-
-template<> inline const PDFArray* PDFObject::get() const {
- if (auto p = mpark::get_if<std::unique_ptr<PDFArray>>(&_value))
- return &(**p);
- return nullptr;
-}
-
-
-template<> inline const PDFDict* PDFObject::get() const {
- if (auto p = mpark::get_if<std::unique_ptr<PDFDict>>(&_value))
- return &(**p);
- return nullptr;
-}
-
-
-inline std::ostream& operator << (std::ostream &os, const PDFObject &obj) {
- obj.write(os);
- return os;
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-class InputReader;
-
-class PDFParser {
- public:
- using PDFOperatorHandler = std::function<void (const std::string&, std::vector<PDFObject>&)>;
-
- public:
- std::vector<PDFObject> parse (std::istream &is);
- std::vector<PDFObject> parse (const std::string &str);
- std::vector<PDFObject> parse (InputReader &ir);
- void parse (InputReader &ir, std::vector<PDFObject> &objects);
-
- std::vector<PDFObject> parse (std::istream &is, const PDFOperatorHandler &opHandler);
- std::vector<PDFObject> parse (const std::string &str, const PDFOperatorHandler &opHandler);
- std::vector<PDFObject> parse (InputReader &ir, const PDFOperatorHandler &opHandler);
- void parse (InputReader &ir, std::vector<PDFObject> &objects, const PDFOperatorHandler &opHandler);
-
- protected:
- PDFArray parseArray (InputReader &ir, const PDFOperatorHandler &opHandler);
- PDFDict parseDict (InputReader &ir, const PDFOperatorHandler &opHandler);
-};
-
-
-/** If errors occur while parsing a sequence of PDF objects, an instance of this exception is thrown. */
-struct PDFException : public MessageException {
- explicit PDFException (const std::string &msg) : MessageException(msg) {}
-};
-
-#endif