summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp169
1 files changed, 0 insertions, 169 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp
deleted file mode 100644
index 6533333b5ea..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*************************************************************************
-** VFReader.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 <sstream>
-#include "FixWord.hpp"
-#include "Font.hpp"
-#include "Length.hpp"
-#include "VFActions.hpp"
-#include "VFReader.hpp"
-
-using namespace std;
-
-
-VFActions* VFReader::replaceActions (VFActions *a) {
- VFActions *ret = _actions;
- _actions = a;
- return ret;
-}
-
-
-/** Reads a single VF command from the current position of the input stream and calls the
- * corresponding cmdFOO method. The execution can be influenced by a function of type ApproveOpcode.
- * It takes an opcode and returns true if the command is supposed to be executed.
- * @param[in] approve function to approve invocation of the action assigned to command
- * @return opcode of the executed command */
-int VFReader::executeCommand (ApproveAction approve) {
- int opcode = readByte();
- if (!isStreamValid() || opcode < 0) // at end of file?
- throw VFException("invalid VF file");
-
- bool approved = !approve || approve(opcode);
- VFActions *actions = _actions;
- if (!approved)
- replaceActions(nullptr); // disable actions
-
- if (opcode <= 241) // short character definition?
- cmdShortChar(opcode);
- else if (opcode >= 243 && opcode <= 246) // font definition?
- cmdFontDef(opcode-243+1);
- else {
- switch (opcode) {
- case 242: cmdLongChar(); break; // long character definition
- case 247: cmdPre(); break; // preamble
- case 248: cmdPost(); break; // postamble
- default : { // invalid opcode
- replaceActions(actions); // reenable actions
- throw VFException("undefined VF command (opcode " + std::to_string(opcode) + ")");
- }
- }
- }
- replaceActions(actions); // reenable actions
- return opcode;
-}
-
-
-bool VFReader::executeAll () {
- clearStream(); // reset all status bits
- if (!isStreamValid())
- return false;
- seek(0); // move file pointer to first byte of the input stream
- while (!eof() && executeCommand() != 248); // stop reading after post (248)
- return true;
-}
-
-
-bool VFReader::executePreambleAndFontDefs () {
- clearStream();
- if (!isStreamValid())
- return false;
- seek(0); // move file pointer to first byte of the input stream
- auto is_pre_or_fontdef = [](int op) {return op > 242;};
- while (!eof() && executeCommand(is_pre_or_fontdef) > 242); // stop reading after last font definition
- return true;
-}
-
-
-bool VFReader::executeCharDefs () {
- clearStream();
- if (!isStreamValid())
- return false;
- seek(0);
- auto is_chardef = [](int op) {return op < 243;};
- while (!eof() && executeCommand(is_chardef) < 243); // stop reading after last char definition
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-/** Reads and executes DVI preamble command. */
-void VFReader::cmdPre () {
- uint32_t i = readUnsigned(1); // identification number (should be 2)
- uint32_t k = readUnsigned(1); // length of following comment
- string cmt = readString(k); // comment
- uint32_t cs = readUnsigned(4); // check sum to be compared with TFM cecksum
- int32_t ds = readUnsigned(4); // design size (same as TFM design size) (fix_word)
- _designSize = double(FixWord(ds))*Length::pt2bp;
- if (i != 202)
- throw VFException("invalid identification value in preamble");
- if (_actions)
- _actions->vfPreamble(cmt, cs, ds);
-}
-
-
-void VFReader::cmdPost () {
- while ((readUnsigned(1)) == 248); // skip fill bytes
- if (_actions)
- _actions->vfPostamble();
-}
-
-
-void VFReader::cmdLongChar () {
- uint32_t pl = readUnsigned(4); // packet length (length of DVI subroutine)
- if (!_actions)
- seek(8+pl, ios::cur); // skip remaining char definition bytes
- else {
- uint32_t cc = readUnsigned(4); // character code
- readUnsigned(4); // equals character width from corresponding TFM file
- auto dvi = readBytes(pl); // DVI subroutine
- _actions->defineVFChar(cc, std::move(dvi)); // call template method for user actions
- }
-}
-
-
-/** Reads and executes short_char_x command.
- * @param[in] pl packet length (length of DVI subroutine) */
-void VFReader::cmdShortChar (int pl) {
- if (!_actions)
- seek(4+pl, ios::cur); // skip char definition bytes
- else {
- uint32_t cc = readUnsigned(1); // character code
- readUnsigned(3); // character width from corresponding TFM file
- auto dvi = readBytes(pl); // DVI subroutine
- _actions->defineVFChar(cc, std::move(dvi)); // call template method for user actions
- }
-}
-
-
-void VFReader::cmdFontDef (int len) {
- uint32_t fontnum = readUnsigned(len); // font number
- uint32_t checksum = readUnsigned(4); // font checksum (to be compared with corresponding TFM checksum)
- uint32_t ssize = readUnsigned(4); // scaled size of font relative to design size (fix_word)
- uint32_t dsize = readUnsigned(4); // design size of font (same as TFM design size) (fix_word)
- uint32_t pathlen = readUnsigned(1); // length of font path
- uint32_t namelen = readUnsigned(1); // length of font name
- string fontpath = readString(pathlen);
- string fontname = readString(namelen);
- if (_actions) {
- double ss = double(FixWord(ssize))*Length::pt2bp;
- double ds = double(FixWord(dsize))*Length::pt2bp;
- _actions->defineVFFont(fontnum, fontpath, fontname, checksum, ds, ss*_designSize);
- }
-}