[Libreoffice-commits] core.git: starmath/inc starmath/source
Takeshi Abe
tabe at fixedpoint.jp
Fri Jan 20 02:26:23 UTC 2017
starmath/inc/parse.hxx | 8 +++++---
starmath/source/parse.cxx | 25 ++++++++++---------------
2 files changed, 15 insertions(+), 18 deletions(-)
New commits:
commit cef8ebe925bde6fc1889085e3ccb1be236791e99
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date: Fri Dec 23 01:13:05 2016 +0900
starmath: Avoid ad hoc LanguageTag and CharClass at tokenization
Instead, keep them as SmParser's members.
Change-Id: I8a2aad7ba8baaad9a761f42f62d51fc67cadec07
Reviewed-on: https://gerrit.libreoffice.org/32348
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Takeshi Abe <tabe at fixedpoint.jp>
diff --git a/starmath/inc/parse.hxx b/starmath/inc/parse.hxx
index d22a426..76d602f 100644
--- a/starmath/inc/parse.hxx
+++ b/starmath/inc/parse.hxx
@@ -19,7 +19,7 @@
#ifndef INCLUDED_STARMATH_INC_PARSE_HXX
#define INCLUDED_STARMATH_INC_PARSE_HXX
-#include <com/sun/star/lang/Locale.hpp>
+#include <unotools/charclass.hxx>
#include <memory>
#include <set>
#include <vector>
@@ -46,8 +46,10 @@ class SmParser
// map of used symbols (used to reduce file size by exporting only actually used symbols)
std::set< OUString > m_aUsedSymbols;
- //! locale where '.' is decimal separator!
- css::lang::Locale m_aDotLoc;
+ // CharClass representing a locale for parsing numbers
+ CharClass m_aNumCC;
+ // pointer to System locale's CharClass, which is alive inside SM_MOD()
+ const CharClass* m_pSysCC;
SmParser(const SmParser&) = delete;
SmParser& operator=(const SmParser&) = delete;
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index f33a942..1d0129a 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -19,7 +19,6 @@
#include <com/sun/star/i18n/UnicodeType.hpp>
#include <i18nlangtag/lang.h>
-#include <unotools/charclass.hxx>
#include <editeng/unolingu.hxx>
#include <unotools/syslocale.hxx>
#include <sal/macros.h>
@@ -379,29 +378,25 @@ void SmParser::NextToken()
ParseResult aRes;
sal_Int32 nRealStart;
bool bCont;
- CharClass aCC(SM_MOD()->GetSysLocale().GetLanguageTag());
do
{
// skip white spaces
while (UnicodeType::SPACE_SEPARATOR ==
- aCC.getType( m_aBufferString, m_nBufferIndex ))
+ m_pSysCC->getType( m_aBufferString, m_nBufferIndex ))
++m_nBufferIndex;
- // Try to parse a number. This should be independent from the locale
- // setting, so temporarily set the language to English.
+ // Try to parse a number in a locale-independent manner using
+ // '.' as decimal separator.
// See https://bz.apache.org/ooo/show_bug.cgi?id=45779
- LanguageTag aOldLoc(aCC.getLanguageTag());
- aCC.setLanguageTag(LanguageTag(m_aDotLoc));
- aRes = aCC.parsePredefinedToken(KParseType::ASC_NUMBER,
+ aRes = m_aNumCC.parsePredefinedToken(KParseType::ASC_NUMBER,
m_aBufferString, m_nBufferIndex,
coNumStartFlags, "",
coNumContFlags, "");
- aCC.setLanguageTag(aOldLoc);
if (aRes.TokenType == 0)
{
// Try again with the default token parsing.
- aRes = aCC.parseAnyToken(m_aBufferString, m_nBufferIndex,
+ aRes = m_pSysCC->parseAnyToken(m_aBufferString, m_nBufferIndex,
coStartFlags, "",
coContFlags, "");
}
@@ -454,7 +449,7 @@ void SmParser::NextToken()
assert(aRes.EndPos > 0);
if ( m_aBufferString[aRes.EndPos-1] == ',' &&
aRes.EndPos < nBufLen &&
- aCC.getType( m_aBufferString, aRes.EndPos ) != UnicodeType::SPACE_SEPARATOR )
+ m_pSysCC->getType( m_aBufferString, aRes.EndPos ) != UnicodeType::SPACE_SEPARATOR )
{
// Comma followed by a non-space char is unlikely for decimal/thousands separator.
--aRes.EndPos;
@@ -639,7 +634,7 @@ void SmParser::NextToken()
"unexpected comment start" );
// get identifier of user-defined character
- ParseResult aTmpRes = aCC.parseAnyToken(
+ ParseResult aTmpRes = m_pSysCC->parseAnyToken(
m_aBufferString, rnEndPos,
KParseTokens::ANY_LETTER,
"",
@@ -1374,7 +1369,6 @@ void SmParser::DoTerm(bool bGroupNumberIdent)
// See https://bz.apache.org/ooo/show_bug.cgi?id=11752 and
// https://bugs.libreoffice.org/show_bug.cgi?id=55853
sal_Int32 nBufLen = m_aBufferString.getLength();
- CharClass aCC(SM_MOD()->GetSysLocale().GetLanguageTag());
sal_Int32 nTokens = 1;
// We need to be careful to call NextToken() only after having
@@ -1382,7 +1376,7 @@ void SmParser::DoTerm(bool bGroupNumberIdent)
// skipped!)
bool moveToNextToken = true;
while (m_nBufferIndex < nBufLen &&
- aCC.getType(m_aBufferString, m_nBufferIndex) !=
+ m_pSysCC->getType(m_aBufferString, m_nBufferIndex) !=
UnicodeType::SPACE_SEPARATOR)
{
NextToken();
@@ -2295,7 +2289,8 @@ SmParser::SmParser()
, m_nColOff( 0 )
, m_bImportSymNames( false )
, m_bExportSymNames( false )
- , m_aDotLoc( LanguageTag::convertToLocale( LANGUAGE_ENGLISH_US ) )
+ , m_aNumCC( LanguageTag( LANGUAGE_ENGLISH_US ) )
+ , m_pSysCC( SM_MOD()->GetSysLocale().GetCharClassPtr() )
{
}
More information about the Libreoffice-commits
mailing list