summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp179
1 files changed, 0 insertions, 179 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp
deleted file mode 100644
index 68e1c68b515..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*************************************************************************
-** SpecialManager.cpp **
-** **
-** 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/>. **
-*************************************************************************/
-
-#include <iomanip>
-#include <map>
-#include <sstream>
-#include "SpecialActions.hpp"
-#include "SpecialHandler.hpp"
-#include "SpecialManager.hpp"
-
-using namespace std;
-
-double SpecialActions::PROGRESSBAR_DELAY=1000; // initial delay in seconds (values >= 1000 disable the progressbar)
-
-
-SpecialManager& SpecialManager::instance() {
- static SpecialManager sm;
- return sm;
-}
-
-
-/** Remove all registered handlers. */
-void SpecialManager::unregisterHandlers () {
- _handlerPool.clear();
- _handlersByPrefix.clear();
-}
-
-
-/** Registers a single special handler. This method doesn't check if a
- * handler of the same class is already registered.
- * @param[in] handler pointer to handler to be registered */
-void SpecialManager::registerHandler (unique_ptr<SpecialHandler> handler) {
- if (handler) {
- // get array of prefixes this handler is responsible for
- for (const char *prefix : handler->prefixes())
- _handlersByPrefix[prefix] = handler.get();
- _handlerPool.emplace_back(std::move(handler));
- }
-}
-
-
-/** Registers several special handlers at once.
- * If ignorelist == 0, all given handlers are registered. To exclude selected sets of
- * specials, the corresponding names can be given separated by non alpha-numeric characters,
- * e.g. "color, ps, em" or "color: ps em" etc.
- * @param[in] handlers pointer to zero-terminated array of handlers to be registered
- * @param[in] ignorelist list of special names to be ignored */
-void SpecialManager::registerHandlers (vector<unique_ptr<SpecialHandler>> &handlers, const char *ignorelist) {
- if (handlers.empty())
- return;
- string ignorestr = ignorelist ? ignorelist : "";
- for (char &c : ignorestr)
- if (!isalnum(c))
- c = '%';
- ignorestr = "%"+ignorestr+"%";
-
- for (auto &handler : handlers)
- if (!handler->name() || ignorestr.find("%"+string(handler->name())+"%") == string::npos)
- registerHandler(std::move(handler));
-}
-
-
-/** Looks for a handler responsible for a given special prefix.
- * @param[in] prefix the special prefix, e.g. "color" or "em"
- * @return in case of success: pointer to handler, 0 otherwise */
-SpecialHandler* SpecialManager::findHandlerByPrefix (const string &prefix) const {
- auto it = _handlersByPrefix.find(prefix);
- if (it != _handlersByPrefix.end())
- return it->second;
- return nullptr;
-}
-
-
-/** Looks for a handler with a given name.
- * @param[in] name name of handler to look for, e.g. "papersize"
- * @return in case of success: pointer to handler, 0 otherwise */
-SpecialHandler* SpecialManager::findHandlerByName (const string &name) const {
- for (auto &handler : _handlerPool) {
- if (handler->name() == name)
- return handler.get();
- }
- return nullptr;
-}
-
-
-static string extract_prefix (istream &is) {
- int c;
- string prefix;
- while (isalnum(c=is.get()))
- prefix += char(c);
- if (ispunct(c)) // also add separation character to identifying prefix
- prefix += char(c);
- if (prefix == "ps:" && is.peek() == ':')
- prefix += char(is.get());
- return prefix;
-}
-
-
-void SpecialManager::preprocess (const string &special, SpecialActions &actions) const {
- istringstream iss(special);
- const string prefix = extract_prefix(iss);
- if (SpecialHandler *handler = findHandlerByPrefix(prefix))
- handler->preprocess(prefix, iss, actions);
-}
-
-
-/** Executes a special command.
- * @param[in] special the special expression
- * @param[in] dvi2bp factor to convert DVI units to PS points
- * @param[in] actions actions the special handlers can perform
- * @return true if the special could be processed successfully
- * @throw SpecialException in case of errors during special processing */
-bool SpecialManager::process (const string &special, double dvi2bp, SpecialActions &actions) const {
- istringstream iss(special);
- const string prefix = extract_prefix(iss);
- bool success=false;
- if (SpecialHandler *handler = findHandlerByPrefix(prefix)) {
- handler->setDviScaleFactor(dvi2bp);
- success = handler->process(prefix, iss, actions);
- }
- return success;
-}
-
-
-void SpecialManager::notifyPreprocessingFinished () const {
- for (auto &handler : _handlerPool)
- handler->dviPreprocessingFinished();
-}
-
-
-void SpecialManager::notifyBeginPage (unsigned pageno, SpecialActions &actions) const {
- for (auto &handler : _handlerPool)
- handler->dviBeginPage(pageno, actions);
-}
-
-
-void SpecialManager::notifyEndPage (unsigned pageno, SpecialActions &actions) const {
- for (auto &handler : _handlerPool)
- handler->dviEndPage(pageno, actions);
-}
-
-
-void SpecialManager::notifyPositionChange (double x, double y, SpecialActions &actions) const {
- for (auto &handler : _handlerPool)
- handler->dviMovedTo(x, y, actions);
-}
-
-
-void SpecialManager::writeHandlerInfo (ostream &os) const {
- ios::fmtflags osflags(os.flags());
- map<string,SpecialHandler*> sortmap;
- for (const auto &handler : _handlerPool)
- if (handler->name())
- sortmap[handler->name()] = handler.get();
- for (const auto &strhandlerpair : sortmap) {
- os << setw(10) << left << strhandlerpair.second->name() << ' ';
- if (strhandlerpair.second->info())
- os << strhandlerpair.second->info();
- os << endl;
- }
- os.flags(osflags); // restore format flags
-}