l10ntools/inc/po.hxx | 4 +- l10ntools/source/po.cxx | 92 ++++++++++++++++++------------------------------ 2 files changed, 38 insertions(+), 58 deletions(-)
New commits: commit 6c03bb4ab1e954e246c57db6f474c56e10763d9a Author: Zolnai Tamás <[email protected]> Date: Wed Aug 29 12:42:11 2012 +0200 Improve KeyId generation Move KeyId from PoEntry to GenPoEntry to make these classes more separated. Replace crc24 with crc32 (boost/crc). Extend KeyId's charset to [33,126] intervallum of ASCII Change-Id: If761a572e2a2651af3eab253a1582569ea68e440 Reviewed-on: https://gerrit.libreoffice.org/509 Reviewed-by: Andras Timar <[email protected]> Tested-by: Andras Timar <[email protected]> diff --git a/l10ntools/inc/po.hxx b/l10ntools/inc/po.hxx index fddd907..3330afb 100644 --- a/l10ntools/inc/po.hxx +++ b/l10ntools/inc/po.hxx @@ -44,6 +44,7 @@ private: OString m_sUnTransStr; OString m_sTransStr; bool m_bFuzzy; + OString m_sKeyId; public: GenPoEntry(); @@ -63,7 +64,7 @@ public: { m_sTransStr = rTransStr; } virtual void setFuzzy(bool bFuzzy) { m_bFuzzy = bFuzzy; } - + virtual void genKeyId(); virtual void writeToFile(std::ofstream& io_rOFStream); }; @@ -82,7 +83,6 @@ private: OString m_sResourceType; TYPE m_eType; OString m_sHelpText; - OString m_sKeyId; public: diff --git a/l10ntools/source/po.cxx b/l10ntools/source/po.cxx index 9bedf4d..c488c87 100644 --- a/l10ntools/source/po.cxx +++ b/l10ntools/source/po.cxx @@ -29,12 +29,29 @@ #include "po.hxx" #include <ctime> #include <vector> +#include <boost/crc.hpp> #define POESCAPED OString("\\n\\t\\r\\\\\\\"") #define POUNESCAPED OString("\n\t\r\\\"") //Class GenPoEntry +//Generate KeyId +OString ImplGenKeyId(const OString& rGenerator) +{ + boost::crc_32_type aCRC32; + aCRC32.process_bytes(rGenerator.getStr(), rGenerator.getLength()); + sal_uInt32 nCRC = aCRC32.checksum(); + OString sKeyId = ""; + while ( sKeyId.getLength() < 4 ) + { + //Concat a char from the [33,126] intervallum of ASCII + sKeyId += OString(char(int(double(nCRC & 255)/255*93)+33)); + nCRC >>= 8; + } + return sKeyId; +} + //Escape text OString ImplEscapeText(const OString& rText, const OString& rUnEscaped= POUNESCAPED, @@ -101,6 +118,7 @@ GenPoEntry::GenPoEntry() , m_sUnTransStr( OString() ) , m_sTransStr( OString() ) , m_bFuzzy( false ) + , m_sKeyId( OString() ) { } @@ -109,15 +127,21 @@ GenPoEntry::~GenPoEntry() { } +//Set keyid +void GenPoEntry::genKeyId() +{ + m_sKeyId = ImplGenKeyId(m_sReference + m_sContext + m_sUnTransStr); +} + //Write to file void GenPoEntry::writeToFile(std::ofstream& io_rOFStream) { if ( !m_sWhiteSpace.isEmpty() ) io_rOFStream << m_sWhiteSpace.getStr(); if ( !m_sExtractCom.isEmpty() ) - io_rOFStream << "#. " - << m_sExtractCom.replaceAll("\n","\n#. ").getStr() - << std::endl; + io_rOFStream << "#. " << m_sExtractCom.getStr() << std::endl; + if ( !m_sKeyId.isEmpty() ) + io_rOFStream << "#. " << m_sKeyId.getStr() << std::endl; if ( !m_sReference.isEmpty() ) io_rOFStream << "#: " << m_sReference.getStr() << std::endl; if ( m_bFuzzy ) @@ -125,14 +149,12 @@ void GenPoEntry::writeToFile(std::ofstream& io_rOFStream) if ( !m_sContext.isEmpty() ) io_rOFStream << "msgctxt " << ImplGenMsgString(m_sContext).getStr() << std::endl; - io_rOFStream << "msgid " - << ImplGenMsgString( - ImplEscapeText(m_sUnTransStr)).getStr() - << std::endl; - io_rOFStream << "msgstr " - << ImplGenMsgString( - ImplEscapeText(m_sTransStr)).getStr() - << std::endl; + io_rOFStream << "msgid " + << ImplGenMsgString(ImplEscapeText(m_sUnTransStr)).getStr() + << std::endl; + io_rOFStream << "msgstr " + << ImplGenMsgString(ImplEscapeText(m_sTransStr)).getStr() + << std::endl; } //Class PoEntry @@ -156,48 +178,7 @@ void ImplSplitAt(const OString& rSource, const sal_Int32 nDelimiter, o_vParts.push_back(rSource.copy(nLastSplit)); } -//Generate crc24 -sal_Int32 ImplGenCRC24(const OString& rKey) -{ - const sal_Int32 CRC24_INIT = 0x00b704ce; - const sal_Int32 CRC24_POLY = 0x00864cfb; - sal_Int32 nCRC = CRC24_INIT; - sal_Int32 nPosition = 0; - while ( nPosition < rKey.getLength() ) - { - nCRC ^= sal_Int32(rKey[nPosition]) << 16; - for (sal_uInt16 i = 0; i < 8; ++i) - { - nCRC <<= 1; - if (nCRC & 0x01000000) - nCRC ^= CRC24_POLY; - } - ++nPosition; - } - return nCRC & 0x00ffffff; -} - -//Generate KeyId -OString ImplGenKeyId(const OString& rSourcePath, const OString& rContext) -{ - std::vector<OString> vPathParts; - ImplSplitAt(rSourcePath,'\\',vPathParts); - if ( vPathParts.size()<3 ) throw; - - sal_Int32 nCRC = ImplGenCRC24( vPathParts[vPathParts.size()-3] + "_" + - vPathParts[vPathParts.size()-2] + "_" + - vPathParts[vPathParts.size()-1] + "_" + - rContext); - const OString sSymbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#_"; - OString sKeyId = ""; - while ( sKeyId.getLength() < 4 ) - { - sKeyId += sSymbols.copy(nCRC & 63, 1); - nCRC >>= 6; - } - return sKeyId; -} //Construct PoEntry from sdfline PoEntry::PoEntry(const OString& rSDFLine, const TYPE eType) @@ -206,7 +187,6 @@ PoEntry::PoEntry(const OString& rSDFLine, const TYPE eType) , m_sLocalId( OString() ) , m_sResourceType(OString() ) , m_eType( TTEXT ) - , m_sKeyId( OString() ) { setWhiteSpace("\n"); std::vector<OString> vParts; @@ -236,13 +216,13 @@ PoEntry::PoEntry(const OString& rSDFLine, const TYPE eType) throw; break; } setContext(sContext); - m_sKeyId = ImplGenKeyId(vParts[PROJECT] + "\\" + vParts[SOURCEFILE], - sContext); - setExtractCom((m_sHelpText.isEmpty() ? "" : m_sHelpText + "\n") + m_sKeyId); + setExtractCom(m_sHelpText); setUnTransStr(vParts[eType]); + genKeyId(); } +//Destructor PoEntry::~PoEntry() { }
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
