You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/01/02 12:33:52 UTC

svn commit: r1226395 - in /incubator/ooo/trunk/main/svgio: inc/svgio/svgreader/svgdocumenthandler.hxx source/svgreader/svgclippathnode.cxx source/svgreader/svgdocumenthandler.cxx source/svgreader/svgmasknode.cxx source/svgreader/svgstyleattributes.cxx

Author: alg
Date: Mon Jan  2 11:33:52 2012
New Revision: 1226395

URL: http://svn.apache.org/viewvc?rev=1226395&view=rev
Log:
svg: #118698# added support for css style for svg tokens, unified css style character reading

Modified:
    incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgmasknode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx

Modified: incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx?rev=1226395&r1=1226394&r2=1226395&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx (original)
+++ incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx Mon Jan  2 11:33:52 2012
@@ -41,13 +41,13 @@ namespace svgio
         {
         private:
             // the complete SVG Document
-            SvgDocument         maDocument;
+            SvgDocument                     maDocument;
 
             // current node for parsing
-            SvgNode*            mpTarget;
+            SvgNode*                        mpTarget;
 
-            /// bitfield
-            bool                mbValidToken : 1;
+            // text collector string stack for css styles
+            std::vector< rtl::OUString >    maCssContents;
 
         public:
             SvgDocHdl(const rtl::OUString& rAbsolutePath);

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx?rev=1226395&r1=1226394&r2=1226395&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgclippathnode.cxx Mon Jan  2 11:33:52 2012
@@ -51,9 +51,6 @@ namespace svgio
 
         const SvgStyleAttributes* SvgClipPathNode::getSvgStyleAttributes() const
         {
-            static rtl::OUString aClassStr(rtl::OUString::createFromAscii("clip-path"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
-
             return &maSvgStyleAttributes;
         }
 

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx?rev=1226395&r1=1226394&r2=1226395&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgdocumenthandler.cxx Mon Jan  2 11:33:52 2012
@@ -125,7 +125,8 @@ namespace svgio
     {
         SvgDocHdl::SvgDocHdl(const rtl::OUString& aAbsolutePath)
         :   maDocument(aAbsolutePath),
-            mpTarget(0)
+            mpTarget(0),
+            maCssContents()
         {
         }
 
@@ -137,17 +138,20 @@ namespace svgio
                 OSL_ENSURE(false, "SvgDocHdl destructed with active target (!)");
                 delete mpTarget;
             }
+            OSL_ENSURE(!maCssContents.size(), "SvgDocHdl destructed with active css style stack entry (!)");
 #endif
         }
 
         void SvgDocHdl::startDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException)
         {
             OSL_ENSURE(!mpTarget, "Already a target at document start (!)");
+            OSL_ENSURE(!maCssContents.size(), "SvgDocHdl startDocument with active css style stack entry (!)");
         }
 
         void SvgDocHdl::endDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException)
         {
             OSL_ENSURE(!mpTarget, "Still a target at document end (!)");
+            OSL_ENSURE(!maCssContents.size(), "SvgDocHdl endDocument with active css style stack entry (!)");
         }
 
         void SvgDocHdl::startElement( const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) throw (xml::sax::SAXException, uno::RuntimeException)
@@ -294,8 +298,14 @@ namespace svgio
                     /// styles (as stylesheets)
                     case SVGTokenStyle:
                     {
-                        mpTarget = new SvgStyleNode(maDocument, mpTarget);
+                        SvgStyleNode* pNew = new SvgStyleNode(maDocument, mpTarget);
+                        mpTarget = pNew;
                         mpTarget->parseAttributes(xAttribs);
+
+                        if(pNew->isTextCss())
+                        {
+                            maCssContents.push_back(rtl::OUString());
+                        }
                         break;
                     }
 
@@ -355,6 +365,7 @@ namespace svgio
             {
                 const SVGToken aSVGToken(StrToSVGToken(aName));
                 SvgNode* pWhitespaceCheck(SVGTokenText == aSVGToken ? mpTarget : 0);
+                SvgStyleNode* pCssStyle(SVGTokenStyle == aSVGToken ? static_cast< SvgStyleNode* >(mpTarget) : 0);
 
                 switch(aSVGToken)
                 {
@@ -427,6 +438,21 @@ namespace svgio
                     }
                 }
 
+                if(pCssStyle && pCssStyle->isTextCss())
+                {
+                    // css style parsing
+                    if(maCssContents.size())
+                    {
+                        // need to interpret css styles and remember them as StyleSheets
+                        pCssStyle->addCssStyleSheet(*(maCssContents.end() - 1));
+                        maCssContents.pop_back();
+                    }
+                    else
+                    {
+                        OSL_ENSURE(false, "Closing CssStyle, but no collector string on stack (!)");
+                    }
+                }
+
                 if(pWhitespaceCheck)
                 {
                     // cleanup read strings
@@ -480,12 +506,20 @@ namespace svgio
 
                             if(rSvgStyleNode.isTextCss())
                             {
-                                // need to interpret css styles and remember them as StyleSheets
-                                const ::rtl::OUString aTrimmedChars(aChars.trim());
+                                // collect characters for css style
+                                if(maCssContents.size())
+                                {
+                                    const ::rtl::OUString aTrimmedChars(aChars.trim());
                                 
-                                if(aTrimmedChars.getLength())
+                                    if(aTrimmedChars.getLength())
+                                    {
+                                        std::vector< rtl::OUString >::iterator aString(maCssContents.end() - 1);
+                                        (*aString) += aTrimmedChars;
+                                    }
+                                }
+                                else
                                 {
-                                    rSvgStyleNode.addCssStyleSheet(aTrimmedChars);
+                                    OSL_ENSURE(false, "Closing CssStyle, but no collector string on stack (!)");
                                 }
                             }
                             break;

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgmasknode.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgmasknode.cxx?rev=1226395&r1=1226394&r2=1226395&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgmasknode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgmasknode.cxx Mon Jan  2 11:33:52 2012
@@ -60,9 +60,6 @@ namespace svgio
 
         const SvgStyleAttributes* SvgMaskNode::getSvgStyleAttributes() const
         {
-            static rtl::OUString aClassStr(rtl::OUString::createFromAscii("mask"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
-
             return &maSvgStyleAttributes;
         }
 

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx?rev=1226395&r1=1226394&r2=1226395&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx Mon Jan  2 11:33:52 2012
@@ -203,7 +203,7 @@ namespace svgio
                         aId = aId + *mrOwner.getClass();
                         pNew = rDocument.findSvgStyleAttributesById(aId);
 
-                        if(!pNew)
+                        if(!pNew && rClassStr.getLength())
                         {
                             aId = rClassStr + aId;
                     
@@ -214,6 +214,10 @@ namespace svgio
                     {
                         pNew = rDocument.findSvgStyleAttributesById(*mrOwner.getId());
                     }
+                    else if(rClassStr.getLength())
+                    {
+                        pNew = rDocument.findSvgStyleAttributesById(rClassStr);
+                    }
                     
                     if(pNew)
                     {