1/* 2 * Copyright (C) 2011 Leo Yang <leoyang@webkit.org> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#include "config.h" 21 22#if ENABLE(SVG_FONTS) 23#include "core/svg/SVGGlyphRefElement.h" 24 25#include "core/XLinkNames.h" 26#include "core/svg/SVGParserUtilities.h" 27#include "wtf/text/AtomicString.h" 28 29namespace blink { 30 31inline SVGGlyphRefElement::SVGGlyphRefElement(Document& document) 32 : SVGElement(SVGNames::glyphRefTag, document) 33 , SVGURIReference(this) 34 , m_x(0) 35 , m_y(0) 36 , m_dx(0) 37 , m_dy(0) 38{ 39} 40 41DEFINE_NODE_FACTORY(SVGGlyphRefElement) 42 43bool SVGGlyphRefElement::hasValidGlyphElement(AtomicString& glyphName) const 44{ 45 // FIXME: We only support xlink:href so far. 46 // https://bugs.webkit.org/show_bug.cgi?id=64787 47 Element* element = targetElementFromIRIString(getAttribute(XLinkNames::hrefAttr), document(), &glyphName); 48 return isSVGGlyphElement(element); 49} 50 51template<typename CharType> 52void SVGGlyphRefElement::parseAttributeInternal(const QualifiedName& name, const AtomicString& value) 53{ 54 const CharType* ptr = value.isEmpty() ? 0 : value.string().getCharacters<CharType>(); 55 const CharType* end = ptr + value.length(); 56 57 // FIXME: We need some error handling here. 58 SVGParsingError parseError = NoError; 59 if (name == SVGNames::xAttr) { 60 parseNumber(ptr, end, m_x); 61 } else if (name == SVGNames::yAttr) { 62 parseNumber(ptr, end, m_y); 63 } else if (name == SVGNames::dxAttr) { 64 parseNumber(ptr, end, m_dx); 65 } else if (name == SVGNames::dyAttr) { 66 parseNumber(ptr, end, m_dy); 67 } else if (SVGURIReference::parseAttribute(name, value, parseError)) { 68 } else { 69 SVGElement::parseAttribute(name, value); 70 } 71 reportAttributeParsingError(parseError, name, value); 72} 73 74void SVGGlyphRefElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 75{ 76 if (value.isEmpty() || value.is8Bit()) 77 parseAttributeInternal<LChar>(name, value); 78 else 79 parseAttributeInternal<UChar>(name, value); 80} 81 82const AtomicString& SVGGlyphRefElement::glyphRef() const 83{ 84 return fastGetAttribute(SVGNames::glyphRefAttr); 85} 86 87void SVGGlyphRefElement::setGlyphRef(const AtomicString&) 88{ 89 // FIXME: Set and honor attribute change. 90 // https://bugs.webkit.org/show_bug.cgi?id=64787 91} 92 93void SVGGlyphRefElement::setX(float x) 94{ 95 // FIXME: Honor attribute change. 96 // https://bugs.webkit.org/show_bug.cgi?id=64787 97 m_x = x; 98} 99 100void SVGGlyphRefElement::setY(float y) 101{ 102 // FIXME: Honor attribute change. 103 // https://bugs.webkit.org/show_bug.cgi?id=64787 104 m_y = y; 105} 106 107void SVGGlyphRefElement::setDx(float dx) 108{ 109 // FIXME: Honor attribute change. 110 // https://bugs.webkit.org/show_bug.cgi?id=64787 111 m_dx = dx; 112} 113 114void SVGGlyphRefElement::setDy(float dy) 115{ 116 // FIXME: Honor attribute change. 117 // https://bugs.webkit.org/show_bug.cgi?id=64787 118 m_dy = dy; 119} 120 121} 122 123#endif 124