summaryrefslogtreecommitdiff
path: root/starmath/source
diff options
context:
space:
mode:
authorKhaled Hosny <khaled@libreoffice.org>2023-09-21 12:20:07 +0300
committerخالد حسني <khaled@libreoffice.org>2023-09-21 12:33:19 +0200
commit7de4c6b95da7d187c403ee478786bb74467c1eb5 (patch)
treec28bc64001061720a7ee89c7a7bd40e420fe0185 /starmath/source
parentcfe9c68a7a19dd77d1fcbde3a7dd75730634becc (diff)
tdf#62174: Fix saving of localized iGreek symbols
When saving symbols we use the non-localized name, but iGreek symbols are a bit of a hack since they are added at runtime and don’t have localizations of there own but use the Greek symbols names with an “i” prefix. Instead of looking directly for localized names, we now go through the symbol manager that already knows about iGreek and use the export name of the symbol. We have to also make sure the iGreek symbols has non-localized export name. Change-Id: Ia3e38579abba56ae12ade126f564f8c6f9c3229a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157137 Tested-by: Jenkins Reviewed-by: خالد حسني <khaled@libreoffice.org>
Diffstat (limited to 'starmath/source')
-rw-r--r--starmath/source/dialog.cxx8
-rw-r--r--starmath/source/node.cxx6
-rw-r--r--starmath/source/parse5.cxx18
-rw-r--r--starmath/source/symbol.cxx35
4 files changed, 44 insertions, 23 deletions
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx
index 8625072c90e8..c5e38f6cb684 100644
--- a/starmath/source/dialog.cxx
+++ b/starmath/source/dialog.cxx
@@ -1544,7 +1544,7 @@ void SmSymDefineDialog::FillStyles()
SmSym* SmSymDefineDialog::GetSymbol(const weld::ComboBox& rComboBox)
{
assert((&rComboBox == m_xOldSymbols.get() || &rComboBox == m_xSymbols.get()) && "Sm : wrong combobox");
- return m_aSymbolMgrCopy.GetSymbolByName(rComboBox.get_active_text());
+ return m_aSymbolMgrCopy.GetSymbolByUiName(rComboBox.get_active_text());
}
IMPL_LINK(SmSymDefineDialog, OldSymbolChangeHdl, weld::ComboBox&, rComboBox, void)
@@ -1652,7 +1652,7 @@ IMPL_LINK( SmSymDefineDialog, AddClickHdl, weld::Button&, rButton, void )
// add symbol
const SmSym aNewSymbol(m_xSymbols->get_active_text(), m_xCharsetDisplay->GetFont(),
m_xCharsetDisplay->GetSelectCharacter(), m_xSymbolSets->get_active_text());
- //OSL_ENSURE( m_aSymbolMgrCopy.GetSymbolByName(aTmpSymbolName) == NULL, "symbol already exists" );
+ //OSL_ENSURE( m_aSymbolMgrCopy.GetSymbolByUiName(aTmpSymbolName) == NULL, "symbol already exists" );
m_aSymbolMgrCopy.AddOrReplaceSymbol( aNewSymbol );
// update display of new symbol
@@ -1750,7 +1750,7 @@ void SmSymDefineDialog::UpdateButtons()
&& m_xCharsetDisplay->GetSelectCharacter() == m_xOrigSymbol->GetCharacter();
// only add it if there isn't already a symbol with the same name
- bAdd = m_aSymbolMgrCopy.GetSymbolByName(aTmpSymbolName) == nullptr;
+ bAdd = m_aSymbolMgrCopy.GetSymbolByUiName(aTmpSymbolName) == nullptr;
// only delete it if all settings are equal
bDelete = bool(m_xOrigSymbol);
@@ -1982,7 +1982,7 @@ bool SmSymDefineDialog::SelectSymbol(weld::ComboBox& rComboBox,
OUString aTmpOldSymbolSetName;
if (nPos != -1)
{
- pOldSymbol = m_aSymbolMgrCopy.GetSymbolByName(aNormName);
+ pOldSymbol = m_aSymbolMgrCopy.GetSymbolByUiName(aNormName);
aTmpOldSymbolSetName = m_xOldSymbolSets->get_active_text();
}
SetOrigSymbol(pOldSymbol, aTmpOldSymbolSetName);
diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx
index 01b14c177e43..b0b91dabe99e 100644
--- a/starmath/source/node.cxx
+++ b/starmath/source/node.cxx
@@ -2155,8 +2155,7 @@ static bool lcl_IsFromGreekSymbolSet( std::u16string_view aTokenText )
// valid symbol name needs to have a '%' at pos 0 and at least an additional char
if (aTokenText.size() > 2 && aTokenText[0] == u'%')
{
- OUString aName( aTokenText.substr(1) );
- SmSym *pSymbol = SM_MOD()->GetSymbolManager().GetSymbolByName( aName );
+ SmSym *pSymbol = SM_MOD()->GetSymbolManager().GetSymbolByName(aTokenText.substr(1));
if (pSymbol && SmLocalizedSymbolData::GetExportSymbolSetName(pSymbol->GetSymbolSetName()) == "Greek")
bRes = true;
}
@@ -2186,8 +2185,7 @@ void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell
const SmSym *pSym;
SmModule *pp = SM_MOD();
- OUString aName(GetToken().aText.copy(1));
- if (nullptr != (pSym = pp->GetSymbolManager().GetSymbolByName( aName )))
+ if (nullptr != (pSym = pp->GetSymbolManager().GetSymbolByName(GetToken().aText.subView(1))))
{
sal_UCS4 cChar = pSym->GetCharacter();
OUString aTmp( &cChar, 1 );
diff --git a/starmath/source/parse5.cxx b/starmath/source/parse5.cxx
index 04c4702683b1..27c2471e7418 100644
--- a/starmath/source/parse5.cxx
+++ b/starmath/source/parse5.cxx
@@ -29,6 +29,7 @@
#include <parse5.hxx>
#include <strings.hrc>
#include <smmod.hxx>
+#include <symbol.hxx>
#include <cfgitem.hxx>
#include <starmathdatabase.hxx>
@@ -2632,13 +2633,22 @@ std::unique_ptr<SmSpecialNode> SmParser5::DoSpecial()
{
if (IsImportSymbolNames())
{
- aNewName = SmLocalizedSymbolData::GetUiSymbolName(rName.subView(1));
- bReplace = true;
+ const SmSym* pSym
+ = SM_MOD()->GetSymbolManager().GetSymbolByExportName(rName.subView(1));
+ if (pSym)
+ {
+ aNewName = pSym->GetName();
+ bReplace = true;
+ }
}
else if (IsExportSymbolNames())
{
- aNewName = SmLocalizedSymbolData::GetExportSymbolName(rName.subView(1));
- bReplace = true;
+ const SmSym* pSym = SM_MOD()->GetSymbolManager().GetSymbolByUiName(rName.subView(1));
+ if (pSym)
+ {
+ aNewName = pSym->GetExportName();
+ bReplace = true;
+ }
}
}
if (!aNewName.isEmpty())
diff --git a/starmath/source/symbol.cxx b/starmath/source/symbol.cxx
index a75b6a912670..5f81d0151d9a 100644
--- a/starmath/source/symbol.cxx
+++ b/starmath/source/symbol.cxx
@@ -120,23 +120,35 @@ SmSymbolManager& SmSymbolManager::operator = (const SmSymbolManager& rSymbolSetM
return *this;
}
+SmSym* SmSymbolManager::GetSymbolByName(std::u16string_view rSymbolName)
+{
+ SmSym* pRes = GetSymbolByUiName(rSymbolName);
+ if (!pRes)
+ pRes = GetSymbolByExportName(rSymbolName);
+ return pRes;
+}
-SmSym *SmSymbolManager::GetSymbolByName(const OUString& rSymbolName)
+SmSym *SmSymbolManager::GetSymbolByUiName(std::u16string_view rSymbolName)
{
+ OUString aSymbolName(rSymbolName);
SmSym *pRes = nullptr;
- SymbolMap_t::iterator aIt( m_aSymbols.find( rSymbolName ) );
+ SymbolMap_t::iterator aIt( m_aSymbols.find( aSymbolName ) );
if (aIt != m_aSymbols.end())
pRes = &aIt->second;
- else
+ return pRes;
+}
+
+SmSym* SmSymbolManager::GetSymbolByExportName(std::u16string_view rSymbolName)
+{
+ OUString aSymbolName(rSymbolName);
+ SmSym* pRes = nullptr;
+ for (auto& rPair : m_aSymbols)
{
- for (auto& rPair : m_aSymbols)
+ SmSym& rSymbol = rPair.second;
+ if (rSymbol.GetExportName() == aSymbolName)
{
- SmSym& rSymbol = rPair.second;
- if (rSymbol.GetExportName() == rSymbolName)
- {
- pRes = &rSymbol;
- break;
- }
+ pRes = &rSymbol;
+ break;
}
}
return pRes;
@@ -161,7 +173,7 @@ bool SmSymbolManager::AddOrReplaceSymbol( const SmSym &rSymbol, bool bForceChang
const OUString& aSymbolName( rSymbol.GetName() );
if (!aSymbolName.isEmpty() && !rSymbol.GetSymbolSetName().isEmpty())
{
- const SmSym *pFound = GetSymbolByName( aSymbolName );
+ const SmSym *pFound = GetSymbolByUiName( aSymbolName );
const bool bSymbolConflict = pFound && !pFound->IsEqualInUI( rSymbol );
// avoid having the same symbol name twice but with different symbols in use
@@ -263,6 +275,7 @@ void SmSymbolManager::Load()
OUString aSymbolName = "i" + rSym.GetName();
SmSym aSymbol( aSymbolName, aFont, rSym.GetCharacter(),
aSymbolSetName, true /*bIsPredefined*/ );
+ aSymbol.SetExportName("i" + rSym.GetExportName());
AddOrReplaceSymbol( aSymbol );
}