03516c505e
Change-Id: I858870d883de10a673d7ce2798bda8c8f511cee5 Reviewed-on: https://gerrit.libreoffice.org/79889 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
147 lines
4 KiB
C++
147 lines
4 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#include <helper.hxx>
|
|
|
|
namespace helper {
|
|
|
|
OString escapeAll(
|
|
const OString& rText, const OString& rUnEscaped, const OString& rEscaped )
|
|
{
|
|
assert( rEscaped.getLength() == 2*rUnEscaped.getLength() );
|
|
OStringBuffer sReturn;
|
|
for ( sal_Int32 nIndex = 0; nIndex < rText.getLength(); ++nIndex )
|
|
{
|
|
sal_Int32 nUnEscapedOne = rUnEscaped.indexOf(rText[nIndex]);
|
|
if( nUnEscapedOne != -1 )
|
|
{
|
|
sReturn.append(rEscaped.copy(nUnEscapedOne*2,2));
|
|
}
|
|
else
|
|
sReturn.append(rText[nIndex]);
|
|
}
|
|
return sReturn.makeStringAndClear();
|
|
}
|
|
|
|
|
|
OString unEscapeAll(
|
|
const OString& rText, const OString& rEscaped, const OString& rUnEscaped)
|
|
{
|
|
assert( rEscaped.getLength() == 2*rUnEscaped.getLength() );
|
|
OStringBuffer sReturn;
|
|
const sal_Int32 nLength = rText.getLength();
|
|
for ( sal_Int32 nIndex = 0; nIndex < nLength; ++nIndex )
|
|
{
|
|
if( rText[nIndex] == '\\' && nIndex+1 < nLength )
|
|
{
|
|
sal_Int32 nEscapedOne = rEscaped.indexOf(rText.copy(nIndex,2));
|
|
if( nEscapedOne != -1 )
|
|
{
|
|
sReturn.append(rUnEscaped[nEscapedOne/2]);
|
|
++nIndex;
|
|
}
|
|
else
|
|
{
|
|
sReturn.append(rText[nIndex]);
|
|
}
|
|
}
|
|
else
|
|
sReturn.append(rText[nIndex]);
|
|
}
|
|
return sReturn.makeStringAndClear();
|
|
}
|
|
|
|
|
|
OString QuotHTML(const OString &rString)
|
|
{
|
|
OStringBuffer sReturn;
|
|
for (sal_Int32 i = 0; i < rString.getLength(); ++i)
|
|
{
|
|
switch (rString[i])
|
|
{
|
|
case '<':
|
|
sReturn.append("<");
|
|
break;
|
|
case '>':
|
|
sReturn.append(">");
|
|
break;
|
|
case '"':
|
|
sReturn.append(""");
|
|
break;
|
|
case '\'':
|
|
sReturn.append("'");
|
|
break;
|
|
case '&':
|
|
if (rString.match("&", i))
|
|
sReturn.append('&');
|
|
else
|
|
sReturn.append("&");
|
|
break;
|
|
default:
|
|
sReturn.append(rString[i]);
|
|
break;
|
|
}
|
|
}
|
|
return sReturn.makeStringAndClear();
|
|
}
|
|
|
|
OString UnQuotHTML( const OString& rString )
|
|
{
|
|
OStringBuffer sReturn;
|
|
for (sal_Int32 i = 0; i != rString.getLength();) {
|
|
if (rString.match("&", i)) {
|
|
sReturn.append('&');
|
|
i += RTL_CONSTASCII_LENGTH("&");
|
|
} else if (rString.match("<", i)) {
|
|
sReturn.append('<');
|
|
i += RTL_CONSTASCII_LENGTH("<");
|
|
} else if (rString.match(">", i)) {
|
|
sReturn.append('>');
|
|
i += RTL_CONSTASCII_LENGTH(">");
|
|
} else if (rString.match(""", i)) {
|
|
sReturn.append('"');
|
|
i += RTL_CONSTASCII_LENGTH(""");
|
|
} else if (rString.match("'", i)) {
|
|
sReturn.append('\'');
|
|
i += RTL_CONSTASCII_LENGTH("'");
|
|
} else {
|
|
sReturn.append(rString[i]);
|
|
++i;
|
|
}
|
|
}
|
|
return sReturn.makeStringAndClear();
|
|
}
|
|
|
|
bool isWellFormedXML( OString const & text )
|
|
{
|
|
xmlDocPtr doc;
|
|
bool result = true;
|
|
|
|
OString content = "<root>" + text + "</root>";
|
|
doc = xmlParseMemory(content.getStr(),static_cast<int>(content.getLength()));
|
|
if (doc == nullptr) {
|
|
result = false;
|
|
}
|
|
xmlFreeDoc(doc);
|
|
xmlCleanupParser();
|
|
return result;
|
|
}
|
|
|
|
//Convert xmlChar* to OString
|
|
OString xmlStrToOString( const xmlChar* pString )
|
|
{
|
|
xmlChar* pTemp = xmlStrdup( pString );
|
|
OString sResult = reinterpret_cast<sal_Char*>( pTemp );
|
|
xmlFree( pTemp );
|
|
return sResult;
|
|
}
|
|
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|