[Libreoffice-commits] core.git: svgio/inc svgio/source

Joren De Cuyper jorendc at libreoffice.org
Tue Jul 15 00:35:19 PDT 2014


 svgio/inc/svgio/svgreader/svgdocumenthandler.hxx |    2 +
 svgio/inc/svgio/svgreader/svgtoken.hxx           |    2 +
 svgio/source/svgreader/svgdocumenthandler.cxx    |   27 ++++++++++++++++++++++-
 svgio/source/svgreader/svgtoken.cxx              |    3 ++
 4 files changed, 33 insertions(+), 1 deletion(-)

New commits:
commit 5bd241b99b76ae7f4b3c1d4f2bcbaf7c487bb339
Author: Joren De Cuyper <jorendc at libreoffice.org>
Date:   Tue Jul 15 00:02:44 2014 +0200

    fdo#50114 ingore flowRoot element during svg import
    
    This element is not specified in any released svg specification.
    It might be mentioned in svg1.2 but since this is not yet released/
    or will even not be released ever -> ignore it.
    
    Change-Id: Iaf5a392893070fda9e7a420bc951c8565bcfb37f
    Reviewed-on: https://gerrit.libreoffice.org/10312
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx b/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx
index 7269e3f..8656689 100644
--- a/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx
+++ b/svgio/inc/svgio/svgreader/svgdocumenthandler.hxx
@@ -41,6 +41,8 @@ namespace svgio
             // text collector string stack for css styles
             std::vector< OUString >    maCssContents;
 
+            bool                            bSkip;
+
         public:
             SvgDocHdl(const OUString& rAbsolutePath);
             virtual ~SvgDocHdl();
diff --git a/svgio/inc/svgio/svgreader/svgtoken.hxx b/svgio/inc/svgio/svgreader/svgtoken.hxx
index fa6986e..4596fb2 100644
--- a/svgio/inc/svgio/svgreader/svgtoken.hxx
+++ b/svgio/inc/svgio/svgreader/svgtoken.hxx
@@ -178,6 +178,8 @@ namespace svgio
             SVGTokenText,
             SVGTokenBaselineShift,
 
+            SVGTokenFlowRoot,
+
             SVGTokenLast
         };
 
diff --git a/svgio/source/svgreader/svgdocumenthandler.cxx b/svgio/source/svgreader/svgdocumenthandler.cxx
index 25772aa..3817612 100644
--- a/svgio/source/svgreader/svgdocumenthandler.cxx
+++ b/svgio/source/svgreader/svgdocumenthandler.cxx
@@ -137,7 +137,8 @@ namespace svgio
         SvgDocHdl::SvgDocHdl(const OUString& aAbsolutePath)
         :   maDocument(aAbsolutePath),
             mpTarget(0),
-            maCssContents()
+            maCssContents(),
+            bSkip(false)
         {
         }
 
@@ -167,8 +168,11 @@ namespace svgio
 
         void SvgDocHdl::startElement( const OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) throw (xml::sax::SAXException, uno::RuntimeException, std::exception)
         {
+            if (bSkip)
+                return;
             if(!aName.isEmpty())
             {
+
                 const SVGToken aSVGToken(StrToSVGToken(aName));
 
                 switch(aSVGToken)
@@ -364,6 +368,13 @@ namespace svgio
                         break;
                     }
 
+                    // ignore FlowRoot and child nodes
+                    case SVGTokenFlowRoot:
+                    {
+                        bSkip = true;
+                        break;
+                    }
+
                     default:
                     {
                         /// invalid token, ignore
@@ -388,6 +399,13 @@ namespace svgio
                 SvgStyleNode* pCssStyle(SVGTokenStyle == aSVGToken ? static_cast< SvgStyleNode* >(mpTarget) : 0);
                 SvgTitleDescNode* pSvgTitleDescNode(SVGTokenTitle == aSVGToken || SVGTokenDesc == aSVGToken ? static_cast< SvgTitleDescNode* >(mpTarget) : 0);
 
+                // if we are in skipping mode and we reach the flowRoot end tag: stop skipping mode
+                if(bSkip && aSVGToken == SVGTokenFlowRoot)
+                    bSkip = false;
+                // we are in skipping mode: do nothing until we found the flowRoot end tag
+                else if(bSkip)
+                    return;
+
                 switch(aSVGToken)
                 {
                     /// valid tokens for which a new one was created
@@ -457,6 +475,13 @@ namespace svgio
                         }
                         break;
                     }
+
+                    case SVGTokenFlowRoot:
+                    {
+                        bSkip = false;
+                        break;
+                    }
+
                     default:
                     {
                         /// invalid token, ignore
diff --git a/svgio/source/svgreader/svgtoken.cxx b/svgio/source/svgreader/svgtoken.cxx
index 337a26d..db494b1 100644
--- a/svgio/source/svgreader/svgtoken.cxx
+++ b/svgio/source/svgreader/svgtoken.cxx
@@ -160,6 +160,8 @@ namespace svgio
         static OUString aSVGStrText("text");
         static OUString aSVGStrBaselineShift("baseline-shift");
 
+        static OUString aSVGStrFlowRoot("flowRoot");
+
         SVGToken StrToSVGToken(const OUString& rStr)
         {
             typedef boost::unordered_map< OUString, SVGToken, OUStringHash,::std::equal_to< OUString >  > SVGTokenMapper;
@@ -302,6 +304,7 @@ namespace svgio
 
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrText, SVGTokenText));
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrBaselineShift, SVGTokenBaselineShift));
+                aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrFlowRoot, SVGTokenFlowRoot));
             }
 
             const SVGTokenMapper::const_iterator aResult(aSVGTokenMapperList.find(rStr.startsWith("svg:") ? rStr.copy(4) : rStr));


More information about the Libreoffice-commits mailing list