summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-05-12 12:49:53 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-05-13 10:58:26 +0200
commit8ad920befe1290c40ef762e8d7d9797b1924f5d2 (patch)
treea14719028570609c8f1b4337b8fd090fcdd93f59 /starmath
parent388bed014ad19a23fa9879bc31a8088f34157a48 (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.hxx6
-rw-r--r--starmath/inc/token.hxx34
-rw-r--r--starmath/source/mathml/export.cxx18
-rw-r--r--starmath/source/mathml/mathmlexport.cxx3
-rw-r--r--starmath/source/mathml/starmathdatabase.cxx19
-rw-r--r--starmath/source/parse5.cxx6
-rw-r--r--starmath/source/visitors.cxx4
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);