svgio/inc/svgio/svgreader/svgtools.hxx | 4 ++ svgio/source/svgreader/svgdocumenthandler.cxx | 11 +++++ svgio/source/svgreader/svgtools.cxx | 51 ++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-)
New commits: commit 7b071b828a5f602cc30c17ddd871a75426a53faf Author: Armin Le Grand <[email protected]> Date: Fri Oct 10 15:52:52 2014 +0000 i125325 added code to handle block comments in Css style definitions diff --git a/svgio/inc/svgio/svgreader/svgtools.hxx b/svgio/inc/svgio/svgreader/svgtools.hxx index a138d83..607d238 100644 --- a/svgio/inc/svgio/svgreader/svgtools.hxx +++ b/svgio/inc/svgio/svgreader/svgtools.hxx @@ -236,6 +236,10 @@ namespace svgio rtl::OUString whiteSpaceHandlingDefault(const rtl::OUString& rCandidate); rtl::OUString whiteSpaceHandlingPreserve(const rtl::OUString& rCandidate); + // #125325# removes block comment of the general form '/* ... */', returns + // an adapted string or the original if no comments included + rtl::OUString removeBlockComments(const rtl::OUString& rCandidate); + } // end of namespace svgreader } // end of namespace svgio diff --git a/svgio/source/svgreader/svgdocumenthandler.cxx b/svgio/source/svgreader/svgdocumenthandler.cxx index 4378f20..a26e723 100644 --- a/svgio/source/svgreader/svgdocumenthandler.cxx +++ b/svgio/source/svgreader/svgdocumenthandler.cxx @@ -512,7 +512,16 @@ namespace svgio if(maCssContents.size()) { // need to interpret css styles and remember them as StyleSheets - pCssStyle->addCssStyleSheet(*(maCssContents.end() - 1)); + // #125325# Caution! the Css content may contain block comments + // (see http://www.w3.org/wiki/CSS_basics#CSS_comments). These need + // to be removed first + const rtl::OUString aCommentFreeSource(removeBlockComments(*(maCssContents.end() - 1))); + + if(aCommentFreeSource.getLength()) + { + pCssStyle->addCssStyleSheet(aCommentFreeSource); + } + maCssContents.pop_back(); } else diff --git a/svgio/source/svgreader/svgtools.cxx b/svgio/source/svgreader/svgtools.cxx index ee0da7f..987ddd8 100644 --- a/svgio/source/svgreader/svgtools.cxx +++ b/svgio/source/svgreader/svgtools.cxx @@ -1538,6 +1538,57 @@ namespace svgio return rCandidate; } + // #125325# + rtl::OUString removeBlockComments(const rtl::OUString& rCandidate) + { + const sal_Int32 nLen(rCandidate.getLength()); + + if(nLen) + { + sal_Int32 nPos(0); + rtl::OUStringBuffer aBuffer; + bool bChanged(false); + sal_Int32 nInsideComment(0); + const sal_Unicode aCommentSlash('/'); + const sal_Unicode aCommentStar('*'); + + while(nPos < nLen) + { + const sal_Unicode aChar(rCandidate[nPos]); + const bool bStart(aCommentSlash == aChar && nPos + 1 < nLen && aCommentStar == rCandidate[nPos + 1]); + const bool bEnd(aCommentStar == aChar && nPos + 1 < nLen && aCommentSlash == rCandidate[nPos + 1]); + + if(bStart) + { + nPos += 2; + nInsideComment++; + bChanged = true; + } + else if(bEnd) + { + nPos += 2; + nInsideComment--; + } + else + { + if(!nInsideComment) + { + aBuffer.append(aChar); + } + + nPos++; + } + } + + if(bChanged) + { + return aBuffer.makeStringAndClear(); + } + } + + return rCandidate; + } + rtl::OUString consolidateContiguosSpace(const rtl::OUString& rCandidate) { const sal_Int32 nLen(rCandidate.getLength()); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
