summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp106
1 files changed, 0 insertions, 106 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp
deleted file mode 100644
index 0a0b069e965..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*************************************************************************
-** ToUnicodeMap.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 <limits>
-#include "ToUnicodeMap.hpp"
-#include "Unicode.hpp"
-
-using namespace std;
-
-
-/** Adds valid but random mappings for all missing character indexes.
- * If a font's cmap table doesn't provide Unicode mappings for some
- * glyphs in the font, it's necessary to fill the gaps in order to
- * handle all characters correctly. This functions assumes that the
- * characters are numbered from 1 to maxIndex.
- * @param[in] maxIndex largest character index to consider
- * @return true on success */
-bool ToUnicodeMap::addMissingMappings (uint32_t maxIndex) {
- bool success=true;
- // collect Unicode points already in assigned
- NumericRanges<uint32_t> codepoints;
- for (size_t i=0; i < numRanges() && success; i++)
- codepoints.addRange(rangeAt(i).minval(), rangeAt(i).maxval());
- // fill unmapped ranges
- if (empty()) // no Unicode mapping present at all?
- success = fillRange(1, maxIndex, 1, codepoints, true);
- else { // (partial) Unicode mapping present?
- success = fillRange(1, rangeAt(0).min()-1, rangeAt(0).minval()-1, codepoints, false);
- for (size_t i=0; i < numRanges()-1 && success; i++)
- success = fillRange(rangeAt(i).max()+1, rangeAt(i+1).min()-1, rangeAt(i).maxval()+1, codepoints, true);
- if (success)
- success = fillRange(rangeAt(numRanges()-1).max()+1, maxIndex, rangeAt(numRanges()-1).maxval()+1, codepoints, true);
- }
- return success;
-}
-
-
-/** Checks if a given codepoint is valid and unused. Otherwise, try to find an alternative.
- * @param[in,out] ucp codepoint to fix
- * @param[in] used_codepoints codepoints already in use
- * @param[in] ascending if true, increase ucp to look for valid/unused codepoints
- * @return true on success */
-static bool fix_codepoint (uint32_t &ucp, const NumericRanges<uint32_t> &used_codepoints, bool ascending) {
- uint32_t start = ucp;
- while (!Unicode::isValidCodepoint(ucp) && used_codepoints.valueExists(ucp)) {
- if (ascending)
- ucp = (ucp == numeric_limits<uint32_t>::max()) ? 0 : ucp+1;
- else
- ucp = (ucp == 0) ? numeric_limits<uint32_t>::max() : ucp-1;
- if (ucp == start) // no free Unicode point found
- return false;
- }
- return true;
-}
-
-
-static bool is_less_or_equal (uint32_t a, uint32_t b) {return a <= b;}
-static bool is_greater_or_equal (uint32_t a, uint32_t b) {return a >= b;}
-
-
-/** Adds index to Unicode mappings for a given range of character indexes.
- * @param[in] minIndex lower bound of range to fill
- * @param[in] maxIndex upper bound of range to fill
- * @param[in] ucp first Unicode point to add (if possible)
- * @param[in,out] used_ucps Unicode points already in use
- * @param[in] ascending if true, fill range from lower to upper bound
- * @return true on success */
-bool ToUnicodeMap::fillRange (uint32_t minIndex, uint32_t maxIndex, uint32_t ucp, NumericRanges<uint32_t> &used_ucps, bool ascending) {
- if (minIndex <= maxIndex) {
- uint32_t first=minIndex, last=maxIndex;
- int inc=1;
- bool (*cmp)(uint32_t, uint32_t) = is_less_or_equal;
- if (!ascending) {
- swap(first, last);
- inc = -1;
- cmp = is_greater_or_equal;
- }
- for (uint32_t i=first; cmp(i, last); i += inc) {
- if (!fix_codepoint(ucp, used_ucps, ascending))
- return false;
- else {
- addRange(i, i, ucp);
- used_ucps.addRange(ucp);
- ucp += inc; // preferred Unicode point for the next character of the current range
- }
- }
- }
- return true;
-} \ No newline at end of file