From 5df7ca886b2a09ea755bf64f02ca7439d4f30e86 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Fri, 22 Apr 2016 11:00:11 +0200 Subject: [PATCH] Decomposition before composition added (resolves #17) --- ZRCola/zrcolacomppnl.cpp | 21 +++++++++++++-------- ZRCola/zrcolacomppnl.h | 3 ++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ZRCola/zrcolacomppnl.cpp b/ZRCola/zrcolacomppnl.cpp index a10e868..62fdb1a 100644 --- a/ZRCola/zrcolacomppnl.cpp +++ b/ZRCola/zrcolacomppnl.cpp @@ -51,7 +51,7 @@ void wxZRColaComposerPanel::OnDecomposedPaint(wxPaintEvent& event) // Save new selection first, to avoid loop. m_selDecomposed.first = from; 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()); #endif + std::wstring norm; + ((ZRColaApp*)wxTheApp)->m_t_db.Decompose(src.data(), src.size(), norm, &m_mapping1); + std::wstring dst; - ((ZRColaApp*)wxTheApp)->m_t_db.Compose(src.data(), src.size(), dst, &m_mapping); - m_mapping.invert(); + ((ZRColaApp*)wxTheApp)->m_t_db.Compose(norm.data(), norm.size(), dst, &m_mapping2); long from, to; m_decomposed->GetSelection(&from, &to); @@ -81,7 +83,7 @@ void wxZRColaComposerPanel::OnDecomposedText(wxCommandEvent& event) // Update composed text. m_progress = true; 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(); m_progress = false; } @@ -99,7 +101,7 @@ void wxZRColaComposerPanel::OnComposedPaint(wxPaintEvent& event) // Save new selection first, to avoid loop. m_selComposed.first = from; 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; wxZRColaFrame *mainWnd = dynamic_cast(wxGetActiveWindow()); 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 - 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; m_composed->GetSelection(&from, &to); @@ -133,7 +138,7 @@ void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event) // Update decomposed text. m_progress = true; 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(); m_progress = false; } diff --git a/ZRCola/zrcolacomppnl.h b/ZRCola/zrcolacomppnl.h index 3760f95..3f25d8d 100644 --- a/ZRCola/zrcolacomppnl.h +++ b/ZRCola/zrcolacomppnl.h @@ -49,7 +49,8 @@ protected: protected: 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 m_selDecomposed, ///< Character index of selected text in decomposed text control m_selComposed; ///< Character index of selected text in composed text control