Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2108)

Unified Diff: Source/core/svg/SVGGlyphMap.h

Issue 656913006: Remove SVG fonts (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update tests for landing Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/svg/SVGGlyphMap.h
diff --git a/Source/core/svg/SVGGlyphMap.h b/Source/core/svg/SVGGlyphMap.h
deleted file mode 100644
index de0dfc16920b708c02e22f1563b7e071d8f21cc0..0000000000000000000000000000000000000000
--- a/Source/core/svg/SVGGlyphMap.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef SVGGlyphMap_h
-#define SVGGlyphMap_h
-
-#if ENABLE(SVG_FONTS)
-#include "core/svg/SVGParserUtilities.h"
-#include "platform/fonts/Latin1TextIterator.h"
-#include "platform/fonts/SVGGlyph.h"
-#include "platform/text/SurrogatePairAwareTextIterator.h"
-#include "wtf/HashMap.h"
-#include "wtf/Vector.h"
-
-namespace blink {
-
-struct GlyphMapNode;
-
-typedef HashMap<UChar32, RefPtr<GlyphMapNode> > GlyphMapLayer;
-
-struct GlyphMapNode : public RefCounted<GlyphMapNode> {
-private:
- GlyphMapNode() { }
-public:
- static PassRefPtr<GlyphMapNode> create() { return adoptRef(new GlyphMapNode); }
-
- Vector<SVGGlyph> glyphs;
-
- GlyphMapLayer children;
-};
-
-class SVGGlyphMap {
-public:
- SVGGlyphMap() : m_currentPriority(0) { }
-
- void addGlyph(const String& glyphIdentifier, const String& unicodeString, SVGGlyph glyph)
- {
- ASSERT(!glyphIdentifier.isEmpty() || !unicodeString.isEmpty());
-
- bool hasGlyphIdentifier = !glyphIdentifier.isEmpty();
- if (unicodeString.isEmpty()) {
- // Register glyphs with 'id's in the id glyph map and in the glyph table.
- ASSERT(hasGlyphIdentifier);
- appendToGlyphTable(glyph);
- m_idGlyphs.add(glyphIdentifier, glyph.tableEntry);
- return;
- }
-
- unsigned length = unicodeString.length();
-
- RefPtr<GlyphMapNode> node;
- if (unicodeString.is8Bit()) {
- Latin1TextIterator textIterator(unicodeString.characters8(), 0, length, length);
- node = findOrCreateNode(textIterator);
- } else {
- SurrogatePairAwareTextIterator textIterator(unicodeString.characters16(), 0, length, length);
- node = findOrCreateNode(textIterator);
- }
- if (!node)
- return;
-
- // Register glyph associated with an unicode string into the glyph map.
- node->glyphs.append(glyph);
- SVGGlyph& lastGlyph = node->glyphs.last();
- lastGlyph.priority = m_currentPriority++;
- lastGlyph.unicodeStringLength = length;
-
- // If the glyph is named, also add it to the named glyph name, and to the glyph table in both cases.
- appendToGlyphTable(lastGlyph);
- if (!lastGlyph.glyphName.isEmpty())
- m_namedGlyphs.add(lastGlyph.glyphName, lastGlyph.tableEntry);
- if (hasGlyphIdentifier)
- m_idGlyphs.add(glyphIdentifier, lastGlyph.tableEntry);
- }
-
- void appendToGlyphTable(SVGGlyph& glyph)
- {
- size_t tableEntry = m_glyphTable.size();
- ASSERT(tableEntry < std::numeric_limits<unsigned short>::max());
-
- // The first table entry starts with 1. 0 denotes an unknown glyph.
- glyph.tableEntry = tableEntry + 1;
- m_glyphTable.append(glyph);
- }
-
- static inline bool compareGlyphPriority(const SVGGlyph& first, const SVGGlyph& second)
- {
- return first.priority < second.priority;
- }
-
- void collectGlyphsForString(const String& string, Vector<SVGGlyph>& glyphs)
- {
- unsigned length = string.length();
-
- if (!length)
- return;
-
- if (string.is8Bit()) {
- Latin1TextIterator textIterator(string.characters8(), 0, length, length);
- collectGlyphsForIterator(textIterator, glyphs);
- } else {
- SurrogatePairAwareTextIterator textIterator(string.characters16(), 0, length, length);
- collectGlyphsForIterator(textIterator, glyphs);
- }
-
- std::sort(glyphs.begin(), glyphs.end(), compareGlyphPriority);
- }
-
- void collectGlyphsForStringExact(const String& string, Vector<SVGGlyph>& glyphs) const
- {
- unsigned length = string.length();
-
- if (!length)
- return;
-
- RefPtr<GlyphMapNode> node;
- if (string.is8Bit()) {
- Latin1TextIterator textIterator(string.characters8(), 0, length, length);
- node = findNode(textIterator);
- } else {
- SurrogatePairAwareTextIterator textIterator(string.characters16(), 0, length, length);
- node = findNode(textIterator);
- }
-
- if (node)
- glyphs.appendVector(node->glyphs);
- }
-
- void collectGlyphsForUnicodeRange(const UnicodeRange& unicodeRange, Vector<SVGGlyph>& glyphs) const
- {
- for (unsigned character = unicodeRange.first; character <= unicodeRange.second; ++character) {
- if (RefPtr<GlyphMapNode> node = m_rootLayer.get(character))
- glyphs.appendVector(node->glyphs);
- }
- }
-
- void clear()
- {
- m_rootLayer.clear();
- m_glyphTable.clear();
- m_idGlyphs.clear();
- m_namedGlyphs.clear();
- m_currentPriority = 0;
- }
-
- void dropNamedGlyphMap()
- {
- m_namedGlyphs.clear();
- }
-
- const SVGGlyph& svgGlyphForGlyph(Glyph glyph) const
- {
- if (!glyph || glyph > m_glyphTable.size()) {
- DEFINE_STATIC_LOCAL(SVGGlyph, defaultGlyph, ());
- return defaultGlyph;
- }
- return m_glyphTable[glyph - 1];
- }
-
- const SVGGlyph& glyphIdentifierForAltGlyphReference(const String& glyphIdentifier) const
- {
- return svgGlyphForGlyph(m_idGlyphs.get(glyphIdentifier));
- }
-
- const SVGGlyph& glyphIdentifierForGlyphName(const String& glyphName) const
- {
- return svgGlyphForGlyph(m_namedGlyphs.get(glyphName));
- }
-
-private:
- template<typename Iterator>
- PassRefPtr<GlyphMapNode> findOrCreateNode(Iterator& textIterator)
- {
- GlyphMapLayer* currentLayer = &m_rootLayer;
-
- RefPtr<GlyphMapNode> node;
- UChar32 character = 0;
- unsigned clusterLength = 0;
- while (textIterator.consume(character, clusterLength)) {
- node = currentLayer->get(character);
- if (!node) {
- node = GlyphMapNode::create();
- currentLayer->set(character, node);
- }
- currentLayer = &node->children;
- textIterator.advance(clusterLength);
- }
-
- return node.release();
- }
-
- template<typename Iterator>
- PassRefPtr<GlyphMapNode> findNode(Iterator& textIterator) const
- {
- const GlyphMapLayer* currentLayer = &m_rootLayer;
-
- RefPtr<GlyphMapNode> node;
- UChar32 character = 0;
- unsigned clusterLength = 0;
- while (textIterator.consume(character, clusterLength)) {
- node = currentLayer->get(character);
- if (!node)
- break;
- currentLayer = &node->children;
- textIterator.advance(clusterLength);
- }
-
- return node.release();
- }
-
- template<typename Iterator>
- void collectGlyphsForIterator(Iterator& textIterator, Vector<SVGGlyph>& glyphs)
- {
- GlyphMapLayer* currentLayer = &m_rootLayer;
-
- UChar32 character = 0;
- unsigned clusterLength = 0;
- while (textIterator.consume(character, clusterLength)) {
- RefPtr<GlyphMapNode> node = currentLayer->get(character);
- if (!node)
- break;
- glyphs.appendVector(node->glyphs);
- currentLayer = &node->children;
- textIterator.advance(clusterLength);
- }
- }
-
- GlyphMapLayer m_rootLayer;
- Vector<SVGGlyph> m_glyphTable;
- HashMap<String, Glyph> m_namedGlyphs;
- HashMap<String, Glyph> m_idGlyphs;
- int m_currentPriority;
-};
-
-}
-
-#endif // ENABLE(SVG_FONTS)
-#endif // SVGGlyphMap_h

Powered by Google App Engine
This is Rietveld 408576698