Reviewed by Eric.
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 02:41:53 +0000 (02:41 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 02:41:53 +0000 (02:41 +0000)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=10649 (WebKit SVG needs SVG Fonts support)

Begin implementation of SVG Fonts module. Basic documents using SVG Fonts already work.
Only local, in-document fonts who declare their glyphs using the <glyph d="..."> path syntax
are supported. (<glyph> containing arbitary SVG content as child elements, not supported yet).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29012 268f45cc-cd09-0410-ab3c-d52691b4dbfc

64 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/mac/svg/css/css-box-min-width-expected.checksum
LayoutTests/platform/mac/svg/css/css-box-min-width-expected.png
LayoutTests/platform/mac/svg/custom/font-face-simple-expected.checksum
LayoutTests/platform/mac/svg/custom/font-face-simple-expected.png
LayoutTests/platform/mac/svg/custom/font-face-simple-expected.txt
LayoutTests/platform/mac/svg/custom/inline-svg-in-xhtml-expected.checksum
LayoutTests/platform/mac/svg/custom/inline-svg-in-xhtml-expected.png
LayoutTests/platform/mac/svg/custom/use-infinite-recursion-expected.png [moved from LayoutTests/svg/custom/use-infinite-recursion-expected.png with 100% similarity]
LayoutTests/svg/custom/inline-svg-in-xhtml-expected.checksum [deleted file]
LayoutTests/svg/custom/inline-svg-in-xhtml-expected.png [deleted file]
LayoutTests/svg/custom/use-infinite-recursion-expected.checksum [deleted file]
WebCore/ChangeLog
WebCore/DerivedSources.make
WebCore/WebCore.pro
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/bindings/js/JSSVGElementWrapperFactory.cpp
WebCore/bindings/objc/DOM.mm
WebCore/bindings/objc/DOMInternal.h
WebCore/bindings/objc/DOMSVG.h
WebCore/css/CSSFontFace.h
WebCore/css/CSSFontFaceSrcValue.h
WebCore/css/CSSFontSelector.cpp
WebCore/css/SVGCSSFontFace.cpp [new file with mode: 0644]
WebCore/css/SVGCSSFontFace.h [new file with mode: 0644]
WebCore/platform/graphics/Font.cpp
WebCore/platform/graphics/Font.h
WebCore/platform/graphics/FontData.cpp
WebCore/platform/graphics/FontData.h
WebCore/platform/graphics/cg/PathCG.cpp
WebCore/rendering/SVGInlineTextBox.cpp
WebCore/rendering/SVGRootInlineBox.cpp
WebCore/svg/SVGDefinitionSrcElement.cpp
WebCore/svg/SVGDefinitionSrcElement.h
WebCore/svg/SVGDefinitionSrcElement.idl
WebCore/svg/SVGFont.cpp [new file with mode: 0644]
WebCore/svg/SVGFontElement.cpp [new file with mode: 0644]
WebCore/svg/SVGFontElement.h [new file with mode: 0644]
WebCore/svg/SVGFontElement.idl [new file with mode: 0644]
WebCore/svg/SVGFontFaceElement.cpp
WebCore/svg/SVGFontFaceElement.h
WebCore/svg/SVGFontFaceElement.idl
WebCore/svg/SVGFontFaceFormatElement.cpp
WebCore/svg/SVGFontFaceFormatElement.h
WebCore/svg/SVGFontFaceFormatElement.idl
WebCore/svg/SVGFontFaceNameElement.cpp
WebCore/svg/SVGFontFaceNameElement.h
WebCore/svg/SVGFontFaceNameElement.idl
WebCore/svg/SVGFontFaceSrcElement.cpp
WebCore/svg/SVGFontFaceSrcElement.h
WebCore/svg/SVGFontFaceSrcElement.idl
WebCore/svg/SVGFontFaceUriElement.cpp
WebCore/svg/SVGFontFaceUriElement.h
WebCore/svg/SVGFontFaceUriElement.idl
WebCore/svg/SVGGlyphElement.cpp [new file with mode: 0644]
WebCore/svg/SVGGlyphElement.h [new file with mode: 0644]
WebCore/svg/SVGGlyphElement.idl [new file with mode: 0644]
WebCore/svg/SVGMissingGlyphElement.cpp [new file with mode: 0644]
WebCore/svg/SVGMissingGlyphElement.h [new file with mode: 0644]
WebCore/svg/SVGMissingGlyphElement.idl [new file with mode: 0644]
WebCore/svg/svgtags.in
WebKit/mac/ChangeLog
WebKit/mac/MigrateHeaders.make

index ee47c23..5c6bc78 100644 (file)
@@ -1,3 +1,25 @@
+2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver.
+
+        Update layout test results after the SVG Fonts addition.
+        <font-face> is now also disabled by default wrapped in ENABLE(SVG_FONTS) block.
+
+        Fix two misplaced layout test results (results addeed in the wrong place.)
+
+        * platform/mac/svg/css/css-box-min-width-expected.checksum:
+        * platform/mac/svg/css/css-box-min-width-expected.png:
+        * platform/mac/svg/custom/font-face-simple-expected.checksum:
+        * platform/mac/svg/custom/font-face-simple-expected.png:
+        * platform/mac/svg/custom/font-face-simple-expected.txt:
+        * platform/mac/svg/custom/inline-svg-in-xhtml-expected.checksum:
+        * platform/mac/svg/custom/inline-svg-in-xhtml-expected.png:
+        * platform/mac/svg/custom/use-infinite-recursion-expected.png: Added.
+        * svg/custom/inline-svg-in-xhtml-expected.checksum: Removed.
+        * svg/custom/inline-svg-in-xhtml-expected.png: Removed.
+        * svg/custom/use-infinite-recursion-expected.checksum: Removed.
+        * svg/custom/use-infinite-recursion-expected.png: Removed.
+
 2007-12-27  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Oliver Hunt.
index 12d9a5f..9624d97 100644 (file)
Binary files a/LayoutTests/platform/mac/svg/css/css-box-min-width-expected.png and b/LayoutTests/platform/mac/svg/css/css-box-min-width-expected.png differ
index cb48cf0..92694f7 100644 (file)
Binary files a/LayoutTests/platform/mac/svg/custom/font-face-simple-expected.png and b/LayoutTests/platform/mac/svg/custom/font-face-simple-expected.png differ
index 0c1323e..ea48969 100644 (file)
@@ -1,14 +1,14 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (10,34) size 676x235
+  RenderSVGRoot {svg} at (10,34) size 676x245
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
     RenderSVGText {text} at (10,113) size 676x100 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-79) size 676x100
         chunk 1 text run 1 at (10.00,113.39) startOffset 0 endOffset 13 width 676.00: "CSS font-face"
-    RenderSVGText {text} at (10,226) size 676x101 contains 1 chunk(s)
-      RenderSVGInlineText {#text} at (0,-79) size 676x101
-        chunk 1 text run 1 at (10.00,226.77) startOffset 0 endOffset 13 width 676.00: "SVG font-face"
+    RenderSVGText {text} at (10,226) size 567x135 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,-82) size 567x135
+        chunk 1 text run 1 at (10.00,226.77) startOffset 0 endOffset 13 width 567.00: "SVG font-face"
     RenderSVGText {text} at (40,264) size 257x19 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 257x19
         chunk 1 text run 1 at (40.00,264.57) startOffset 0 endOffset 40 width 257.00: "The fonts used above should be identical"
index 1df8cb7..cad45c8 100644 (file)
Binary files a/LayoutTests/platform/mac/svg/custom/inline-svg-in-xhtml-expected.png and b/LayoutTests/platform/mac/svg/custom/inline-svg-in-xhtml-expected.png differ
diff --git a/LayoutTests/svg/custom/inline-svg-in-xhtml-expected.checksum b/LayoutTests/svg/custom/inline-svg-in-xhtml-expected.checksum
deleted file mode 100644 (file)
index 002152f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-8482c18b20474f77558bcc63b9760602
\ No newline at end of file
diff --git a/LayoutTests/svg/custom/inline-svg-in-xhtml-expected.png b/LayoutTests/svg/custom/inline-svg-in-xhtml-expected.png
deleted file mode 100644 (file)
index 546e982..0000000
Binary files a/LayoutTests/svg/custom/inline-svg-in-xhtml-expected.png and /dev/null differ
diff --git a/LayoutTests/svg/custom/use-infinite-recursion-expected.checksum b/LayoutTests/svg/custom/use-infinite-recursion-expected.checksum
deleted file mode 100644 (file)
index d69a371..0000000
+++ /dev/null
@@ -1 +0,0 @@
-853de00567d121bea0b7bece66a5d61c
\ No newline at end of file
index a6c6abb..af52c89 100644 (file)
@@ -1,3 +1,123 @@
+2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Eric.
+
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10649 (WebKit SVG needs SVG Fonts support)
+
+        Begin implementation of SVG Fonts module. Basic documents using SVG Fonts already work.
+        Only local, in-document fonts who declare their glyphs using the <glyph d="..."> path syntax
+        are supported. (<glyph> containing arbitary SVG content as child elements, not supported yet).
+
+        Limited to single char <-> glyph mapping, no ligatures supported yet.
+        (ie. <glyph unicode='A'/> <glyph unicode='AB'/> - it ignores the 'AB' glyph definition for now)
+
+        Mark all SVG Font related classes & usages in ENABLE(SVG_FONTS) blocks.
+
+        No layout test changes for a --no-svg-fonts build, heavy changes if enabled. Because a lot of SVG Font
+        attributes are not processed yet, the rendering looks wrong - hence disabled by default.)
+
+        * DerivedSources.make: Add SVGFontElement/SVGGlyphElement/SVGMissingGlyphElement
+        * WebCore.pro: Updated build system.
+        * WebCore.vcproj/WebCore.vcproj: Ditto.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * bindings/js/JSSVGElementWrapperFactory.cpp: Add JSSVGFontElement/JSSVGGlyphElement/JSSVGMissingGlyphElement
+        * bindings/objc/DOM.mm: Ditto (for DOMSVG*).
+        (WebCore::createElementClassMap):
+        * bindings/objc/DOMInternal.h: Ditto.
+        * bindings/objc/DOMSVG.h: Ditto.
+        * css/CSSFontFace.h: Mark three functions 'virtual', to be overriden by SVGCSSFontFace
+        * css/CSSFontFaceSrcValue.h: Add functionality to identify as SVG CSS font face source.
+        (WebCore::CSSFontFaceSrcValue::m_fontFaceElement): Hold a pointer to the font face which created it.
+        (WebCore::CSSFontFaceSrcValue::svgFontFaceElement):
+        (WebCore::CSSFontFaceSrcValue::setSVGFontFaceElement):
+        * css/CSSFontSelector.cpp: Build 'SVGCSSFontFace' objects for local, in-document SVG fonts.
+        (WebCore::CSSFontSelector::addFontFaceRule):
+        * css/SVGCSSFontFace.cpp: Added. (Simplified implementation for SVG Fonts)
+        (WebCore::SVGCSSFontFace::SVGCSSFontFace):
+        (WebCore::SVGCSSFontFace::~SVGCSSFontFace):
+        (WebCore::SVGCSSFontFace::isValid):
+        (WebCore::SVGCSSFontFace::addSource):
+        (WebCore::SVGCSSFontFace::getFontData):
+        * css/SVGCSSFontFace.h: Added.
+        * platform/graphics/cg/PathCG.cpp:
+        (WebCore::Path::closeSubpath): Silence a CG warning when calling closeSubpath() on empty path.
+        * platform/graphics/Font.cpp: Add some logic to call into SVG Font code when operating on SVG Fonts.
+        (WebCore::Font::ascent): Pass font size to FontData::ascent() call
+        (WebCore::Font::descent): Pass font size to FontData::descent() call
+        (WebCore::Font::canUseGlyphCache): Always return true for SVG fonts here.
+        (WebCore::Font::drawGlyphBuffer): Call drawGlyphsWithSVGFont (instead of drawGlyphs) if the primary font is a SVG font.
+        * platform/graphics/Font.h: Add (SVG-only!) ability to store a RenderObject pointer, to the element which invoked the drawText() call.
+        (WebCore::TextRun::TextRun):
+        (WebCore::TextRun::referencingRenderObject):
+        (WebCore::TextRun::setReferencingRenderObject):
+        * platform/graphics/FontData.cpp:
+        (WebCore::FontData::FontData):
+        (WebCore::FontData::ascent):
+        (WebCore::FontData::descent):
+        * platform/graphics/FontData.h: Store a pointer to the SVGFontFaceElement, which created this FontData object - needed for drawGlyphsWithSVGFont().
+        (WebCore::FontData::isSVGFont): Offer a way to determine wheter this is a FontData object, created by a SVGFontFaceElement.
+        (WebCore::FontData::svgFontFace):
+        * rendering/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::calculateGlyphWidth): Add assertion.
+        * rendering/SVGRootInlineBox.cpp:
+        (WebCore::svgTextRunForInlineTextBox): Always call 'setReferencingRenderObject(myRenderSVGText)' on the new TextRun
+        * svg/SVGFont.cpp: Added.
+        (WebCore::Font::drawGlyphsWithSVGFont): Outsourced implementation of SVG Fonts into it's own file.
+        * svg/SVGFontElement.cpp: Added. (Note: this holds the GlyphHashMap which associates certain <glyph> objects with unicode values)
+        (WebCore::SVGFontElement::SVGFontElement):
+        (WebCore::SVGFontElement::~SVGFontElement):
+        (WebCore::SVGFontElement::parseMappedAttribute):
+        (WebCore::SVGFontElement::collectGlyphs):
+        (WebCore::SVGFontElement::glyphIdentifierForGlyphCode):
+        * svg/SVGFontElement.h: Added.
+        (WebCore::GlyphHash::hash):
+        (WebCore::GlyphHash::equal):
+        (WebCore::GlyphHashTraits::deletedValue):
+        (WebCore::SVGFontElement::rendererIsNeeded):
+        (WebCore::SVGFontElement::contextElement):
+        * svg/SVGFontElement.idl: Added.
+        * svg/SVGFontFaceElement.cpp: Build SVG specific 'FontData' object
+        (WebCore::SVGFontFaceElement::unitsPerEm):
+        (WebCore::SVGFontFaceElement::fontFamily):
+        (WebCore::SVGFontFaceElement::createFontData): Builds SVG specified 'FontData' object with the markup specified ascent/descent values etc..
+        (WebCore::SVGFontFaceElement::rebuildFontFace): Construct CSSFontFaceSrc object (marked as 'isSVGFontFaceSrc') to satisfy CSSFontSelector::addFontFaceRule.
+        (WebCore::SVGFontFaceElement::insertedIntoDocument): Rebuild font face.
+        (WebCore::SVGFontFaceElement::glyphIdentifierForGlyphCode): Allows drawGlyphsWithSVGFont to access the glyph hash map living in the SVGFontElement.
+        * svg/SVGFontFaceElement.h: Fixed code formatting issues & wrap in ENABLE(SVG_FONTS) blocks.
+        * svg/SVGFontFaceElement.idl: Ditto.
+        * svg/SVGFontFaceFormatElement.cpp: Ditto.
+        * svg/SVGFontFaceFormatElement.h: Ditto.
+        * svg/SVGFontFaceFormatElement.idl: Ditto.
+        * svg/SVGFontFaceNameElement.cpp: Ditto.
+        * svg/SVGFontFaceNameElement.h: Ditto.
+        * svg/SVGFontFaceNameElement.idl: Ditto.
+        * svg/SVGFontFaceSrcElement.cpp: Ditto.
+        * svg/SVGFontFaceSrcElement.h: Ditto.
+        * svg/SVGFontFaceSrcElement.idl: Ditto.
+        * svg/SVGFontFaceUriElement.cpp: Ditto.
+        * svg/SVGFontFaceUriElement.h: Ditto.
+        * svg/SVGFontFaceUriElement.idl: Ditto.
+        * svg/SVGDefinitionSrcElement.cpp: Ditto.
+        * svg/SVGDefinitionSrcElement.h: Ditto.
+        * svg/SVGDefinitionSrcElement.idl: Ditto.
+        * svg/SVGGlyphElement.cpp: Added.
+        (WebCore::SVGGlyphElement::SVGGlyphElement):
+        (WebCore::SVGGlyphElement::parseMappedAttribute):
+        (WebCore::SVGGlyphElement::childrenChanged):
+        * svg/SVGGlyphElement.h: Added.
+        (WebCore::SVGGlyphElement::rendererIsNeeded):
+        (WebCore::SVGGlyphIdentifier::): Structure holding all data to represent a SVG glyph (origin, advance, orientation etc..)
+        (WebCore::SVGGlyphIdentifier::SVGGlyphIdentifier):
+        * svg/SVGGlyphElement.idl: Added.
+        * svg/SVGMissingGlyphElement.cpp: Added. (stub implementation)
+        (WebCore::SVGMissingGlyphElement::SVGMissingGlyphElement):
+        (WebCore::SVGMissingGlyphElement::parseMappedAttribute):
+        (WebCore::SVGMissingGlyphElement::childrenChanged):
+        * svg/SVGMissingGlyphElement.h: Added.
+        (WebCore::SVGMissingGlyphElement::rendererIsNeeded):
+        * svg/SVGMissingGlyphElement.idl: Added.
+        * svg/svgtags.in: Wrap all SVGFont* elements in ENABLE(SVG_FONTS) block - to assure --no-svg-fonts compilation works (which is the default for now!).
+
 2007-12-27  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Alexey Proskuryakov.
index 74bb413..76105ef 100644 (file)
@@ -203,6 +203,7 @@ all : \
     DOMSVGFESpotLightElement.h \
     DOMSVGFETileElement.h \
     DOMSVGFETurbulenceElement.h \
+    DOMSVGFontElement.h \
     DOMSVGFontFaceElement.h \
     DOMSVGFontFaceFormatElement.h \
     DOMSVGFontFaceNameElement.h \
@@ -213,6 +214,7 @@ all : \
     DOMSVGFitToViewBox.h \
     DOMSVGForeignObjectElement.h \
     DOMSVGGElement.h \
+    DOMSVGGlyphElement.h \
     DOMSVGGradientElement.h \
     DOMSVGImageElement.h \
     DOMSVGLangSpace.h \
@@ -225,6 +227,7 @@ all : \
     DOMSVGMaskElement.h \
     DOMSVGMatrix.h \
     DOMSVGMetadataElement.h \
+    DOMSVGMissingGlyphElement.h \
     DOMSVGNumber.h \
     DOMSVGNumberList.h \
     DOMSVGPaint.h \
@@ -543,6 +546,7 @@ all : \
     JSSVGFETileElement.h \
     JSSVGFETurbulenceElement.h \
     JSSVGFilterElement.h \
+    JSSVGFontElement.h \
     JSSVGFontFaceElement.h \
     JSSVGFontFaceFormatElement.h \
     JSSVGFontFaceNameElement.h \
@@ -550,6 +554,7 @@ all : \
     JSSVGFontFaceUriElement.h \
     JSSVGForeignObjectElement.h \
     JSSVGGElement.h \
+    JSSVGGlyphElement.h \
     JSSVGGradientElement.h \
     JSSVGImageElement.h \
     JSSVGLength.h \
@@ -558,6 +563,7 @@ all : \
     JSSVGLinearGradientElement.h \
     JSSVGMaskElement.h \
     JSSVGMarkerElement.h \
+    JSSVGMissingGlyphElement.h \
     JSSVGTransform.h \
     JSSVGZoomEvent.h \
     JSScreen.h \
index 2f88abc..4cde788 100644 (file)
@@ -1236,6 +1236,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGFETileElement.idl \
         svg/SVGFETurbulenceElement.idl \
         svg/SVGFilterElement.idl \
+        svg/SVGFontElement.idl \
         svg/SVGFontFaceElement.idl \
         svg/SVGFontFaceFormatElement.idl \
         svg/SVGFontFaceNameElement.idl \
@@ -1243,6 +1244,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGFontFaceUriElement.idl \
         svg/SVGForeignObjectElement.idl \
         svg/SVGGElement.idl \
+        svg/SVGGlyphElement.idl \
         svg/SVGGradientElement.idl \
         svg/SVGImageElement.idl \
         svg/SVGLength.idl \
@@ -1253,6 +1255,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGMaskElement.idl \
         svg/SVGMatrix.idl \
         svg/SVGMetadataElement.idl \
+        svg/SVGMissingGlyphElement.idl \
         svg/SVGNumber.idl \
         svg/SVGNumberList.idl \
         svg/SVGPaint.idl \
@@ -1320,6 +1323,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         css/SVGCSSComputedStyleDeclaration.cpp \
         css/SVGCSSParser.cpp \
         css/SVGCSSStyleSelector.cpp \
+        css/SVGCSSFontFace.cpp \
         rendering/SVGRenderStyle.cpp \
         rendering/SVGRenderStyleDefs.cpp \
         bindings/js/JSSVGLazyEventListener.cpp \
@@ -1379,6 +1383,8 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGFilterElement.cpp \
         svg/SVGFilterPrimitiveStandardAttributes.cpp \
         svg/SVGFitToViewBox.cpp \
+        svg/SVGFont.cpp \
+        svg/SVGFontElement.cpp \
         svg/SVGFontFaceElement.cpp \
         svg/SVGFontFaceFormatElement.cpp \
         svg/SVGFontFaceNameElement.cpp \
@@ -1386,6 +1392,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGFontFaceUriElement.cpp \
         svg/SVGForeignObjectElement.cpp \
         svg/SVGGElement.cpp \
+        svg/SVGGlyphElement.cpp \
         svg/SVGGradientElement.cpp \
         svg/SVGImageElement.cpp \
         svg/SVGLangSpace.cpp \
@@ -1397,6 +1404,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGMarkerElement.cpp \
         svg/SVGMaskElement.cpp \
         svg/SVGMetadataElement.cpp \
+        svg/SVGMissingGlyphElement.cpp \
         svg/SVGMPathElement.cpp \
         svg/SVGNumberList.cpp \
         svg/SVGPaint.cpp \
index f0a4792..fe36e66 100644 (file)
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGGlyphElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGGlyphElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMissingGlyphElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMissingGlyphElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceElement.cpp"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\css\SVGCSSFontFace.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\css\SVGCSSParser.cpp"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\svg\SVGFont.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\svg\SVGFont.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\svg\SVGFontElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\svg\SVGFontElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\svg\SVGFontFaceElement.cpp"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\svg\SVGGlyphElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\svg\SVGGlyphElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\svg\SVGGradientElement.cpp"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\svg\SVGMissingGlyphElement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\svg\SVGMissingGlyphElement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\svg\SVGMPathElement.cpp"\r
                                >\r
                        </File>\r
index e1439a9..8fe6aec 100644 (file)
                B25BE5100D06B70800B524C6 /* JSEventTargetBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B25BE50E0D06B70800B524C6 /* JSEventTargetBase.cpp */; };
                B25BE5110D06B70800B524C6 /* JSEventTargetBase.h in Headers */ = {isa = PBXBuildFile; fileRef = B25BE50F0D06B70800B524C6 /* JSEventTargetBase.h */; };
                B25DFAAF0B2E2929000E6510 /* JSSVGMatrixCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */; };
+               B262B8040D1F32D000158F09 /* SVGFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B262B8030D1F32D000158F09 /* SVGFont.cpp */; };
                B26554EA0B80D74900A50EC3 /* RenderSVGTextPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B26554E80B80D74900A50EC3 /* RenderSVGTextPath.cpp */; };
                B26554EB0B80D74900A50EC3 /* RenderSVGTextPath.h in Headers */ = {isa = PBXBuildFile; fileRef = B26554E90B80D74900A50EC3 /* RenderSVGTextPath.h */; };
                B266CD4D0C3AEC6500EB08D2 /* JSSVGException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */; };
                B27535820B053814002CE64F /* Pen.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535550B053814002CE64F /* Pen.h */; };
                B275358E0B053A66002CE64F /* IconMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B275358D0B053A66002CE64F /* IconMac.mm */; };
                B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */; };
+               B27B28250CEF0C0700D39D54 /* JSSVGFontElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27B281F0CEF0C0700D39D54 /* JSSVGFontElement.cpp */; };
+               B27B28260CEF0C0700D39D54 /* JSSVGFontElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28200CEF0C0700D39D54 /* JSSVGFontElement.h */; };
+               B27B28270CEF0C0700D39D54 /* JSSVGGlyphElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27B28210CEF0C0700D39D54 /* JSSVGGlyphElement.cpp */; };
+               B27B28280CEF0C0700D39D54 /* JSSVGGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28220CEF0C0700D39D54 /* JSSVGGlyphElement.h */; };
+               B27B28290CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27B28230CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp */; };
+               B27B282A0CEF0C0700D39D54 /* JSSVGMissingGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28240CEF0C0700D39D54 /* JSSVGMissingGlyphElement.h */; };
+               B27B28360CEF0C3600D39D54 /* CSSPropertyNames.in in Resources */ = {isa = PBXBuildFile; fileRef = B27B282B0CEF0C3500D39D54 /* CSSPropertyNames.in */; };
+               B27B28370CEF0C3600D39D54 /* CSSValueKeywords.in in Resources */ = {isa = PBXBuildFile; fileRef = B27B282C0CEF0C3500D39D54 /* CSSValueKeywords.in */; };
+               B27B28380CEF0C3600D39D54 /* DOMSVGFontElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B282D0CEF0C3500D39D54 /* DOMSVGFontElement.h */; settings = {ATTRIBUTES = (); }; };
+               B27B28390CEF0C3600D39D54 /* DOMSVGFontElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = B27B282E0CEF0C3500D39D54 /* DOMSVGFontElement.mm */; };
+               B27B283A0CEF0C3600D39D54 /* DOMSVGFontElementInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B282F0CEF0C3500D39D54 /* DOMSVGFontElementInternal.h */; };
+               B27B283B0CEF0C3600D39D54 /* DOMSVGGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28300CEF0C3500D39D54 /* DOMSVGGlyphElement.h */; settings = {ATTRIBUTES = (); }; };
+               B27B283C0CEF0C3600D39D54 /* DOMSVGGlyphElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = B27B28310CEF0C3500D39D54 /* DOMSVGGlyphElement.mm */; };
+               B27B283D0CEF0C3600D39D54 /* DOMSVGGlyphElementInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28320CEF0C3500D39D54 /* DOMSVGGlyphElementInternal.h */; };
+               B27B283E0CEF0C3600D39D54 /* DOMSVGMissingGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28330CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.h */; settings = {ATTRIBUTES = (); }; };
+               B27B283F0CEF0C3600D39D54 /* DOMSVGMissingGlyphElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = B27B28340CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.mm */; };
+               B27B28400CEF0C3600D39D54 /* DOMSVGMissingGlyphElementInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B27B28350CEF0C3500D39D54 /* DOMSVGMissingGlyphElementInternal.h */; };
+               B27B285C0CEF0D7200D39D54 /* DOMSVGFontElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = B27B282D0CEF0C3500D39D54 /* DOMSVGFontElement.h */; };
+               B27B285D0CEF0D7200D39D54 /* DOMSVGGlyphElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = B27B28300CEF0C3500D39D54 /* DOMSVGGlyphElement.h */; };
+               B27B285E0CEF0D7200D39D54 /* DOMSVGMissingGlyphElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = B27B28330CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.h */; };
                B28BC31A0D135E5400CDBA27 /* JSEventTargetBase.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = B28BC3190D135E5400CDBA27 /* JSEventTargetBase.lut.h */; };
                B28C6A270D00C44800334AA4 /* SVGDocumentExtensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B28C6A1E0D00C44800334AA4 /* SVGDocumentExtensions.cpp */; };
                B28C6A280D00C44800334AA4 /* SVGDocumentExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = B28C6A1F0D00C44800334AA4 /* SVGDocumentExtensions.h */; };
                B2A015AB0AF6CD53006BCE0E /* GraphicsTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A015950AF6CD53006BCE0E /* GraphicsTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2A10B920B3818BD00099AA4 /* ImageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A10B910B3818BD00099AA4 /* ImageBuffer.h */; };
                B2A10B940B3818D700099AA4 /* ImageBufferCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A10B930B3818D700099AA4 /* ImageBufferCG.cpp */; };
+               B2A1F2AA0CEF0ABF00442F6A /* SVGFontElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A1F2A10CEF0ABF00442F6A /* SVGFontElement.cpp */; };
+               B2A1F2AB0CEF0ABF00442F6A /* SVGFontElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A1F2A20CEF0ABF00442F6A /* SVGFontElement.h */; };
+               B2A1F2AC0CEF0ABF00442F6A /* SVGFontElement.idl in Resources */ = {isa = PBXBuildFile; fileRef = B2A1F2A30CEF0ABF00442F6A /* SVGFontElement.idl */; };
+               B2A1F2AD0CEF0ABF00442F6A /* SVGGlyphElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A1F2A40CEF0ABF00442F6A /* SVGGlyphElement.cpp */; };
+               B2A1F2AE0CEF0ABF00442F6A /* SVGGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A1F2A50CEF0ABF00442F6A /* SVGGlyphElement.h */; };
+               B2A1F2AF0CEF0ABF00442F6A /* SVGGlyphElement.idl in Resources */ = {isa = PBXBuildFile; fileRef = B2A1F2A60CEF0ABF00442F6A /* SVGGlyphElement.idl */; };
+               B2A1F2B00CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A1F2A70CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp */; };
+               B2A1F2B10CEF0ABF00442F6A /* SVGMissingGlyphElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A1F2A80CEF0ABF00442F6A /* SVGMissingGlyphElement.h */; };
+               B2A1F2B20CEF0ABF00442F6A /* SVGMissingGlyphElement.idl in Resources */ = {isa = PBXBuildFile; fileRef = B2A1F2A90CEF0ABF00442F6A /* SVGMissingGlyphElement.idl */; };
                B2AE9B9D0C3AF27400F23F7F /* DOMSVGTextPathElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2AE9B9C0C3AF27400F23F7F /* DOMSVGTextPathElement.mm */; };
                B2AFFC7C0D00A5C10030074D /* FontCacheMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2AFFC740D00A5C10030074D /* FontCacheMac.mm */; };
                B2AFFC7D0D00A5C10030074D /* FontCustomPlatformData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2AFFC750D00A5C10030074D /* FontCustomPlatformData.cpp */; };
                B2CB92640B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2CB92600B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm */; };
                B2CCEC470C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2CCEC450C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp */; };
                B2CCEC480C6CA9F1006A5424 /* RenderSVGViewportContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CCEC460C6CA9F1006A5424 /* RenderSVGViewportContainer.h */; };
+               B2D19A480CEF9DC1000E033B /* SVGCSSFontFace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2D19A460CEF9DC1000E033B /* SVGCSSFontFace.cpp */; };
+               B2D19A490CEF9DC1000E033B /* SVGCSSFontFace.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D19A470CEF9DC1000E033B /* SVGCSSFontFace.h */; };
                B2D3FC8A0C2212CB00CF3618 /* JSSVGTransformListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2D3FC890C2212CB00CF3618 /* JSSVGTransformListCustom.cpp */; };
                B2E27C9F0B0F2B0900F17C7B /* FloatPoint3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2E27C9D0B0F2B0900F17C7B /* FloatPoint3D.cpp */; };
                B2E27CA00B0F2B0900F17C7B /* FloatPoint3D.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E27C9E0B0F2B0900F17C7B /* FloatPoint3D.h */; };
                        dstPath = Versions/A/PrivateHeaders;
                        dstSubfolderSpec = 1;
                        files = (
+                               B27B285C0CEF0D7200D39D54 /* DOMSVGFontElement.h in Copy Generated Headers */,
+                               B27B285D0CEF0D7200D39D54 /* DOMSVGGlyphElement.h in Copy Generated Headers */,
+                               B27B285E0CEF0D7200D39D54 /* DOMSVGMissingGlyphElement.h in Copy Generated Headers */,
                                8538F0300AD71CDB006A81D1 /* DOMAbstractView.h in Copy Generated Headers */,
                                1C11CCBC0AA6093700DADB20 /* DOMAttr.h in Copy Generated Headers */,
                                1C11CCC70AA6093700DADB20 /* DOMCDATASection.h in Copy Generated Headers */,
                B25BE50E0D06B70800B524C6 /* JSEventTargetBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSEventTargetBase.cpp; sourceTree = "<group>"; };
                B25BE50F0D06B70800B524C6 /* JSEventTargetBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSEventTargetBase.h; sourceTree = "<group>"; };
                B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGMatrixCustom.cpp; sourceTree = "<group>"; };
+               B262B8030D1F32D000158F09 /* SVGFont.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFont.cpp; sourceTree = "<group>"; };
                B26554E80B80D74900A50EC3 /* RenderSVGTextPath.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGTextPath.cpp; sourceTree = "<group>"; };
                B26554E90B80D74900A50EC3 /* RenderSVGTextPath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGTextPath.h; sourceTree = "<group>"; };
                B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGException.cpp; sourceTree = "<group>"; };
                B27535550B053814002CE64F /* Pen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Pen.h; sourceTree = "<group>"; };
                B275358D0B053A66002CE64F /* IconMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = IconMac.mm; sourceTree = "<group>"; };
                B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsContextMac.mm; sourceTree = "<group>"; };
+               B27B281F0CEF0C0700D39D54 /* JSSVGFontElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGFontElement.cpp; sourceTree = "<group>"; };
+               B27B28200CEF0C0700D39D54 /* JSSVGFontElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGFontElement.h; sourceTree = "<group>"; };
+               B27B28210CEF0C0700D39D54 /* JSSVGGlyphElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGGlyphElement.cpp; sourceTree = "<group>"; };
+               B27B28220CEF0C0700D39D54 /* JSSVGGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGGlyphElement.h; sourceTree = "<group>"; };
+               B27B28230CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGMissingGlyphElement.cpp; sourceTree = "<group>"; };
+               B27B28240CEF0C0700D39D54 /* JSSVGMissingGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGMissingGlyphElement.h; sourceTree = "<group>"; };
+               B27B282B0CEF0C3500D39D54 /* CSSPropertyNames.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = CSSPropertyNames.in; sourceTree = "<group>"; };
+               B27B282C0CEF0C3500D39D54 /* CSSValueKeywords.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = CSSValueKeywords.in; sourceTree = "<group>"; };
+               B27B282D0CEF0C3500D39D54 /* DOMSVGFontElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGFontElement.h; sourceTree = "<group>"; };
+               B27B282E0CEF0C3500D39D54 /* DOMSVGFontElement.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGFontElement.mm; sourceTree = "<group>"; };
+               B27B282F0CEF0C3500D39D54 /* DOMSVGFontElementInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGFontElementInternal.h; sourceTree = "<group>"; };
+               B27B28300CEF0C3500D39D54 /* DOMSVGGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGGlyphElement.h; sourceTree = "<group>"; };
+               B27B28310CEF0C3500D39D54 /* DOMSVGGlyphElement.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGGlyphElement.mm; sourceTree = "<group>"; };
+               B27B28320CEF0C3500D39D54 /* DOMSVGGlyphElementInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGGlyphElementInternal.h; sourceTree = "<group>"; };
+               B27B28330CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGMissingGlyphElement.h; sourceTree = "<group>"; };
+               B27B28340CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGMissingGlyphElement.mm; sourceTree = "<group>"; };
+               B27B28350CEF0C3500D39D54 /* DOMSVGMissingGlyphElementInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGMissingGlyphElementInternal.h; sourceTree = "<group>"; };
                B28BC3190D135E5400CDBA27 /* JSEventTargetBase.lut.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSEventTargetBase.lut.h; sourceTree = "<group>"; };
                B28C6A1E0D00C44800334AA4 /* SVGDocumentExtensions.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGDocumentExtensions.cpp; sourceTree = "<group>"; };
                B28C6A1F0D00C44800334AA4 /* SVGDocumentExtensions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGDocumentExtensions.h; sourceTree = "<group>"; };
                B2A015950AF6CD53006BCE0E /* GraphicsTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GraphicsTypes.h; sourceTree = "<group>"; };
                B2A10B910B3818BD00099AA4 /* ImageBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageBuffer.h; sourceTree = "<group>"; };
                B2A10B930B3818D700099AA4 /* ImageBufferCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferCG.cpp; sourceTree = "<group>"; };
+               B2A1F2A10CEF0ABF00442F6A /* SVGFontElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFontElement.cpp; sourceTree = "<group>"; };
+               B2A1F2A20CEF0ABF00442F6A /* SVGFontElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGFontElement.h; sourceTree = "<group>"; };
+               B2A1F2A30CEF0ABF00442F6A /* SVGFontElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGFontElement.idl; sourceTree = "<group>"; };
+               B2A1F2A40CEF0ABF00442F6A /* SVGGlyphElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGGlyphElement.cpp; sourceTree = "<group>"; };
+               B2A1F2A50CEF0ABF00442F6A /* SVGGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGGlyphElement.h; sourceTree = "<group>"; };
+               B2A1F2A60CEF0ABF00442F6A /* SVGGlyphElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGGlyphElement.idl; sourceTree = "<group>"; };
+               B2A1F2A70CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGMissingGlyphElement.cpp; sourceTree = "<group>"; };
+               B2A1F2A80CEF0ABF00442F6A /* SVGMissingGlyphElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGMissingGlyphElement.h; sourceTree = "<group>"; };
+               B2A1F2A90CEF0ABF00442F6A /* SVGMissingGlyphElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGMissingGlyphElement.idl; sourceTree = "<group>"; };
                B2AE9B9C0C3AF27400F23F7F /* DOMSVGTextPathElement.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGTextPathElement.mm; sourceTree = "<group>"; };
                B2AFFC740D00A5C10030074D /* FontCacheMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = FontCacheMac.mm; sourceTree = "<group>"; };
                B2AFFC750D00A5C10030074D /* FontCustomPlatformData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FontCustomPlatformData.cpp; sourceTree = "<group>"; };
                B2CB92600B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGElementInstanceList.mm; sourceTree = "<group>"; };
                B2CCEC450C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGViewportContainer.cpp; sourceTree = "<group>"; };
                B2CCEC460C6CA9F1006A5424 /* RenderSVGViewportContainer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGViewportContainer.h; sourceTree = "<group>"; };
+               B2D19A460CEF9DC1000E033B /* SVGCSSFontFace.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGCSSFontFace.cpp; sourceTree = "<group>"; };
+               B2D19A470CEF9DC1000E033B /* SVGCSSFontFace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGCSSFontFace.h; sourceTree = "<group>"; };
                B2D3FC890C2212CB00CF3618 /* JSSVGTransformListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGTransformListCustom.cpp; sourceTree = "<group>"; };
                B2E27C9D0B0F2B0900F17C7B /* FloatPoint3D.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FloatPoint3D.cpp; sourceTree = "<group>"; };
                B2E27C9E0B0F2B0900F17C7B /* FloatPoint3D.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FloatPoint3D.h; sourceTree = "<group>"; };
                85A0F98E0AC716F400161FDC /* SVG */ = {
                        isa = PBXGroup;
                        children = (
+                               B27B282D0CEF0C3500D39D54 /* DOMSVGFontElement.h */,
+                               B27B282E0CEF0C3500D39D54 /* DOMSVGFontElement.mm */,
+                               B27B282F0CEF0C3500D39D54 /* DOMSVGFontElementInternal.h */,
+                               B27B28300CEF0C3500D39D54 /* DOMSVGGlyphElement.h */,
+                               B27B28310CEF0C3500D39D54 /* DOMSVGGlyphElement.mm */,
+                               B27B28320CEF0C3500D39D54 /* DOMSVGGlyphElementInternal.h */,
+                               B27B28330CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.h */,
+                               B27B28340CEF0C3500D39D54 /* DOMSVGMissingGlyphElement.mm */,
+                               B27B28350CEF0C3500D39D54 /* DOMSVGMissingGlyphElementInternal.h */,
                                85ACEF740ACDCFCE001214FF /* DOMSVGAElement.h */,
                                85ACEF750ACDCFCE001214FF /* DOMSVGAElement.mm */,
                                A8E544150CA9D1C10097D09B /* DOMSVGAElementInternal.h */,
                85B232260A8BF3A100FDF47B /* Derived Sources */ = {
                        isa = PBXGroup;
                        children = (
+                               B27B282B0CEF0C3500D39D54 /* CSSPropertyNames.in */,
+                               B27B282C0CEF0C3500D39D54 /* CSSValueKeywords.in */,
                                85967D9F0AA8BB59005FEDEE /* Core */,
                                85967DCA0AA8BF0F005FEDEE /* CSS */,
                                85AFA7AB0AAF3BB000E84305 /* Events */,
                                B2FA3C990AB75A6E000E5AC4 /* JSSVGFEFuncRElement.h */,
                                B2FA3C9A0AB75A6E000E5AC4 /* JSSVGFEGaussianBlurElement.cpp */,
                                B2FA3C9B0AB75A6E000E5AC4 /* JSSVGFEGaussianBlurElement.h */,
+                               B27B281F0CEF0C0700D39D54 /* JSSVGFontElement.cpp */,
+                               B27B28200CEF0C0700D39D54 /* JSSVGFontElement.h */,
+                               B27B28210CEF0C0700D39D54 /* JSSVGGlyphElement.cpp */,
+                               B27B28220CEF0C0700D39D54 /* JSSVGGlyphElement.h */,
+                               B27B28230CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp */,
+                               B27B28240CEF0C0700D39D54 /* JSSVGMissingGlyphElement.h */,
                                B2FA3C9C0AB75A6E000E5AC4 /* JSSVGFEImageElement.cpp */,
                                B2FA3C9D0AB75A6E000E5AC4 /* JSSVGFEImageElement.h */,
                                B2FA3C9E0AB75A6E000E5AC4 /* JSSVGFEMergeElement.cpp */,
                B22277CA0D00BF1E0071B782 /* svg */ = {
                        isa = PBXGroup;
                        children = (
+                               B262B8030D1F32D000158F09 /* SVGFont.cpp */,
                                B25598860D00D8B800BB825C /* graphics */,
+                               B2A1F2A10CEF0ABF00442F6A /* SVGFontElement.cpp */,
+                               B2A1F2A20CEF0ABF00442F6A /* SVGFontElement.h */,
+                               B2A1F2A30CEF0ABF00442F6A /* SVGFontElement.idl */,
+                               B2A1F2A40CEF0ABF00442F6A /* SVGGlyphElement.cpp */,
+                               B2A1F2A50CEF0ABF00442F6A /* SVGGlyphElement.h */,
+                               B2A1F2A60CEF0ABF00442F6A /* SVGGlyphElement.idl */,
+                               B2A1F2A70CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp */,
+                               B2A1F2A80CEF0ABF00442F6A /* SVGMissingGlyphElement.h */,
+                               B2A1F2A90CEF0ABF00442F6A /* SVGMissingGlyphElement.idl */,
                                B22277CB0D00BF1F0071B782 /* ColorDistance.cpp */,
                                B22277CC0D00BF1F0071B782 /* ColorDistance.h */,
                                B22277CD0D00BF1F0071B782 /* GradientAttributes.h */,
                                93CA4CA209DF93FA00DF8677 /* svg.css */,
                                B2227B000D00BFF10071B782 /* SVGCSSComputedStyleDeclaration.cpp */,
                                B2227B010D00BFF10071B782 /* SVGCSSParser.cpp */,
+                               B2D19A460CEF9DC1000E033B /* SVGCSSFontFace.cpp */,
+                               B2D19A470CEF9DC1000E033B /* SVGCSSFontFace.h */,
                                B2227B020D00BFF10071B782 /* SVGCSSPropertyNames.in */,
                                B2227B030D00BFF10071B782 /* SVGCSSStyleSelector.cpp */,
                                B2227B040D00BFF10071B782 /* SVGCSSValueKeywords.in */,
                                BCB16C2D0979C3BD00467741 /* loader.h in Headers */,
                                93309DF8099E64920056E581 /* markup.h in Headers */,
                                93309E1E099E64920056E581 /* visible_units.h in Headers */,
+                               B2A1F2AB0CEF0ABF00442F6A /* SVGFontElement.h in Headers */,
+                               B2A1F2AE0CEF0ABF00442F6A /* SVGGlyphElement.h in Headers */,
+                               B2A1F2B10CEF0ABF00442F6A /* SVGMissingGlyphElement.h in Headers */,
+                               B27B28260CEF0C0700D39D54 /* JSSVGFontElement.h in Headers */,
+                               B27B28280CEF0C0700D39D54 /* JSSVGGlyphElement.h in Headers */,
+                               B27B282A0CEF0C0700D39D54 /* JSSVGMissingGlyphElement.h in Headers */,
+                               B27B28380CEF0C3600D39D54 /* DOMSVGFontElement.h in Headers */,
+                               B27B283A0CEF0C3600D39D54 /* DOMSVGFontElementInternal.h in Headers */,
+                               B27B283B0CEF0C3600D39D54 /* DOMSVGGlyphElement.h in Headers */,
+                               B27B283D0CEF0C3600D39D54 /* DOMSVGGlyphElementInternal.h in Headers */,
+                               B27B283E0CEF0C3600D39D54 /* DOMSVGMissingGlyphElement.h in Headers */,
+                               B27B28400CEF0C3600D39D54 /* DOMSVGMissingGlyphElementInternal.h in Headers */,
+                               B2D19A490CEF9DC1000E033B /* SVGCSSFontFace.h in Headers */,
                                BCA379150D163E5500B793D6 /* JSLocation.h in Headers */,
                                BCA3793F0D1647E000B793D6 /* JSLocation.lut.h in Headers */,
                                BC7FA6210D1F0CBD00DB22A9 /* DynamicNodeList.h in Headers */,
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
-                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
                                B28C6A2F0D00C44800334AA4 /* xlinkattrs.in in Resources */,
                                1AB1AE7A0C051FDE00139F4F /* zoomInCursor.png in Resources */,
                                1AB1AE7B0C051FDE00139F4F /* zoomOutCursor.png in Resources */,
+                               B2A1F2AC0CEF0ABF00442F6A /* SVGFontElement.idl in Resources */,
+                               B2A1F2AF0CEF0ABF00442F6A /* SVGGlyphElement.idl in Resources */,
+                               B2A1F2B20CEF0ABF00442F6A /* SVGMissingGlyphElement.idl in Resources */,
+                               B27B28360CEF0C3600D39D54 /* CSSPropertyNames.in in Resources */,
+                               B27B28370CEF0C3600D39D54 /* CSSValueKeywords.in in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                93309DF7099E64920056E581 /* markup.cpp in Sources */,
                                93309E1D099E64920056E581 /* visible_units.cpp in Sources */,
                                BCA379140D163E5500B793D6 /* JSLocation.cpp in Sources */,
+                               B2A1F2AA0CEF0ABF00442F6A /* SVGFontElement.cpp in Sources */,
+                               B2A1F2AD0CEF0ABF00442F6A /* SVGGlyphElement.cpp in Sources */,
+                               B2A1F2B00CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp in Sources */,
+                               B27B28250CEF0C0700D39D54 /* JSSVGFontElement.cpp in Sources */,
+                               B27B28270CEF0C0700D39D54 /* JSSVGGlyphElement.cpp in Sources */,
+                               B27B28290CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp in Sources */,
+                               B27B28390CEF0C3600D39D54 /* DOMSVGFontElement.mm in Sources */,
+                               B27B283C0CEF0C3600D39D54 /* DOMSVGGlyphElement.mm in Sources */,
+                               B27B283F0CEF0C3600D39D54 /* DOMSVGMissingGlyphElement.mm in Sources */,
+                               B2D19A480CEF9DC1000E033B /* SVGCSSFontFace.cpp in Sources */,
+                               B262B8040D1F32D000158F09 /* SVGFont.cpp in Sources */,
                                BC7FA6200D1F0CBD00DB22A9 /* DynamicNodeList.cpp in Sources */,
                                BC7FA62E0D1F0EFF00DB22A9 /* StaticNodeList.cpp in Sources */,
                                BC7FA6820D1F167900DB22A9 /* SelectorNodeList.cpp in Sources */,
index c736f7a..9f4bd98 100644 (file)
 #include "JSSVGFETurbulenceElement.h"
 #include "JSSVGFilterElement.h"
 #include "JSSVGForeignObjectElement.h"
+#include "JSSVGFontElement.h"
 #include "JSSVGFontFaceElement.h"
 #include "JSSVGFontFaceFormatElement.h"
 #include "JSSVGFontFaceNameElement.h"
 #include "JSSVGFontFaceSrcElement.h"
 #include "JSSVGFontFaceUriElement.h"
 #include "JSSVGGElement.h"
+#include "JSSVGGlyphElement.h"
 #include "JSSVGImageElement.h"
 #include "JSSVGLinearGradientElement.h"
 #include "JSSVGLineElement.h"
 #include "JSSVGMarkerElement.h"
 #include "JSSVGMaskElement.h"
 #include "JSSVGMetadataElement.h"
+#include "JSSVGMissingGlyphElement.h"
 #include "JSSVGPathElement.h"
 #include "JSSVGPatternElement.h"
 #include "JSSVGPolygonElement.h"
 #include "SVGFETurbulenceElement.h"
 #include "SVGFilterElement.h"
 #include "SVGForeignObjectElement.h"
+#include "SVGFontElement.h"
 #include "SVGFontFaceElement.h"
 #include "SVGFontFaceFormatElement.h"
 #include "SVGFontFaceNameElement.h"
 #include "SVGFontFaceSrcElement.h"
 #include "SVGFontFaceUriElement.h"
 #include "SVGGElement.h"
+#include "SVGGlyphElement.h"
 #include "SVGImageElement.h"
 #include "SVGLinearGradientElement.h"
 #include "SVGLineElement.h"
 #include "SVGMarkerElement.h"
 #include "SVGMaskElement.h"
 #include "SVGMetadataElement.h"
+#include "SVGMissingGlyphElement.h"
 #include "SVGPathElement.h"
 #include "SVGPatternElement.h"
 #include "SVGPolygonElement.h"
@@ -185,11 +191,14 @@ typedef JSNode* (*CreateSVGElementWrapperFunction)(ExecState*, PassRefPtr<SVGEle
 #if ENABLE(SVG_FONTS)
 #define FOR_EACH_FONT_TAG(macro) \
     macro(definition_src, DefinitionSrc) \
+    macro(font, Font) \
     macro(font_face, FontFace) \
     macro(font_face_format, FontFaceFormat) \
     macro(font_face_name, FontFaceName) \
     macro(font_face_src, FontFaceSrc) \
     macro(font_face_uri, FontFaceUri) \
+    macro(glyph, Glyph) \
+    macro(missing_glyph, MissingGlyph)
     // end of macro
     
 #else
index e5da743..48a7bfd 100644 (file)
@@ -228,11 +228,13 @@ static void createElementClassMap()
     addElementClass(SVGNames::filterTag, [DOMSVGFilterElement class]);
 #endif
 #if ENABLE(SVG_FONTS)
+    addElementClass(SVGNames::fontTag, [DOMSVGFontElement class]);
     addElementClass(SVGNames::font_faceTag, [DOMSVGFontFaceElement class]);
     addElementClass(SVGNames::font_face_formatTag, [DOMSVGFontFaceFormatElement class]);
     addElementClass(SVGNames::font_face_nameTag, [DOMSVGFontFaceNameElement class]);
     addElementClass(SVGNames::font_face_srcTag, [DOMSVGFontFaceSrcElement class]);
     addElementClass(SVGNames::font_face_uriTag, [DOMSVGFontFaceUriElement class]);
+    addElementClass(SVGNames::glyphTag, [DOMSVGGlyphElement class]);
 #endif
     addElementClass(SVGNames::gTag, [DOMSVGGElement class]);
     addElementClass(SVGNames::imageTag, [DOMSVGImageElement class]);
@@ -241,6 +243,9 @@ static void createElementClassMap()
     addElementClass(SVGNames::markerTag, [DOMSVGMarkerElement class]);
     addElementClass(SVGNames::maskTag, [DOMSVGMaskElement class]);
     addElementClass(SVGNames::metadataTag, [DOMSVGMetadataElement class]);
+#if ENABLE(SVG_FONTS)
+    addElementClass(SVGNames::missing_glyphTag, [DOMSVGMissingGlyphElement class]);
+#endif
     addElementClass(SVGNames::pathTag, [DOMSVGPathElement class]);
     addElementClass(SVGNames::patternTag, [DOMSVGPatternElement class]);
     addElementClass(SVGNames::polygonTag, [DOMSVGPolygonElement class]);
index 614d20e..5bd8c77 100644 (file)
 #import "DOMSVGComponentTransferFunctionElementInternal.h"
 #import "DOMSVGCursorElementInternal.h"
 #import "DOMSVGDefsElementInternal.h"
+#import "DOMSVGDefinitionSrcElementInternal.h"
 #import "DOMSVGDescElementInternal.h"
 #import "DOMSVGDocumentInternal.h"
 #import "DOMSVGElementInternal.h"
 #import "DOMSVGFETileElementInternal.h"
 #import "DOMSVGFETurbulenceElementInternal.h"
 #import "DOMSVGFilterElementInternal.h"
+#import "DOMSVGFontElementInternal.h"
+#import "DOMSVGFontFaceElementInternal.h"
+#import "DOMSVGFontFaceFormatElementInternal.h"
+#import "DOMSVGFontFaceNameElementInternal.h"
+#import "DOMSVGFontFaceSrcElementInternal.h"
+#import "DOMSVGFontFaceUriElementInternal.h"
 #import "DOMSVGForeignObjectElementInternal.h"
 #import "DOMSVGGElementInternal.h"
+#import "DOMSVGGlyphElementInternal.h"
 #import "DOMSVGGradientElementInternal.h"
 #import "DOMSVGImageElementInternal.h"
 #import "DOMSVGLengthInternal.h"
 #import "DOMSVGMaskElementInternal.h"
 #import "DOMSVGMatrixInternal.h"
 #import "DOMSVGMetadataElementInternal.h"
+#import "DOMSVGMissingGlyphElementInternal.h"
 #import "DOMSVGNumberInternal.h"
 #import "DOMSVGNumberListInternal.h"
 #import "DOMSVGPaintInternal.h"
index e84ee14..8a7388f 100644 (file)
@@ -84,6 +84,7 @@
 #import <WebCore/DOMSVGFilterElement.h>
 #import <WebCore/DOMSVGFilterPrimitiveStandardAttributes.h>
 #import <WebCore/DOMSVGFitToViewBox.h>
+#import <WebCore/DOMSVGFontElement.h>
 #import <WebCore/DOMSVGFontFaceElement.h>
 #import <WebCore/DOMSVGFontFaceFormatElement.h>
 #import <WebCore/DOMSVGFontFaceNameElement.h>
@@ -91,6 +92,7 @@
 #import <WebCore/DOMSVGFontFaceUriElement.h>
 #import <WebCore/DOMSVGForeignObjectElement.h>
 #import <WebCore/DOMSVGGElement.h>
+#import <WebCore/DOMSVGGlyphElement.h>
 #import <WebCore/DOMSVGGradientElement.h>
 #import <WebCore/DOMSVGImageElement.h>
 #import <WebCore/DOMSVGLangSpace.h>
 #import <WebCore/DOMSVGMaskElement.h>
 #import <WebCore/DOMSVGMatrix.h>
 #import <WebCore/DOMSVGMetadataElement.h>
+#import <WebCore/DOMSVGMissingGlyphElement.h>
 #import <WebCore/DOMSVGNumber.h>
 #import <WebCore/DOMSVGNumberList.h>
 #import <WebCore/DOMSVGPaint.h>
index 05fe44a..de4e992 100644 (file)
@@ -39,16 +39,16 @@ class FontDescription;
 class CSSFontFace : public RefCounted<CSSFontFace> {
 public:
     CSSFontFace(CSSFontSelector*);
-    ~CSSFontFace();
+    virtual ~CSSFontFace();
 
     bool isLoaded() const;
-    bool isValid() const;
+    virtual bool isValid() const;
 
-    void addSource(CSSFontFaceSource*);
+    virtual void addSource(CSSFontFaceSource*);
 
     void fontLoaded(CSSFontFaceSource*);
 
-    FontData* getFontData(const FontDescription&, bool syntheticBold, bool syntheticItalic);
+    virtual FontData* getFontData(const FontDescription&, bool syntheticBold, bool syntheticItalic);
 
 private:
     Vector<CSSFontFaceSource*> m_sources;
index 917a010..a903cca 100644 (file)
 
 namespace WebCore {
 
+class SVGFontFaceElement;
+
 class CSSFontFaceSrcValue : public CSSValue {
 public:
     CSSFontFaceSrcValue(const String& resource, bool local)
-    :m_resource(resource), m_isLocal(local) {}
+    :m_resource(resource), m_isLocal(local)
+#if ENABLE(SVG_FONTS)
+    , m_fontFaceElement(0)
+#endif    
+    {}
     virtual ~CSSFontFaceSrcValue() {};
 
     const String& resource() const { return m_resource; }
@@ -44,13 +50,21 @@ public:
     void setFormat(const String& format) { m_format = format; }
 
     bool isSupportedFormat() const;
-    
+
+#if ENABLE(SVG_FONTS)
+    SVGFontFaceElement* svgFontFaceElement() const { return m_fontFaceElement; }
+    void setSVGFontFaceElement(SVGFontFaceElement* element) { m_fontFaceElement = element; }
+#endif
+
     virtual String cssText() const;
 
 private:
     String m_resource;
     String m_format;
     bool m_isLocal;
+#if ENABLE(SVG_FONTS)
+    SVGFontFaceElement* m_fontFaceElement;
+#endif
 };
 
 }
index 0a8973f..423f5bb 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *           (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  */
 
 #include "config.h"
-#include "CSSFontSelector.h"
 
+#include "CSSFontSelector.h"
 #include "AtomicString.h"
+#include "CString.h"
 #include "CSSFontFace.h"
 #include "CSSFontFaceRule.h"
 #include "CSSFontFaceSource.h"
 #include "RenderObject.h"
 #include "Settings.h"
 
+#if ENABLE(SVG_FONTS)
+#include "NodeList.h"
+#include "SVGCSSFontFace.h"
+#include "SVGFontFaceElement.h"
+#include "SVGNames.h"
+#endif
+
 namespace WebCore {
 
 CSSFontSelector::CSSFontSelector(Document* document)
@@ -112,17 +121,31 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
                 break;
         }
     }
-    
+
     // Each item in the src property's list is a single CSSFontFaceSource. Put them all into a CSSFontFace.
-    CSSFontFace* fontFace = new CSSFontFace(this);
-    
+    CSSFontFace* fontFace = 0;
+
     int i;
     int srcLength = srcList->length();
+
     bool foundLocal = false;
+
+#if ENABLE(SVG_FONTS)
+    SVGFontFaceElement* svgFontFaceElement = 0;
+#endif
+
     for (i = 0; i < srcLength; i++) {
         // An item in the list either specifies a string (local font name) or a URL (remote font to download).
         CSSFontFaceSrcValue* item = static_cast<CSSFontFaceSrcValue*>(srcList->item(i));
         CSSFontFaceSource* source = 0;
+
+#if ENABLE(SVG_FONTS)
+        // SVG Fonts support (internal fonts, living within the document)
+        svgFontFaceElement = item->svgFontFaceElement();
+        if (svgFontFaceElement)
+            break;
+#endif
+
         if (!item->isLocal()) {
             if (item->isSupportedFormat()) {
                 CachedFont* cachedFont = m_document->docLoader()->requestFont(item->resource());
@@ -139,6 +162,9 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
             }
         }
 
+        if (!fontFace)
+            fontFace = new CSSFontFace(this);
+
         if (source)
             fontFace->addSource(source);
         
@@ -146,8 +172,14 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
         if (foundLocal)
             break;
     }
-    
-    if (!fontFace->isValid()) {
+
+#if ENABLE(SVG_FONTS)
+    ASSERT(fontFace || svgFontFaceElement);
+#else
+    ASSERT(fontFace);
+#endif
+
+    if (fontFace && !fontFace->isValid()) {
         delete fontFace;
         return;
     }
@@ -183,9 +215,18 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
                     break;
             }
         }
-        
-        if (!familyName.isEmpty())
-            m_fonts.set(hashForFont(familyName.lower(), fontDescription.bold(), fontDescription.italic()), fontFace);
+
+        if (familyName.isEmpty())
+            continue;
+
+#if ENABLE(SVG_FONTS)
+        if (svgFontFaceElement) {
+            ASSERT(svgFontFaceElement->fontFamily() == familyName);
+            fontFace = new SVGCSSFontFace(this, svgFontFaceElement);
+        }
+#endif
+
+        m_fonts.set(hashForFont(familyName.lower(), fontDescription.bold(), fontDescription.italic()), fontFace);
     }
 }
 
diff --git a/WebCore/css/SVGCSSFontFace.cpp b/WebCore/css/SVGCSSFontFace.cpp
new file mode 100644 (file)
index 0000000..7d44c52
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+
+#if ENABLE(SVG_FONTS)
+#include "SVGCSSFontFace.h"
+
+#include "FontData.h"
+#include "FontDescription.h"
+#include "SVGFontFaceElement.h"
+
+namespace WebCore {
+
+SVGCSSFontFace::SVGCSSFontFace(CSSFontSelector* selector, SVGFontFaceElement* fontFace)
+    : CSSFontFace(selector)
+    , m_fontFaceElement(fontFace)
+{
+    ASSERT(fontFace);
+}
+
+SVGCSSFontFace::~SVGCSSFontFace()
+{
+}
+
+bool SVGCSSFontFace::isValid() const
+{
+    return true;
+}
+    
+void SVGCSSFontFace::addSource(CSSFontFaceSource*)
+{
+    // no-op
+}
+
+FontData* SVGCSSFontFace::getFontData(const FontDescription& fontDescription, bool syntheticBold, bool syntheticItalic)
+{
+    if (!isValid())
+        return 0;
+
+    // TODO: Eventually we'll switch to CSSFontFaceSource here, which handles the caching for us.
+    // (When implementing support for external SVG Fonts this we'll decide about that.)
+    if (!m_fontData)
+        m_fontData.set(m_fontFaceElement->createFontData(fontDescription));
+
+    return m_fontData.get();
+}
+
+}
+
+#endif
diff --git a/WebCore/css/SVGCSSFontFace.h b/WebCore/css/SVGCSSFontFace.h
new file mode 100644 (file)
index 0000000..7384736
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef SVGCSSFontFace_h
+#define SVGCSSFontFace_h
+
+#if ENABLE(SVG_FONTS)
+#include "CSSFontFace.h"
+
+namespace WebCore {
+
+class SVGFontFaceElement;
+
+class SVGCSSFontFace : public CSSFontFace {
+public:
+    SVGCSSFontFace(CSSFontSelector*, SVGFontFaceElement*);
+    virtual ~SVGCSSFontFace();
+
+    virtual bool isValid() const;
+    virtual void addSource(CSSFontFaceSource*);
+
+    virtual FontData* getFontData(const FontDescription&, bool syntheticBold, bool syntheticItalic);
+
+private:
+    RefPtr<SVGFontFaceElement> m_fontFaceElement;
+    OwnPtr<FontData> m_fontData;
+};
+
+}
+
+#endif // ENABLE(SVG_FONTS)
+#endif
index 93ee4b9..3ad8c2b 100644 (file)
@@ -507,12 +507,12 @@ int Font::width(const TextRun& run) const
 
 int Font::ascent() const
 {
-    return primaryFont()->ascent();
+    return primaryFont()->ascent(size());
 }
 
 int Font::descent() const
 {
-    return primaryFont()->descent();
+    return primaryFont()->descent(size());
 }
 
 int Font::lineSpacing() const
@@ -548,6 +548,13 @@ void Font::setCodePath(CodePath p)
 
 bool Font::canUseGlyphCache(const TextRun& run) const
 {
+#if ENABLE(SVG_FONTS)
+    // SVG fonts don't support any caching for now, we pretend it here to assure SVG
+    // font drawing always ends up in the 'simple code path', when SVG fonts are used.
+    if (primaryFont() && primaryFont()->isSVGFont())
+        return true;
+#endif
+
     switch (codePath) {
         case Auto:
             break;
@@ -654,7 +661,13 @@ void Font::drawGlyphBuffer(GraphicsContext* context, const GlyphBuffer& glyphBuf
         const FontData* nextFontData = glyphBuffer.fontDataAt(nextGlyph);
         FloatSize nextOffset = glyphBuffer.offsetAt(nextGlyph);
         if (nextFontData != fontData || nextOffset != offset) {
+#if ENABLE(SVG_FONTS)
+            if (fontData->isSVGFont())
+                drawGlyphsWithSVGFont(context, run.referencingRenderObject(), fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
+            else
+#endif
             drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
+
             lastFrom = nextGlyph;
             fontData = nextFontData;
             offset = nextOffset;
@@ -663,6 +676,12 @@ void Font::drawGlyphBuffer(GraphicsContext* context, const GlyphBuffer& glyphBuf
         nextX += glyphBuffer.advanceAt(nextGlyph);
         nextGlyph++;
     }
+
+#if ENABLE(SVG_FONTS)
+    if (fontData->isSVGFont())
+        drawGlyphsWithSVGFont(context, run.referencingRenderObject(), fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
+    else
+#endif
     drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
 }
 
index 3c19fae..d93c257 100644 (file)
@@ -46,6 +46,7 @@ class GlyphBuffer;
 class GlyphPageTreeNode;
 class GraphicsContext;
 class IntPoint;
+class RenderObject;
 
 struct GlyphData;
 
@@ -63,6 +64,9 @@ public:
         , m_applyRunRounding(applyRunRounding)
         , m_applyWordRounding(applyWordRounding)
         , m_disableSpacing(false)
+#if ENABLE(SVG_FONTS)
+        , m_referencingRenderObject(0)
+#endif
     {
     }
 
@@ -78,6 +82,9 @@ public:
         , m_applyRunRounding(applyRunRounding)
         , m_applyWordRounding(applyWordRounding)
         , m_disableSpacing(false)
+#if ENABLE(SVG_FONTS)
+        , m_referencingRenderObject(0)
+#endif
     {
     }
 
@@ -103,7 +110,12 @@ public:
     void disableRoundingHacks() { m_applyRunRounding = m_applyWordRounding = false; }
     void setRTL(bool b) { m_rtl = b; }
     void setDirectionalOverride(bool override) { m_directionalOverride = override; }
-    
+
+#if ENABLE(SVG_FONTS)
+    RenderObject* referencingRenderObject() const { return m_referencingRenderObject; }
+    void setReferencingRenderObject(RenderObject* object) { m_referencingRenderObject = object; }
+#endif
+
 private:
     const UChar* m_characters;
     int m_len;
@@ -116,6 +128,10 @@ private:
     bool m_applyRunRounding;
     bool m_applyWordRounding;
     bool m_disableSpacing;
+
+#if ENABLE(SVG_FONTS)
+    RenderObject* m_referencingRenderObject;
+#endif
 };
 
 class Font {
@@ -199,6 +215,9 @@ private:
     bool canUseGlyphCache(const TextRun&) const;
     void drawSimpleText(GraphicsContext*, const TextRun&, const FloatPoint&, int from, int to) const;
     void drawGlyphs(GraphicsContext*, const FontData*, const GlyphBuffer&, int from, int to, const FloatPoint&) const;
+#if ENABLE(SVG_FONTS)
+    void drawGlyphsWithSVGFont(GraphicsContext*, RenderObject*, const FontData*, const GlyphBuffer&, int from, int to, const FloatPoint&) const;
+#endif
     void drawGlyphBuffer(GraphicsContext*, const GlyphBuffer&, const TextRun&, const FloatPoint&) const;
     void drawComplexText(GraphicsContext*, const TextRun&, const FloatPoint&, int from, int to) const;
     float floatWidthForSimpleText(const TextRun&, GlyphBuffer*) const;
index 171f317..8c17003 100644 (file)
 
 #include <wtf/MathExtras.h>
 
+#if ENABLE(SVG_FONTS)
+#include "SVGFontFaceElement.h"
+#endif
+
 namespace WebCore {
 
 FontData::FontData(const FontPlatformData& f, bool customFont, bool loading)
     : m_font(f)
     , m_treatAsFixedPitch(false)
+#if ENABLE(SVG_FONTS)
+    , m_isSVGFont(false)
+    , m_svgFontFace(0)
+#endif
     , m_isCustomFont(customFont)
     , m_isLoading(loading)
     , m_smallCapsFontData(0)
@@ -89,6 +97,30 @@ FontData::~FontData()
     // it will be deleted then, so we don't need to do anything here.
 }
 
+int FontData::ascent(float fontSize) const
+{
+#if ENABLE(SVG_FONTS)
+    if (m_isSVGFont) {
+        ASSERT(m_unitsPerEm > 0);
+        return m_ascent * fontSize / m_unitsPerEm;
+    }
+#endif
+
+    return m_ascent;
+}
+
+int FontData::descent(float fontSize) const
+{
+#if ENABLE(SVG_FONTS)
+    if (m_isSVGFont) {
+        ASSERT(m_unitsPerEm > 0);
+        return m_descent * fontSize / m_unitsPerEm;
+    }
+#endif
+
+    return m_descent;
+}
+
 float FontData::widthForGlyph(Glyph glyph) const
 {
     float width = m_glyphToWidthMap.widthForGlyph(glyph);
index 55e63fe..b55c633 100644 (file)
@@ -45,6 +45,10 @@ class FontPlatformData;
 class SharedBuffer;
 class WidthMap;
 
+#if ENABLE(SVG_FONTS)
+class SVGFontFaceElement;
+#endif
+
 enum Pitch { UnknownPitch, FixedPitch, VariablePitch };
 
 class FontData : Noncopyable {
@@ -57,8 +61,8 @@ public:
     FontData* smallCapsFontData(const FontDescription& fontDescription) const;
 
     // vertical metrics
-    int ascent() const { return m_ascent; }
-    int descent() const { return m_descent; }
+    int ascent(float fontSize) const;
+    int descent(float fontSize) const;
     int lineSpacing() const { return m_lineSpacing; }
     int lineGap() const { return m_lineGap; }
     float xHeight() const { return m_xHeight; }
@@ -72,6 +76,11 @@ public:
     void determinePitch();
     Pitch pitch() const { return m_treatAsFixedPitch ? FixedPitch : VariablePitch; }
 
+#if ENABLE(SVG_FONTS)
+    bool isSVGFont() const { return m_isSVGFont; }
+    SVGFontFaceElement* svgFontFace() const { return m_svgFontFace.get(); }
+#endif
+
     bool isCustomFont() const { return m_isCustomFont; }
     bool isLoading() const { return m_isLoading; }
 
@@ -124,6 +133,11 @@ public:
 
     bool m_treatAsFixedPitch;
 
+#if ENABLE(SVG_FONTS)
+    bool m_isSVGFont;
+    RefPtr<SVGFontFaceElement> m_svgFontFace; 
+#endif
+
     bool m_isCustomFont;  // Whether or not we are custom font loaded via @font-face
     bool m_isLoading; // Whether or not this custom font is still in the act of loading.
 
index 41f6c22..c0a0caf 100644 (file)
@@ -150,7 +150,8 @@ void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)
 
 void Path::closeSubpath()
 {
-    CGPathCloseSubpath(m_path);
+    if (!CGPathIsEmpty(m_path)) // to silence a warning when trying to close an empty path
+        CGPathCloseSubpath(m_path);
 }
 
 void Path::addArc(const FloatPoint& p, float r, float sa, float ea, bool clockwise)
index 65a5e94..879deee 100644 (file)
@@ -76,6 +76,7 @@ SVGRootInlineBox* SVGInlineTextBox::svgRootInlineBox() const
 
 float SVGInlineTextBox::calculateGlyphWidth(RenderStyle* style, int offset) const
 {
+    ASSERT(style);
     return style->font().floatWidth(svgTextRunForInlineTextBox(textObject()->text()->characters() + offset, 1, style, this, 0));
 }
 
index c2f99da..4e1c129 100644 (file)
@@ -644,6 +644,10 @@ TextRun svgTextRunForInlineTextBox(const UChar* c, int len, RenderStyle* style,
 
     TextRun run(c, len, false, static_cast<int>(xPos), textBox->toAdd(), textBox->m_reversed, textBox->m_dirOverride || style->visuallyOrdered());
 
+#if ENABLE(SVG_FONTS)
+    run.setReferencingRenderObject(textBox->textObject()->parent());
+#endif
+
     // We handle letter & word spacing ourselves
     run.disableSpacing();
     return run;
index df43140..11746d7 100644 (file)
@@ -1,24 +1,25 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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.
  */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGDefinitionSrcElement.h"
 
 #include "SVGFontFaceElement.h"
@@ -39,5 +40,5 @@ void SVGDefinitionSrcElement::childrenChanged()
 
 }
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 
index e7d8e32..c0f893c 100644 (file)
@@ -1,40 +1,39 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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 SVGDefinitionSrcElement_h
 #define SVGDefinitionSrcElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
 
-namespace WebCore
-{
+namespace WebCore {
     class SVGDefinitionSrcElement : public SVGElement {
-public:
-    SVGDefinitionSrcElement(const QualifiedName&, Document*);
+    public:
+        SVGDefinitionSrcElement(const QualifiedName&, Document*);
     
-    virtual void childrenChanged();
-};
+        virtual void childrenChanged();
+    };
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index f91b505..f221895 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGDefinitionSrcElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGDefinitionSrcElement : SVGElement {
     };
 
 }
diff --git a/WebCore/svg/SVGFont.cpp b/WebCore/svg/SVGFont.cpp
new file mode 100644 (file)
index 0000000..ac39078
--- /dev/null
@@ -0,0 +1,96 @@
+/**
+ * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * 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.
+ *
+ */
+
+#include "config.h"
+
+#if ENABLE(SVG_FONTS)
+#include "Font.h"
+
+#include "FontData.h"
+#include "GraphicsContext.h"
+#include "RenderObject.h"
+#include "SVGGlyphElement.h"
+#include "SVGFontElement.h"
+#include "SVGFontFaceElement.h"
+#include "SVGPaintServer.h"
+
+namespace WebCore {
+
+void Font::drawGlyphsWithSVGFont(GraphicsContext* context, RenderObject* renderObject,
+                                 const FontData* fontData, const GlyphBuffer& glyphBuffer,
+                                 int from, int to, const FloatPoint& point) const
+{
+    ASSERT(renderObject);
+
+    ASSERT(!fontData->isCustomFont());
+    ASSERT(fontData->isSVGFont());
+
+    SVGFontFaceElement* fontFace = fontData->svgFontFace();
+    ASSERT(fontFace);
+
+    RenderStyle* style = renderObject->style();
+    ASSERT(style);
+
+    // TODO: This is ridiculous. Glyphs shouldn't be collected when painted. The problem is
+    // that we need to cache 'Glyph' instead of 'String' in the GlyphHashMap, to obtain
+    // a set of 'Glyph's from a 'String' we need the local function glyphDataForCharacter.
+    // Somehow the design needs to be changed. Not yet sure how, needs discussion.
+    if (fontFace->parentNode() && fontFace->parentNode()->hasTagName(SVGNames::fontTag))
+        static_cast<SVGFontElement*>(fontFace->parentNode())->collectGlyphs(*this);
+
+    FloatPoint startPoint = point;
+
+    SVGPaintServer* fillPaintServer = SVGPaintServer::fillPaintServer(style, renderObject);
+    SVGPaintServer* strokePaintServer = SVGPaintServer::strokePaintServer(style, renderObject);
+
+    for (int i = from; i < to; ++i) {
+        SVGGlyphIdentifier identifier = fontFace->glyphIdentifierForGlyphCode(glyphBuffer.glyphAt(i));
+
+        if (!identifier.pathData.isEmpty()) {
+            float scale = size() / fontFace->unitsPerEm();
+
+            AffineTransform ctm;
+            ctm.translate(startPoint.x(), startPoint.y());
+            ctm.scale(scale, -scale);
+
+            context->save();
+            context->concatCTM(ctm);
+
+            context->beginPath();
+
+            if (fillPaintServer) {
+                context->addPath(identifier.pathData);
+                fillPaintServer->draw(context, renderObject, ApplyToFillTargetType);
+            }
+
+            if (strokePaintServer) {
+                context->addPath(identifier.pathData);
+                strokePaintServer->draw(context, renderObject, ApplyToStrokeTargetType);
+            }
+
+            context->restore();
+            startPoint.move(glyphBuffer.advanceAt(i), 0);
+        }
+    }
+}
+
+}
+
+#endif
diff --git a/WebCore/svg/SVGFontElement.cpp b/WebCore/svg/SVGFontElement.cpp
new file mode 100644 (file)
index 0000000..61e7e9e
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+    Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+    Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+
+    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.
+*/
+
+#include "config.h"
+
+#if ENABLE(SVG_FONTS)
+#include "SVGFontElement.h"
+
+#include "Font.h"
+#include "GlyphPageTreeNode.h"
+#include "SVGGlyphElement.h"
+#include "SVGMissingGlyphElement.h"
+#include "SVGNames.h"
+#include "SVGParserUtilities.h"
+
+namespace WebCore {
+
+using namespace SVGNames;
+
+SVGFontElement::SVGFontElement(const QualifiedName& tagName, Document* doc)
+    : SVGStyledElement(tagName, doc)
+{
+}
+
+SVGFontElement::~SVGFontElement()
+{
+}
+
+void SVGFontElement::parseMappedAttribute(MappedAttribute* attr)
+{
+    SVGStyledElement::parseMappedAttribute(attr);
+}
+
+void SVGFontElement::collectGlyphs(const Font& font)
+{
+    Vector<SVGGlyphElement*> glyphElements;
+    SVGMissingGlyphElement* missingGlyphElement = 0;
+
+    for (Node* child = lastChild(); child; child = child->previousSibling()) {
+        if (child->hasTagName(glyphTag))
+            glyphElements.append(static_cast<SVGGlyphElement*>(child));
+        else if (child->hasTagName(missing_glyphTag))
+            missingGlyphElement = static_cast<SVGMissingGlyphElement*>(child);
+    }
+
+    Vector<SVGGlyphElement*>::iterator it = glyphElements.begin();
+    Vector<SVGGlyphElement*>::iterator end = glyphElements.end();
+
+    m_glyphMap.clear();
+
+    SVGGlyphIdentifier identifier;
+
+    // Only supports single glyph <-> single character situations & glyphs rendered by paths.
+    for (; it != end; ++it) {
+        String pathDataString = (*it)->getAttribute(dAttr);
+        String glyphString = (*it)->getAttribute(unicodeAttr);
+
+        // To support glyph strings consisting of more than one character (ie. 'ffl' ligatures) we need another hashing scheme.
+        // Glyph <-> SVGGlyphIdentifier is not enough.
+        if (glyphString.length() != 1 || pathDataString.isEmpty())
+            continue;
+
+        const GlyphData& glyphData = font.glyphDataForCharacter(glyphString[0], false /* TODO: no rtl, is this correct in all cases? */);
+
+        identifier.pathData = Path();
+        pathFromSVGData(identifier.pathData, pathDataString);
+
+        //fprintf(stderr, "FOUND NEW GLYPH! pathDataString: '%s' glyphString: '%s'  code: '%u'\n", pathDataString.latin1().data(), glyphString.latin1().data(), glyphData.glyph);
+        m_glyphMap.add(glyphData.glyph, identifier);
+    }
+}
+
+SVGGlyphIdentifier SVGFontElement::glyphIdentifierForGlyphCode(const Glyph& code) const
+{
+    GlyphHashMap& hashMap = const_cast<SVGFontElement*>(this)->m_glyphMap;
+
+    GlyphHashMap::iterator it = hashMap.find(code);
+    if (it == hashMap.end())
+        return SVGGlyphIdentifier();
+
+    return it->second;
+}
+
+}
+
+#endif // ENABLE(SVG_FONTS)
diff --git a/WebCore/svg/SVGFontElement.h b/WebCore/svg/SVGFontElement.h
new file mode 100644 (file)
index 0000000..9dd575f
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+   Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+
+   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 SVGFontElement_h
+#define SVGFontElement_h
+
+#if ENABLE(SVG_FONTS)
+#include "SVGStyledElement.h"
+
+#include "GlyphBuffer.h"
+#include "SVGExternalResourcesRequired.h"
+#include "SVGGlyphElement.h"
+
+namespace WebCore {
+
+    class Font;
+
+    struct GlyphHash {
+        static unsigned hash(const Glyph& glyph) {
+            return StringImpl::computeHash((::UChar*) &glyph, sizeof(Glyph) / sizeof(::UChar));
+        }
+
+        static bool equal(const Glyph& a, const Glyph& b) { return a == b; }
+        static const bool safeToCompareToEmptyOrDeleted = false;
+    };
+
+    struct GlyphHashTraits : WTF::GenericHashTraits<Glyph> {
+        static TraitType deletedValue() { return USHRT_MAX; }
+    };
+
+    typedef HashMap<Glyph, SVGGlyphIdentifier, GlyphHash, GlyphHashTraits> GlyphHashMap;
+
+    class SVGFontElement : public SVGStyledElement
+                         , public SVGExternalResourcesRequired {
+    public:
+        SVGFontElement(const QualifiedName&, Document*);
+        virtual ~SVGFontElement();
+
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }    
+
+        virtual const SVGElement* contextElement() const { return this; }
+
+        void collectGlyphs(const Font&);
+        SVGGlyphIdentifier glyphIdentifierForGlyphCode(const Glyph&) const;
+
+    private:
+        // Map between 'unicode' property of <glyph> and a SVGGlyphIdentifier
+        GlyphHashMap m_glyphMap;
+    };
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG_FONTS)
+#endif
+
+// vim:ts=4:noet
diff --git a/WebCore/svg/SVGFontElement.idl b/WebCore/svg/SVGFontElement.idl
new file mode 100644 (file)
index 0000000..92bd512
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+module svg {
+
+    interface [Conditional=SVG&SVG_FONTS] SVGFontElement : SVGElement {
+    };
+
+}
index a358753..830703c 100644 (file)
@@ -1,35 +1,43 @@
 /*
-Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-
-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.
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+   Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+    
+   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.
 */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGFontFaceElement.h"
 
 #include "CSSFontFaceRule.h"
+#include "CSSFontFaceSrcValue.h"
 #include "CSSProperty.h"
 #include "CSSPropertyNames.h"
 #include "CSSStyleSelector.h"
 #include "CSSStyleSheet.h"
 #include "CSSValueList.h"
+#include "FontCache.h"
+#include "FontData.h"
+#include "FontPlatformData.h"
+#include "SVGDefinitionSrcElement.h"
 #include "SVGNames.h"
+#include "SVGFontElement.h"
 #include "SVGFontFaceSrcElement.h"
-#include "SVGDefinitionSrcElement.h"
+#include "SVGGlyphElement.h"
 
 namespace WebCore {
 
@@ -125,12 +133,84 @@ void SVGFontFaceElement::parseMappedAttribute(MappedAttribute* attr)
     SVGElement::parseMappedAttribute(attr);
 }
 
+unsigned SVGFontFaceElement::unitsPerEm() const
+{
+    if (hasAttribute(units_per_emAttr))
+        return getAttribute(units_per_emAttr).toInt();
+    
+    return 1000;
+}
+
+String SVGFontFaceElement::fontFamily() const
+{
+    return m_styleDeclaration->getPropertyValue(CSS_PROP_FONT_FAMILY);
+}
+
+FontData* SVGFontFaceElement::createFontData(const FontDescription& fontDescription) const
+{
+    // We only expect to have this method called by a parent font element
+    ASSERT(parentNode());
+    ASSERT(parentNode()->hasTagName(fontTag));
+    SVGFontElement* fontElement = static_cast<SVGFontElement*>(parentNode());
+
+    // Use default fallback platform data - it's not needed anyway...
+    FontPlatformData* cachedPlatformData = FontCache::getLastResortFallbackFont(fontDescription);
+    if (!cachedPlatformData)
+        return 0;
+
+    OwnPtr<FontData> fontData(new FontData(*cachedPlatformData));
+    fontData->m_isSVGFont = true;
+    fontData->m_svgFontFace = const_cast<SVGFontFaceElement*>(this);
+
+    fontData->m_xHeight = fontElement->getAttribute(x_heightAttr).toFloat();
+    fontData->m_unitsPerEm = unitsPerEm();
+
+    if (hasAttribute(ascentAttr))
+        fontData->m_ascent = getAttribute(ascentAttr).toInt();
+    else if (fontElement->hasAttribute(vert_origin_yAttr))
+        fontData->m_ascent = fontData->m_unitsPerEm - fontElement->getAttribute(vert_origin_yAttr).toInt();
+    else
+        // invalid font, should log
+        fontData->m_ascent = 0;
+
+    if (hasAttribute(descentAttr))
+        fontData->m_descent = getAttribute(descentAttr).toInt();
+    else if (fontElement->hasAttribute(vert_origin_yAttr))
+        fontData->m_descent = fontElement->getAttribute(vert_origin_yAttr).toInt();
+    else
+        fontData->m_descent = fontData->m_ascent;
+
+    return fontData.release();
+}
+
 void SVGFontFaceElement::rebuildFontFace()
 {
+    // Ignore changes until we live in the tree
+    if (!parentNode())
+        return;
+
+    // Special handling for local SVG fonts (those which have a <font> parent, and are only used within the document)
+    if (parentNode() && parentNode()->hasTagName(fontTag)) {
+        RefPtr<CSSValueList> list = new CSSValueList;
+
+        RefPtr<CSSFontFaceSrcValue> src = new CSSFontFaceSrcValue(StringImpl::empty(), false);
+        src->setSVGFontFaceElement(this);
+        list->append(src);
+
+        CSSProperty srcProperty(CSS_PROP_SRC, list);
+        const CSSProperty* srcPropertyRef = &srcProperty;
+        m_styleDeclaration->addParsedProperties(&srcPropertyRef, 1);
+
+        document()->updateStyleSelector();
+        return;
+    }
+
+    // TODO: External SVG fonts support - re use existing "custom font" handling logic.
+
     // we currently ignore all but the first src element, alternatively we could concat them
     SVGFontFaceSrcElement* srcElement = 0;
     SVGDefinitionSrcElement* definitionSrc = 0;
-    
+
     for (Node* child = firstChild(); child; child = child->nextSibling()) {
         if (child->hasTagName(font_face_srcTag) && !srcElement)
             srcElement = static_cast<SVGFontFaceSrcElement*>(child);
@@ -143,26 +223,38 @@ void SVGFontFaceElement::rebuildFontFace()
     if (definitionSrc)
         m_styleDeclaration->setProperty(CSS_PROP_DEFINITION_SRC, definitionSrc->getAttribute(XLinkNames::hrefAttr), false);
 #endif
-    
-    if (parentNode() && parentNode()->localName() == "font") // SVGNames::fontTag isn't generated yet
-        return; // this font-face applies to its parent font, which we ignore.
-    else if (srcElement) {
+
+    if (srcElement) {
         // This is the only class (other than CSSParser) to create CSSValue objects and set them on the CSSStyleDeclaration manually
         // we use the addParsedProperties method, and fake having an array of CSSProperty pointers.
         CSSProperty srcProperty(CSS_PROP_SRC, srcElement->srcValue());
         const CSSProperty* srcPropertyRef = &srcProperty;
         m_styleDeclaration->addParsedProperties(&srcPropertyRef, 1);
     }
-    
+
     document()->updateStyleSelector();
 }
 
+void SVGFontFaceElement::insertedIntoDocument()
+{
+    rebuildFontFace();
+}
+
 void SVGFontFaceElement::childrenChanged()
 {
     rebuildFontFace();
 }
 
+SVGGlyphIdentifier SVGFontFaceElement::glyphIdentifierForGlyphCode(const Glyph& code) const
+{
+    // We only expect to have this method called by a parent font element
+    ASSERT(parentNode());
+    ASSERT(parentNode()->hasTagName(fontTag));
+
+    SVGFontElement* fontElement = static_cast<SVGFontElement*>(parentNode());
+    return fontElement->glyphIdentifierForGlyphCode(code);
 }
 
-#endif // ENABLE(SVG)
+}
 
+#endif // ENABLE(SVG_FONTS)
index 2ede6aa..3045c92 100644 (file)
@@ -1,50 +1,64 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-      
- 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.
- */
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+   Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+
+   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 SVGFontFaceElement_h
 #define SVGFontFaceElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
+#include "GlyphBuffer.h"
 
 namespace WebCore {
+
     class CSSFontFaceRule;
     class CSSMutableStyleDeclaration;
+    class FontData;
+    class FontDescription;
+    struct SVGGlyphIdentifier;
+
     class SVGFontFaceElement : public SVGElement {
     public:
         SVGFontFaceElement(const QualifiedName&, Document*);
         virtual ~SVGFontFaceElement();
 
         virtual void parseMappedAttribute(MappedAttribute*);
-        
+
         virtual void childrenChanged();
-        
+        virtual void insertedIntoDocument();
+
+        unsigned unitsPerEm() const;
+        String fontFamily() const;
+
         void rebuildFontFace();
-    
-    private:        
+        FontData* createFontData(const FontDescription&) const;
+
+        SVGGlyphIdentifier glyphIdentifierForGlyphCode(const Glyph&) const;
+
+    private:
         RefPtr<CSSFontFaceRule> m_fontFaceRule;
         RefPtr<CSSMutableStyleDeclaration> m_styleDeclaration;
     };
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index dceb7c5..0097f49 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGFontFaceElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGFontFaceElement : SVGElement {
     };
 
 }
index a0a6549..fedb2bb 100644 (file)
@@ -1,24 +1,25 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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.
  */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGFontFaceFormatElement.h"
 
 #include "SVGFontFaceElement.h"
@@ -49,5 +50,4 @@ void SVGFontFaceFormatElement::childrenChanged()
 
 }
 
-#endif // ENABLE(SVG)
-
+#endif // ENABLE(SVG_FONTS)
index b746b5c..2ce7fae 100644 (file)
@@ -1,30 +1,31 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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 SVGFontFaceFormatElement_h
 #define SVGFontFaceFormatElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
 
 namespace WebCore {
-    class SVGFontFaceFormatElement : public SVGElement {
+
+class SVGFontFaceFormatElement : public SVGElement {
 public:
     SVGFontFaceFormatElement(const QualifiedName&, Document*);
 
@@ -33,7 +34,7 @@ public:
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index 04fd608..cac29d7 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGFontFaceFormatElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGFontFaceFormatElement : SVGElement {
     };
 
 }
index 92992a0..1825802 100644 (file)
@@ -1,24 +1,25 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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.
  */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGFontFaceNameElement.h"
 
 #include "CSSFontFaceSrcValue.h"
index fc06d18..1e07b13 100644 (file)
@@ -1,26 +1,26 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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 SVGFontFaceNameElement_h
 #define SVGFontFaceNameElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
 
 namespace WebCore {
@@ -34,7 +34,7 @@ namespace WebCore {
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index 692aa39..0dd0c90 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGFontFaceNameElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGFontFaceNameElement : SVGElement {
     };
 
 }
index 0999aa4..7765574 100644 (file)
@@ -1,24 +1,25 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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.
  */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGFontFaceSrcElement.h"
 
 #include "CSSValueList.h"
@@ -57,5 +58,4 @@ void SVGFontFaceSrcElement::childrenChanged()
 
 }
 
-#endif // ENABLE(SVG)
-
+#endif // ENABLE(SVG_FONTS)
index 927527f..bbd31b9 100644 (file)
@@ -1,26 +1,26 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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 SVGFontFaceSrcElement_h
 #define SVGFontFaceSrcElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
 
 namespace WebCore {
@@ -36,7 +36,7 @@ namespace WebCore {
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index db55122..4887bb8 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGFontFaceSrcElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGFontFaceSrcElement : SVGElement {
     };
 
 }
index c24b85f..91a7d01 100644 (file)
@@ -1,24 +1,25 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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.
  */
 
 #include "config.h"
-#if ENABLE(SVG)
+
+#if ENABLE(SVG_FONTS)
 #include "SVGFontFaceUriElement.h"
 
 #include "CSSFontFaceSrcValue.h"
@@ -54,5 +55,4 @@ void SVGFontFaceUriElement::childrenChanged()
 
 }
 
-#endif // ENABLE(SVG)
-
+#endif // ENABLE(SVG_FONTS)
index c79e68a..b14ff53 100644 (file)
@@ -1,26 +1,26 @@
 /*
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-  
- 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.
  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
  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 SVGFontFaceUriElement_h
 #define SVGFontFaceUriElement_h
-#if ENABLE(SVG)
 
+#if ENABLE(SVG_FONTS)
 #include "SVGElement.h"
 
 namespace WebCore {
@@ -36,7 +36,7 @@ namespace WebCore {
 
 } // namespace WebCore
 
-#endif // ENABLE(SVG)
+#endif // ENABLE(SVG_FONTS)
 #endif
 
 // vim:ts=4:noet
index b4b2104..6c194ba 100644 (file)
@@ -25,7 +25,7 @@
 
 module svg {
 
-    interface [Conditional=SVG] SVGFontFaceUriElement : SVGElement {
+    interface [Conditional=SVG&SVG_FONTS] SVGFontFaceUriElement : SVGElement {
     };
 
 }
diff --git a/WebCore/svg/SVGGlyphElement.cpp b/WebCore/svg/SVGGlyphElement.cpp
new file mode 100644 (file)
index 0000000..16ba1ca
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+   Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+
+   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.
+*/
+
+#include "config.h"
+
+#if ENABLE(SVG_FONTS)
+#include "SVGGlyphElement.h"
+
+#include "SVGNames.h""
+
+namespace WebCore {
+
+using namespace SVGNames;
+
+SVGGlyphElement::SVGGlyphElement(const QualifiedName& tagName, Document* doc)
+    : SVGStyledElement(tagName, doc)
+{
+}
+
+}
+
+#endif // ENABLE(SVG_FONTS)
diff --git a/WebCore/svg/SVGGlyphElement.h b/WebCore/svg/SVGGlyphElement.h
new file mode 100644 (file)
index 0000000..296a6d9
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+   Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+
+   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 SVGGlyphElement_h
+#define SVGGlyphElement_h
+
+#if ENABLE(SVG_FONTS)
+#include "SVGStyledElement.h"
+
+#include "Path.h"
+
+namespace WebCore {
+    
+    class SVGGlyphElement : public SVGStyledElement {
+    public:
+        SVGGlyphElement(const QualifiedName&, Document*);
+
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+    };
+
+    // Describe a SVG <glyph> element
+    struct SVGGlyphIdentifier {
+        enum Orientation { Vertical, Horizontal, Both };
+        enum ArabicForm { Initial, Medial, Terminal, Isolated };
+
+        SVGGlyphIdentifier()
+            : orientation(Both)
+            , arabicForm(Initial)
+            , horizontalAdvanceX(0.0f)
+            , verticalOriginX(0.0f)
+            , verticalOriginY(0.0f)
+            , verticalAdvanceY(0.0f)
+        {
+        }
+
+        // 'orientation' property;
+        Orientation orientation;
+
+        // 'arabic-form' property
+        ArabicForm arabicForm;
+
+        // 'horiz-adv-x' property
+        float horizontalAdvanceX;
+
+        // 'vert-origin-x' property
+        float verticalOriginX;
+
+        // 'vert-origin-y' property
+        float verticalOriginY;
+
+        // 'vert-adv-y' property
+        float verticalAdvanceY;
+
+        // 'd' property
+        Path pathData;
+
+        // 'lang' property
+        Vector<String> languages;
+    };
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG_FONTS)
+#endif
+
+// vim:ts=4:noet
diff --git a/WebCore/svg/SVGGlyphElement.idl b/WebCore/svg/SVGGlyphElement.idl
new file mode 100644 (file)
index 0000000..2d77fcd
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+module svg {
+
+    interface [Conditional=SVG&SVG_FONTS] SVGGlyphElement : SVGElement {
+    };
+
+}
diff --git a/WebCore/svg/SVGMissingGlyphElement.cpp b/WebCore/svg/SVGMissingGlyphElement.cpp
new file mode 100644 (file)
index 0000000..34177e3
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
+   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.
+*/
+
+#include "config.h"
+
+#if ENABLE(SVG_FONTS)
+#include "SVGMissingGlyphElement.h"
+
+#include "SVGNames.h"
+
+namespace WebCore {
+
+using namespace SVGNames;
+
+SVGMissingGlyphElement::SVGMissingGlyphElement(const QualifiedName& tagName, Document* doc)
+    : SVGStyledElement(tagName, doc)
+{
+}
+
+}
+
+#endif // ENABLE(SVG_FONTS)
diff --git a/WebCore/svg/SVGMissingGlyphElement.h b/WebCore/svg/SVGMissingGlyphElement.h
new file mode 100644 (file)
index 0000000..468ad9d
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+   Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+
+   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 SVGMissingGlyphElement_h
+#define SVGMissingGlyphElement_h
+
+#if ENABLE(SVG_FONTS)
+#include "SVGStyledElement.h"
+
+namespace WebCore {
+    class SVGMissingGlyphElement : public SVGStyledElement {
+    public:
+        SVGMissingGlyphElement(const QualifiedName&, Document*);
+
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+    };
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG_FONTS)
+#endif
+
+// vim:ts=4:noet
diff --git a/WebCore/svg/SVGMissingGlyphElement.idl b/WebCore/svg/SVGMissingGlyphElement.idl
new file mode 100644 (file)
index 0000000..232c6b9
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+module svg {
+
+    interface [Conditional=SVG&SVG_FONTS] SVGMissingGlyphElement : SVGElement {
+    };
+
+}
index d69d363..d267d53 100644 (file)
@@ -16,7 +16,9 @@ clipPath
 color_profile
 #endif
 cursor
+#if ENABLE_SVG_FONTS
 definition_src
+#endif
 defs
 desc
 ellipse
@@ -51,18 +53,20 @@ feTile
 feTurbulence
 filter
 #endif
-#if 0
+#ifdef ENABLE_SVG_FONTS
 font
-#endif
 font_face
 font_face_format
 font_face_name
 font_face_src
 font_face_uri
+#endif
 foreignObject
 g
-#if 0
+#ifdef ENABLE_SVG_FONTS
 glyph
+#endif
+#if 0
 glyphRef
 hkern
 #endif
@@ -72,7 +76,7 @@ linearGradient
 marker
 mask
 metadata
-#if 0
+#ifdef ENABLE_SVG_FONTS
 missing_glyph
 #endif
 mpath
index 0afdfdf..0c21edf 100644 (file)
@@ -1,3 +1,11 @@
+2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Eric.
+
+        Add DOMSVGFontElement/DOMSVGGlyphElement/DOMSVGMissingGlyphElement to MigrateHeaders.make
+
+        * MigrateHeaders.make:
+
 2007-12-25  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Oliver Hunt.
index 5a8fa96..f447332 100644 (file)
@@ -326,6 +326,7 @@ all : \
     $(INTERNAL_HEADERS_DIR)/DOMSVGFilterElementInternal.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGFilterPrimitiveStandardAttributes.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGFitToViewBox.h \
+    $(PRIVATE_HEADERS_DIR)/DOMSVGFontElement.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGFontFaceElement.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGFontFaceFormatElement.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGFontFaceNameElement.h \
@@ -335,6 +336,7 @@ all : \
     $(INTERNAL_HEADERS_DIR)/DOMSVGForeignObjectElementInternal.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGGElement.h \
     $(INTERNAL_HEADERS_DIR)/DOMSVGGElementInternal.h \
+    $(PRIVATE_HEADERS_DIR)/DOMSVGGlyphElement.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGGradientElement.h \
     $(INTERNAL_HEADERS_DIR)/DOMSVGGradientElementInternal.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGImageElement.h \
@@ -357,6 +359,7 @@ all : \
     $(INTERNAL_HEADERS_DIR)/DOMSVGMatrixInternal.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGMetadataElement.h \
     $(INTERNAL_HEADERS_DIR)/DOMSVGMetadataElementInternal.h \
+    $(PRIVATE_HEADERS_DIR)/DOMSVGMissingGlyphElement.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGNumber.h \
     $(PRIVATE_HEADERS_DIR)/DOMSVGNumberList.h \
     $(INTERNAL_HEADERS_DIR)/DOMSVGNumberListInternal.h \