l10ntools/source/uimerge.cxx | 50 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-)
New commits: commit 8e4de959be7dfb7d33eb81cde1ab72209639aa99 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Aug 7 16:15:21 2012 +0100 we need to escape xml on export Change-Id: I770e4e6b3b77892c3fe1ba1e55f3e6d5834dc6b7 diff --git a/l10ntools/source/uimerge.cxx b/l10ntools/source/uimerge.cxx index cd7443e..7334b40 100644 --- a/l10ntools/source/uimerge.cxx +++ b/l10ntools/source/uimerge.cxx @@ -9,6 +9,8 @@ #include <sal/main.h> +#include <rtl/strbuf.hxx> + #include <libxslt/transform.h> #include <libxslt/xslt.h> #include <libxslt/xsltutils.h> @@ -166,6 +168,52 @@ int extractTranslations() return 0; } +namespace +{ + rtl::OString QuotHTML(const rtl::OString &rString) + { + rtl::OStringBuffer sReturn; + for (sal_Int32 i = 0; i < rString.getLength(); ++i) { + switch (rString[i]) { + case '\\': + if (i < rString.getLength()) { + switch (rString[i + 1]) { + case '"': + case '<': + case '>': + case '\\': + ++i; + break; + } + } + // fall through + default: + sReturn.append(rString[i]); + break; + + case '<': + sReturn.append("<"); + break; + + case '>': + sReturn.append(">"); + break; + + case '"': + sReturn.append("""); + break; + + case '&': + if (rString.matchL(RTL_CONSTASCII_STRINGPARAM("&"), i)) + sReturn.append('&'); + else + sReturn.append(RTL_CONSTASCII_STRINGPARAM("&")); + break; + } + } + return sReturn.makeStringAndClear(); + } +} bool Merge( const rtl::OString &rSDFFile, @@ -211,7 +259,7 @@ bool Merge( aDestination << " <e " << "g=\"" << aI->second->sGID.getStr() << "\" " << "i=\"" << aI->second->sLID.getStr() << "\">" - << sOut.getStr() << "</e>\n"; + << QuotHTML(sOut).getStr() << "</e>\n"; } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits