Decomposition before composition added

(resolves #17)
This commit is contained in:
Simon Rozman 2016-04-22 11:00:11 +02:00
parent 2e89edb62c
commit 5df7ca886b
2 changed files with 15 additions and 9 deletions

View File

@ -51,7 +51,7 @@ void wxZRColaComposerPanel::OnDecomposedPaint(wxPaintEvent& event)
// Save new selection first, to avoid loop. // Save new selection first, to avoid loop.
m_selDecomposed.first = from; m_selDecomposed.first = from;
m_selDecomposed.second = to; m_selDecomposed.second = to;
m_composed->SetSelection(m_mapping.to_src(from), m_mapping.to_src(to)); m_composed->SetSelection(m_mapping2.to_dst(m_mapping1.to_dst(from)), m_mapping2.to_dst(m_mapping1.to_dst(to)));
} }
} }
@ -71,9 +71,11 @@ void wxZRColaComposerPanel::OnDecomposedText(wxCommandEvent& event)
wxString src(m_decomposed->GetValue()); wxString src(m_decomposed->GetValue());
#endif #endif
std::wstring norm;
((ZRColaApp*)wxTheApp)->m_t_db.Decompose(src.data(), src.size(), norm, &m_mapping1);
std::wstring dst; std::wstring dst;
((ZRColaApp*)wxTheApp)->m_t_db.Compose(src.data(), src.size(), dst, &m_mapping); ((ZRColaApp*)wxTheApp)->m_t_db.Compose(norm.data(), norm.size(), dst, &m_mapping2);
m_mapping.invert();
long from, to; long from, to;
m_decomposed->GetSelection(&from, &to); m_decomposed->GetSelection(&from, &to);
@ -81,7 +83,7 @@ void wxZRColaComposerPanel::OnDecomposedText(wxCommandEvent& event)
// Update composed text. // Update composed text.
m_progress = true; m_progress = true;
m_composed->SetValue(dst); m_composed->SetValue(dst);
m_composed->SetSelection(m_mapping.to_src(from), m_mapping.to_src(to)); m_composed->SetSelection(m_mapping2.to_dst(m_mapping1.to_dst(from)), m_mapping2.to_dst(m_mapping1.to_dst(to)));
event.Skip(); event.Skip();
m_progress = false; m_progress = false;
} }
@ -99,7 +101,7 @@ void wxZRColaComposerPanel::OnComposedPaint(wxPaintEvent& event)
// Save new selection first, to avoid loop. // Save new selection first, to avoid loop.
m_selComposed.first = from; m_selComposed.first = from;
m_selComposed.second = to; m_selComposed.second = to;
m_decomposed->SetSelection(m_mapping.to_dst(from), m_mapping.to_dst(to)); m_decomposed->SetSelection(m_mapping1.to_src(m_mapping2.to_src(from)), m_mapping1.to_src(m_mapping2.to_src(to)));
} }
} }
@ -123,9 +125,12 @@ void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event)
std::wstring dst; std::wstring dst;
wxZRColaFrame *mainWnd = dynamic_cast<wxZRColaFrame*>(wxGetActiveWindow()); wxZRColaFrame *mainWnd = dynamic_cast<wxZRColaFrame*>(wxGetActiveWindow());
if (mainWnd) if (mainWnd)
app->m_t_db.Decompose(src.data(), src.size(), &app->m_lc_db, mainWnd->m_lang, dst, &m_mapping); app->m_t_db.Decompose(src.data(), src.size(), &app->m_lc_db, mainWnd->m_lang, dst, &m_mapping2);
else else
app->m_t_db.Decompose(src.data(), src.size(), dst, &m_mapping); app->m_t_db.Decompose(src.data(), src.size(), dst, &m_mapping2);
m_mapping1.clear();
m_mapping2.invert();
long from, to; long from, to;
m_composed->GetSelection(&from, &to); m_composed->GetSelection(&from, &to);
@ -133,7 +138,7 @@ void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event)
// Update decomposed text. // Update decomposed text.
m_progress = true; m_progress = true;
m_decomposed->SetValue(dst); m_decomposed->SetValue(dst);
m_decomposed->SetSelection(m_mapping.to_dst(from), m_mapping.to_dst(to)); m_decomposed->SetSelection(m_mapping1.to_src(m_mapping2.to_src(from)), m_mapping1.to_src(m_mapping2.to_src(to)));
event.Skip(); event.Skip();
m_progress = false; m_progress = false;
} }

View File

@ -49,7 +49,8 @@ protected:
protected: protected:
bool m_progress; ///< Boolean flag to avoid recursive updates of composed and decomposed text controls bool m_progress; ///< Boolean flag to avoid recursive updates of composed and decomposed text controls
ZRCola::mapping_vector m_mapping; ///< Character index mapping vector between composed and decomposed text ZRCola::mapping_vector m_mapping1; ///< Character index mapping vector between decomposed and normalized text
ZRCola::mapping_vector m_mapping2; ///< Character index mapping vector between normalized and composed text
std::pair<long, long> std::pair<long, long>
m_selDecomposed, ///< Character index of selected text in decomposed text control m_selDecomposed, ///< Character index of selected text in decomposed text control
m_selComposed; ///< Character index of selected text in composed text control m_selComposed; ///< Character index of selected text in composed text control