JavaScriptCore:
[WebKit-https.git] / WebCore / ksvg2 / svg / SVGTextContentElement.cpp
1 /*
2     Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3                   2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     along with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #include "config.h"
24
25 #if ENABLE(SVG)
26 #include "SVGTextContentElement.h"
27
28 #include "CSSPropertyNames.h"
29 #include "CSSValueKeywords.h"
30 #include "FloatPoint.h"
31 #include "FloatRect.h"
32 #include "SVGLength.h"
33 #include "SVGNames.h"
34 #include "XMLNames.h"
35
36 namespace WebCore {
37
38 SVGTextContentElement::SVGTextContentElement(const QualifiedName& tagName, Document* doc)
39     : SVGStyledElement(tagName, doc)
40     , SVGTests()
41     , SVGLangSpace()
42     , SVGExternalResourcesRequired()
43     , m_textLength(this, LengthModeWidth)
44     , m_lengthAdjust(0)
45 {
46 }
47
48 SVGTextContentElement::~SVGTextContentElement()
49 {
50 }
51
52 ANIMATED_PROPERTY_DEFINITIONS(SVGTextContentElement, SVGLength, Length, length, TextLength, textLength, SVGNames::textLengthAttr.localName(), m_textLength)
53 ANIMATED_PROPERTY_DEFINITIONS(SVGTextContentElement, int, Enumeration, enumeration, LengthAdjust, lengthAdjust, SVGNames::lengthAdjustAttr.localName(), m_lengthAdjust)
54
55 long SVGTextContentElement::getNumberOfChars() const
56 {
57     return 0;
58 }
59
60 float SVGTextContentElement::getComputedTextLength() const
61 {
62     return 0.0f;
63 }
64
65 float SVGTextContentElement::getSubStringLength(unsigned long charnum, unsigned long nchars, ExceptionCode&) const
66 {
67     return 0.0f;
68 }
69
70 FloatPoint SVGTextContentElement::getStartPositionOfChar(unsigned long charnum, ExceptionCode&) const
71 {
72     return FloatPoint();
73 }
74
75 FloatPoint SVGTextContentElement::getEndPositionOfChar(unsigned long charnum, ExceptionCode&) const
76 {
77     return FloatPoint();
78 }
79
80 FloatRect SVGTextContentElement::getExtentOfChar(unsigned long charnum, ExceptionCode&) const
81 {
82     return FloatRect();
83 }
84
85 float SVGTextContentElement::getRotationOfChar(unsigned long charnum, ExceptionCode&) const
86 {
87     return 0.0f;
88 }
89
90 long SVGTextContentElement::getCharNumAtPosition(const FloatPoint& point) const
91 {
92     return 0;
93 }
94
95 void SVGTextContentElement::selectSubString(unsigned long charnum, unsigned long nchars, ExceptionCode&) const
96 {
97 }
98
99 void SVGTextContentElement::parseMappedAttribute(MappedAttribute* attr)
100 {
101     //if (attr->name() == SVGNames::lengthAdjustAttr)
102     //    setXBaseValue(SVGLength(this, LengthModeWidth, attr->value()));
103     //else
104     if (attr->name() == SVGNames::textLengthAttr) {
105         setTextLengthBaseValue(SVGLength(this, LengthModeOther, attr->value()));
106         if (textLength().value() < 0.0)
107             document()->accessSVGExtensions()->reportError("A negative value for text attribute <textLength> is not allowed");
108     } else {
109         if (SVGTests::parseMappedAttribute(attr))
110             return;
111         if (SVGLangSpace::parseMappedAttribute(attr)) {
112             if (attr->name().matches(XMLNames::spaceAttr)) {
113                 static const AtomicString preserveString("preserve");
114
115                 if (attr->value() == preserveString)
116                     addCSSProperty(attr, CSS_PROP_WHITE_SPACE, CSS_VAL_PRE);
117                 else
118                     addCSSProperty(attr, CSS_PROP_WHITE_SPACE, CSS_VAL_NOWRAP);
119             }
120             return;
121         }
122         if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
123             return;
124
125         SVGStyledElement::parseMappedAttribute(attr);
126     }
127 }
128
129 }
130
131 #endif // ENABLE(SVG)
132
133 // vim:ts=4:noet