diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-05-12 12:49:53 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-05-13 10:58:26 +0200 |
commit | 8ad920befe1290c40ef762e8d7d9797b1924f5d2 (patch) | |
tree | a14719028570609c8f1b4337b8fd090fcdd93f59 /starmath | |
parent | 388bed014ad19a23fa9879bc31a8088f34157a48 (diff) |
tdf#121740 reduce cost of mathml parsing
by re-using OUString instances instead of allocating new ones for each
SmToken
Change-Id: Ia897427d6c1ffeb0e741dea90fde1f4d56a70175
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134264
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/inc/mathml/starmathdatabase.hxx | 6 | ||||
-rw-r--r-- | starmath/inc/token.hxx | 34 | ||||
-rw-r--r-- | starmath/source/mathml/export.cxx | 18 | ||||
-rw-r--r-- | starmath/source/mathml/mathmlexport.cxx | 3 | ||||
-rw-r--r-- | starmath/source/mathml/starmathdatabase.cxx | 19 | ||||
-rw-r--r-- | starmath/source/parse5.cxx | 6 | ||||
-rw-r--r-- | starmath/source/visitors.cxx | 4 |
7 files changed, 44 insertions, 46 deletions
diff --git a/starmath/inc/mathml/starmathdatabase.hxx b/starmath/inc/mathml/starmathdatabase.hxx index 3a4e939973d9..b4d3d6d3f8b5 100644 --- a/starmath/inc/mathml/starmathdatabase.hxx +++ b/starmath/inc/mathml/starmathdatabase.hxx @@ -302,7 +302,7 @@ SmColorTokenTableEntry Identify_Color_DVIPSNAMES(sal_uInt32 cColor); * @param cColor * @param parser color */ -const SmColorTokenTableEntry* Identify_ColorName_Parser(const OUString& colorname); +const SmColorTokenTableEntry* Identify_ColorName_Parser(std::u16string_view colorname); /** * Identifies color from color name. @@ -315,7 +315,7 @@ const SmColorTokenTableEntry* Identify_ColorName_Parser(const OUString& colornam * @param cColor * @param parser color */ -SmColorTokenTableEntry Identify_ColorName_HTML(const OUString& colorname); +SmColorTokenTableEntry Identify_ColorName_HTML(std::u16string_view colorname); /** * Identifies color from color name. @@ -326,7 +326,7 @@ SmColorTokenTableEntry Identify_ColorName_HTML(const OUString& colorname); * @param cColor * @param parser color */ -const SmColorTokenTableEntry* Identify_ColorName_DVIPSNAMES(const OUString& colorname); +const SmColorTokenTableEntry* Identify_ColorName_DVIPSNAMES(std::u16string_view colorname); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/starmath/inc/token.hxx b/starmath/inc/token.hxx index 86ee287d51c8..d3e141e5adb9 100644 --- a/starmath/inc/token.hxx +++ b/starmath/inc/token.hxx @@ -29,6 +29,7 @@ #pragma once #include <tools/color.hxx> +#include <o3tl/string_view.hxx> #include <o3tl/typed_flags_set.hxx> // std imports @@ -148,7 +149,7 @@ enum SmTokenType struct SmTokenTableEntry { - std::u16string_view pIdent; + OUString aIdent; SmTokenType eType; sal_Unicode cMathChar; TG nGroup; @@ -157,48 +158,47 @@ struct SmTokenTableEntry struct SmColorTokenTableEntry { - const char* pIdent; + OUString aIdent; SmTokenType eType; Color cColor; SmColorTokenTableEntry() - : pIdent("") - , eType(TERROR) + : eType(TERROR) , cColor() { } SmColorTokenTableEntry(const SmColorTokenTableEntry* amColorTokenTableEntry) - : pIdent(amColorTokenTableEntry->pIdent) + : aIdent(amColorTokenTableEntry->aIdent) , eType(amColorTokenTableEntry->eType) , cColor(amColorTokenTableEntry->cColor) { } SmColorTokenTableEntry(const std::unique_ptr<SmColorTokenTableEntry> amColorTokenTableEntry) - : pIdent(amColorTokenTableEntry->pIdent) + : aIdent(amColorTokenTableEntry->aIdent) , eType(amColorTokenTableEntry->eType) , cColor(amColorTokenTableEntry->cColor) { } - SmColorTokenTableEntry(const char* name, SmTokenType ctype, Color ncolor) - : pIdent(name) + SmColorTokenTableEntry(const OUString& name, SmTokenType ctype, Color ncolor) + : aIdent(name) , eType(ctype) , cColor(ncolor) { } - SmColorTokenTableEntry(const char* name, SmTokenType ctype, sal_uInt32 ncolor) - : pIdent(name) + SmColorTokenTableEntry(const OUString& name, SmTokenType ctype, sal_uInt32 ncolor) + : aIdent(name) , eType(ctype) , cColor(ColorTransparency, ncolor) { } - bool equals(const OUString& colorname) const + bool equals(std::u16string_view colorname) const { - return colorname.compareToIgnoreAsciiCaseAscii(pIdent) == 0; + return o3tl::compareToIgnoreAsciiCase(colorname, aIdent) == 0; } bool equals(sal_uInt32 colorcode) const { return colorcode == static_cast<sal_uInt32>(cColor); } @@ -224,9 +224,9 @@ struct SmToken { } - SmToken(SmTokenType eTokenType, sal_Unicode cMath, const char* pText, TG nTokenGroup = TG::NONE, - sal_uInt16 nTokenLevel = 0) - : aText(OUString::createFromAscii(pText)) + SmToken(SmTokenType eTokenType, sal_Unicode cMath, const OUString& rText, + TG nTokenGroup = TG::NONE, sal_uInt16 nTokenLevel = 0) + : aText(rText) , eType(eTokenType) , cMathChar(cMath) , nGroup(nTokenGroup) @@ -236,7 +236,7 @@ struct SmToken void operator=(const SmTokenTableEntry& aTokenTableEntry) { - aText = aTokenTableEntry.pIdent; + aText = aTokenTableEntry.aIdent; eType = aTokenTableEntry.eType; cMathChar = OUString(&aTokenTableEntry.cMathChar, 1); nGroup = aTokenTableEntry.nGroup; @@ -245,7 +245,7 @@ struct SmToken void operator=(const SmTokenTableEntry* aTokenTableEntry) { - aText = aTokenTableEntry->pIdent; + aText = aTokenTableEntry->aIdent; eType = aTokenTableEntry->eType; cMathChar = OUString(&aTokenTableEntry->cMathChar, 1); nGroup = aTokenTableEntry->nGroup; diff --git a/starmath/source/mathml/export.cxx b/starmath/source/mathml/export.cxx index 7115e7a1a8f3..ab737c125491 100644 --- a/starmath/source/mathml/export.cxx +++ b/starmath/source/mathml/export.cxx @@ -785,11 +785,10 @@ void SmMLExport::exportMlAttributes(const SmMlElement* pMlElement) break; case SmMlAttributeValueMathbackground::MlRgb: { - OUString aTextColor - = OUString::createFromAscii(starmathdatabase::Identify_Color_MATHML( - sal_uInt32(aAttributeValue->m_aCol)) - .pIdent); - addAttribute(XML_MATHBACKGROUND, aTextColor); + const OUString& rTextColor = starmathdatabase::Identify_Color_MATHML( + sal_uInt32(aAttributeValue->m_aCol)) + .aIdent; + addAttribute(XML_MATHBACKGROUND, rTextColor); break; } default: @@ -807,11 +806,10 @@ void SmMLExport::exportMlAttributes(const SmMlElement* pMlElement) break; case SmMlAttributeValueMathcolor::MlRgb: { - OUString aTextColor - = OUString::createFromAscii(starmathdatabase::Identify_Color_MATHML( - sal_uInt32(aAttributeValue->m_aCol)) - .pIdent); - addAttribute(XML_MATHCOLOR, aTextColor); + const OUString& rTextColor = starmathdatabase::Identify_Color_MATHML( + sal_uInt32(aAttributeValue->m_aCol)) + .aIdent; + addAttribute(XML_MATHCOLOR, rTextColor); break; } default: diff --git a/starmath/source/mathml/mathmlexport.cxx b/starmath/source/mathml/mathmlexport.cxx index 142ba6fd665c..0fb2573b5b80 100644 --- a/starmath/source/mathml/mathmlexport.cxx +++ b/starmath/source/mathml/mathmlexport.cxx @@ -1142,8 +1142,7 @@ void SmXMLExport::ExportFont(const SmNode* pNode, int nLevel) case TMATHMLCOL: { nc = pNode->GetToken().cMathChar.toUInt32(16); - OUString sssStr - = OUString::createFromAscii(starmathdatabase::Identify_Color_MATHML(nc).pIdent); + const OUString& sssStr = starmathdatabase::Identify_Color_MATHML(nc).aIdent; AddAttribute(XML_NAMESPACE_MATH, XML_MATHCOLOR, sssStr); } break; diff --git a/starmath/source/mathml/starmathdatabase.cxx b/starmath/source/mathml/starmathdatabase.cxx index d52a5fa37cdc..66bdf3f3400c 100644 --- a/starmath/source/mathml/starmathdatabase.cxx +++ b/starmath/source/mathml/starmathdatabase.cxx @@ -743,13 +743,14 @@ SmColorTokenTableEntry starmathdatabase::Identify_Color_DVIPSNAMES(sal_uInt32 cC return SmColorTokenTableEntry("", TRGBA, cColor); } -const SmColorTokenTableEntry* starmathdatabase::Identify_ColorName_Parser(const OUString& colorname) +const SmColorTokenTableEntry* +starmathdatabase::Identify_ColorName_Parser(std::u16string_view colorname) { - if (colorname.isEmpty()) + if (colorname.empty()) return &aColorTokenTableERROR[0]; for (auto i = std::begin(aColorTokenTableParse); i < std::end(aColorTokenTableParse); ++i) { - sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent); + sal_Int32 matches = o3tl::compareToIgnoreAsciiCase(colorname, i->aIdent); if (matches == 0) return i; if (matches < 0) @@ -757,9 +758,9 @@ const SmColorTokenTableEntry* starmathdatabase::Identify_ColorName_Parser(const } return &aColorTokenTableERROR[0]; } -SmColorTokenTableEntry starmathdatabase::Identify_ColorName_HTML(const OUString& colorname) +SmColorTokenTableEntry starmathdatabase::Identify_ColorName_HTML(std::u16string_view colorname) { - if (colorname.isEmpty()) + if (colorname.empty()) return SmColorTokenTableEntry("", TERROR, COL_SM_BLACK); if (colorname[0] == '#') { @@ -768,7 +769,7 @@ SmColorTokenTableEntry starmathdatabase::Identify_ColorName_HTML(const OUString& } for (auto i = std::begin(aColorTokenTableHTML); i < std::end(aColorTokenTableHTML); ++i) { - sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent); + sal_Int32 matches = o3tl::compareToIgnoreAsciiCase(colorname, i->aIdent); if (matches == 0) return i; if (matches < 0) @@ -777,13 +778,13 @@ SmColorTokenTableEntry starmathdatabase::Identify_ColorName_HTML(const OUString& return SmColorTokenTableEntry("", TERROR, COL_SM_BLACK); } const SmColorTokenTableEntry* -starmathdatabase::Identify_ColorName_DVIPSNAMES(const OUString& colorname) +starmathdatabase::Identify_ColorName_DVIPSNAMES(std::u16string_view colorname) { - if (colorname.isEmpty()) + if (colorname.empty()) return &aColorTokenTableERROR[0]; for (auto i = std::begin(aColorTokenTableDVIPS); i < std::end(aColorTokenTableDVIPS); ++i) { - sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent); + sal_Int32 matches = o3tl::compareToIgnoreAsciiCase(colorname, i->aIdent); if (matches == 0) return i; if (matches < 0) diff --git a/starmath/source/parse5.cxx b/starmath/source/parse5.cxx index 06c2f0c0dc1e..1bc218f646f0 100644 --- a/starmath/source/parse5.cxx +++ b/starmath/source/parse5.cxx @@ -288,7 +288,7 @@ const sal_Int32 coUserDefinedCharContFlags = KParseTokens::ANY_LETTER_OR_NUMBER //Checks if keyword is in the list. static inline bool findCompare(const SmTokenTableEntry& lhs, const OUString& s) { - return s.compareToIgnoreAsciiCase(lhs.pIdent) > 0; + return s.compareToIgnoreAsciiCase(lhs.aIdent) > 0; } //Returns the SmTokenTableEntry for a keyword @@ -299,7 +299,7 @@ static const SmTokenTableEntry* GetTokenTableEntry(const OUString& rName) //Looks for the first keyword after or equal to rName in alphabetical order. auto findIter = std::lower_bound(std::begin(aTokenTable), std::end(aTokenTable), rName, findCompare); - if (findIter != std::end(aTokenTable) && rName.equalsIgnoreAsciiCase(findIter->pIdent)) + if (findIter != std::end(aTokenTable) && rName.equalsIgnoreAsciiCase(findIter->aIdent)) return &*findIter; //check is equal return nullptr; //not found } @@ -490,7 +490,7 @@ void SmParser5::NextToken() //Central part of the parser m_aCurToken.setChar(pEntry->cMathChar); m_aCurToken.nGroup = pEntry->nGroup; m_aCurToken.nLevel = pEntry->nLevel; - m_aCurToken.aText = pEntry->pIdent; + m_aCurToken.aText = pEntry->aIdent; } else { diff --git a/starmath/source/visitors.cxx b/starmath/source/visitors.cxx index e84619f2a4e9..980c6346ca80 100644 --- a/starmath/source/visitors.cxx +++ b/starmath/source/visitors.cxx @@ -2164,14 +2164,14 @@ void SmNodeToTextVisitor::Visit( SmFontNode* pNode ) case TDVIPSNAMESCOL: Append(u"color dvip "); nc = pNode->GetToken().cMathChar.toUInt32(16); - Append( starmathdatabase::Identify_Color_Parser( nc ).pIdent ); + Append( starmathdatabase::Identify_Color_Parser( nc ).aIdent ); break; case THTMLCOL: case TMATHMLCOL: case TICONICCOL: Append(u"color "); nc = pNode->GetToken().cMathChar.toUInt32(16); - Append( starmathdatabase::Identify_Color_Parser( nc ).pIdent ); + Append( starmathdatabase::Identify_Color_Parser( nc ).aIdent ); break; case TRGB: nc = pNode->GetToken().cMathChar.toUInt32(16); |