Kaydet (Commit) c1859110 authored tarafından Armin Le Grand's avatar Armin Le Grand Kaydeden (comit) Caolán McNamara

Resolves: #i125325# added code to handle block comments...

in Css style definitions

(cherry picked from commit 7b071b82)

Conflicts:
	svgio/source/svgreader/svgtools.cxx

Change-Id: I094228ea398686c5b39f5f279a964a2df7b00368
üst 4c31a0be
...@@ -224,6 +224,10 @@ namespace svgio ...@@ -224,6 +224,10 @@ namespace svgio
OUString whiteSpaceHandlingDefault(const OUString& rCandidate); OUString whiteSpaceHandlingDefault(const OUString& rCandidate);
OUString whiteSpaceHandlingPreserve(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 svgreader
} // end of namespace svgio } // end of namespace svgio
......
...@@ -519,7 +519,16 @@ namespace svgio ...@@ -519,7 +519,16 @@ namespace svgio
if(maCssContents.size()) if(maCssContents.size())
{ {
// need to interpret css styles and remember them as StyleSheets // 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(); maCssContents.pop_back();
} }
else else
......
...@@ -1513,6 +1513,57 @@ namespace svgio ...@@ -1513,6 +1513,57 @@ namespace svgio
return rCandidate; 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) OUString consolidateContiguosSpace(const OUString& rCandidate)
{ {
const sal_Int32 nLen(rCandidate.getLength()); const sal_Int32 nLen(rCandidate.getLength());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment