summaryrefslogtreecommitdiff
path: root/svgio
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2014-10-10 15:52:52 +0000
committerCaolán McNamara <caolanm@redhat.com>2014-10-13 17:31:17 +0100
commitc18591107d9c856b15fa884eaed354d021ec4262 (patch)
treee26d7ca4a9d3ff026872fcef3b7805df0d4579e9 /svgio
parent4c31a0be1d8048bf3340acbb59248185e4b93041 (diff)
Resolves: #i125325# added code to handle block comments...
in Css style definitions (cherry picked from commit 7b071b828a5f602cc30c17ddd871a75426a53faf) Conflicts: svgio/source/svgreader/svgtools.cxx Change-Id: I094228ea398686c5b39f5f279a964a2df7b00368
Diffstat (limited to 'svgio')
-rw-r--r--svgio/inc/svgio/svgreader/svgtools.hxx4
-rw-r--r--svgio/source/svgreader/svgdocumenthandler.cxx11
-rw-r--r--svgio/source/svgreader/svgtools.cxx51
3 files changed, 65 insertions, 1 deletions
diff --git a/svgio/inc/svgio/svgreader/svgtools.hxx b/svgio/inc/svgio/svgreader/svgtools.hxx
index 555a075befa4..a2f194090bab 100644
--- a/svgio/inc/svgio/svgreader/svgtools.hxx
+++ b/svgio/inc/svgio/svgreader/svgtools.hxx
@@ -224,6 +224,10 @@ namespace svgio
OUString whiteSpaceHandlingDefault(const OUString& rCandidate);
OUString whiteSpaceHandlingPreserve(const OUString& rCandidate);
+ // #125325# removes block comment of the general form '/* ... */', returns
+ // an adapted string or the original if no comments included
+ OUString removeBlockComments(const 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 1cb1a54af248..d816f5473263 100644
--- a/svgio/source/svgreader/svgdocumenthandler.cxx
+++ b/svgio/source/svgreader/svgdocumenthandler.cxx
@@ -519,7 +519,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 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 f3faa470a679..a4d594a3d437 100644
--- a/svgio/source/svgreader/svgtools.cxx
+++ b/svgio/source/svgreader/svgtools.cxx
@@ -1513,6 +1513,57 @@ namespace svgio
return rCandidate;
}
+ // #i125325#
+ OUString removeBlockComments(const OUString& rCandidate)
+ {
+ const sal_Int32 nLen(rCandidate.getLength());
+
+ if(nLen)
+ {
+ sal_Int32 nPos(0);
+ 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;
+ }
+
OUString consolidateContiguosSpace(const OUString& rCandidate)
{
const sal_Int32 nLen(rCandidate.getLength());