forked from mia/Aegisub
Implemented setting of language for Thesaurus
Originally committed to SVN as r671.
This commit is contained in:
parent
166e7cba7c
commit
bac9e14fc4
4 changed files with 80 additions and 11 deletions
|
@ -95,7 +95,7 @@ void OptionsManager::LoadDefaults() {
|
||||||
|
|
||||||
// Dictionary
|
// Dictionary
|
||||||
SetText(_T("Dictionaries path"),_T("dictionaries"));
|
SetText(_T("Dictionaries path"),_T("dictionaries"));
|
||||||
SetText(_T("Dictionary language"),_T("en_US"));
|
SetText(_T("Spell checker language"),_T("en_US"));
|
||||||
SetText(_T("Thesaurus language"),_T("en_US"));
|
SetText(_T("Thesaurus language"),_T("en_US"));
|
||||||
|
|
||||||
// Video Options
|
// Video Options
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <hunspell/hunspell.hxx>
|
#include <hunspell/hunspell.hxx>
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
#include <wx/dir.h>
|
#include <wx/dir.h>
|
||||||
|
#include <wx/filename.h>
|
||||||
#include "spellchecker_hunspell.h"
|
#include "spellchecker_hunspell.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
@ -52,7 +53,7 @@
|
||||||
HunspellSpellChecker::HunspellSpellChecker() {
|
HunspellSpellChecker::HunspellSpellChecker() {
|
||||||
hunspell = NULL;
|
hunspell = NULL;
|
||||||
conv = NULL;
|
conv = NULL;
|
||||||
SetLanguage(Options.AsText(_T("Dictionary Language")));
|
SetLanguage(Options.AsText(_T("Spell checker Language")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -515,7 +515,7 @@ void SubsTextEditCtrl::ShowPopupMenu(int activePos) {
|
||||||
wxArrayString langs = spellchecker->GetLanguageList(); // This probably should be cached...
|
wxArrayString langs = spellchecker->GetLanguageList(); // This probably should be cached...
|
||||||
if (langs.Count()) {
|
if (langs.Count()) {
|
||||||
// Current language
|
// Current language
|
||||||
wxString curLang = Options.AsText(_T("Dictionary Language"));
|
wxString curLang = Options.AsText(_T("Spell checker language"));
|
||||||
|
|
||||||
// Languages
|
// Languages
|
||||||
wxMenu *languageMenu = new wxMenu();
|
wxMenu *languageMenu = new wxMenu();
|
||||||
|
@ -526,12 +526,12 @@ void SubsTextEditCtrl::ShowPopupMenu(int activePos) {
|
||||||
info = wxLocale::FindLanguageInfo(langs[i]);
|
info = wxLocale::FindLanguageInfo(langs[i]);
|
||||||
if (info) name = info->Description;
|
if (info) name = info->Description;
|
||||||
else name = langs[i];
|
else name = langs[i];
|
||||||
cur = languageMenu->AppendRadioItem(EDIT_MENU_DIC_LANGS+i,name);
|
cur = languageMenu->AppendCheckItem(EDIT_MENU_DIC_LANGS+i,name);
|
||||||
if (langs[i] == curLang) cur->Check();
|
if (langs[i] == curLang) cur->Check();
|
||||||
}
|
}
|
||||||
menu.AppendSubMenu(languageMenu,_("Language"));
|
menu.AppendSubMenu(languageMenu,_("Spell checker language"));
|
||||||
}
|
}
|
||||||
else menu.Append(EDIT_MENU_DIC_LANGUAGE,_("No Dictionaries Available"))->Enable(false);
|
else menu.Append(EDIT_MENU_DIC_LANGUAGE,_("No dictionaries available"))->Enable(false);
|
||||||
menu.AppendSeparator();
|
menu.AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,6 +588,28 @@ void SubsTextEditCtrl::ShowPopupMenu(int activePos) {
|
||||||
// No suggestions
|
// No suggestions
|
||||||
if (!result.size()) menu.Append(EDIT_MENU_THESAURUS,_("No thesaurus suggestions"))->Enable(false);
|
if (!result.size()) menu.Append(EDIT_MENU_THESAURUS,_("No thesaurus suggestions"))->Enable(false);
|
||||||
|
|
||||||
|
// Language list
|
||||||
|
wxArrayString langs = thesaurus->GetLanguageList(); // This probably should be cached...
|
||||||
|
if (langs.Count()) {
|
||||||
|
// Current language
|
||||||
|
wxString curLang = Options.AsText(_T("Thesaurus language"));
|
||||||
|
|
||||||
|
// Languages
|
||||||
|
wxMenu *languageMenu = new wxMenu();
|
||||||
|
wxMenuItem *cur;
|
||||||
|
wxString name;
|
||||||
|
const wxLanguageInfo *info;
|
||||||
|
for (unsigned int i=0;i<langs.Count();i++) {
|
||||||
|
info = wxLocale::FindLanguageInfo(langs[i].Mid(3));
|
||||||
|
if (info) name = info->Description;
|
||||||
|
else name = langs[i];
|
||||||
|
cur = languageMenu->AppendCheckItem(EDIT_MENU_THES_LANGS+i,name);
|
||||||
|
if (langs[i].Mid(3) == curLang) cur->Check();
|
||||||
|
}
|
||||||
|
menu.AppendSubMenu(languageMenu,_("Thesaurus language"));
|
||||||
|
}
|
||||||
|
else menu.Append(EDIT_MENU_THES_LANGUAGE,_("No thesauruses available"))->Enable(false);
|
||||||
|
|
||||||
// Separator
|
// Separator
|
||||||
menu.AppendSeparator();
|
menu.AppendSeparator();
|
||||||
}
|
}
|
||||||
|
@ -812,7 +834,7 @@ void SubsTextEditCtrl::OnSetDicLanguage(wxCommandEvent &event) {
|
||||||
// Set dictionary
|
// Set dictionary
|
||||||
int index = event.GetId() - EDIT_MENU_DIC_LANGS;
|
int index = event.GetId() - EDIT_MENU_DIC_LANGS;
|
||||||
spellchecker->SetLanguage(langs[index]);
|
spellchecker->SetLanguage(langs[index]);
|
||||||
Options.SetText(_T("Dictionary language"),langs[index]);
|
Options.SetText(_T("Spell checker language"),langs[index]);
|
||||||
Options.Save();
|
Options.Save();
|
||||||
|
|
||||||
// Update styling
|
// Update styling
|
||||||
|
|
|
@ -36,19 +36,22 @@
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Headers
|
// Headers
|
||||||
|
#include <wx/wxprec.h>
|
||||||
|
#include <wx/dir.h>
|
||||||
|
#include <wx/filename.h>
|
||||||
#include "thesaurus_myspell.h"
|
#include "thesaurus_myspell.h"
|
||||||
#include "mythes.hxx"
|
#include "mythes.hxx"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "options.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
MySpellThesaurus::MySpellThesaurus() {
|
MySpellThesaurus::MySpellThesaurus() {
|
||||||
wxString idxpath = AegisubApp::folderName + _T("dictionaries/th_en_US.idx");
|
|
||||||
wxString datpath = AegisubApp::folderName + _T("dictionaries/th_en_US.dat");
|
|
||||||
mythes = new MyThes(idxpath.mb_str(wxConvLocal),datpath.mb_str(wxConvLocal));
|
|
||||||
conv = NULL;
|
conv = NULL;
|
||||||
if (mythes) conv = new wxCSConv(wxString(mythes->get_th_encoding(),wxConvUTF8));
|
mythes = NULL;
|
||||||
|
SetLanguage(Options.AsText(_T("Thesaurus Language")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,7 +93,30 @@ void MySpellThesaurus::Lookup(wxString word,ThesaurusEntryArray &result) {
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// Get language list
|
// Get language list
|
||||||
wxArrayString MySpellThesaurus::GetLanguageList() {
|
wxArrayString MySpellThesaurus::GetLanguageList() {
|
||||||
|
// Get dir name
|
||||||
|
wxString path = DecodeRelativePath(Options.AsText(_T("Dictionaries path")),AegisubApp::folderName) + _T("/");
|
||||||
wxArrayString list;
|
wxArrayString list;
|
||||||
|
|
||||||
|
// Get file lists
|
||||||
|
wxArrayString idx;
|
||||||
|
wxDir::GetAllFiles(path,&idx,_T("*.idx"),wxDIR_FILES);
|
||||||
|
wxArrayString dat;
|
||||||
|
wxDir::GetAllFiles(path,&dat,_T("*.dat"),wxDIR_FILES);
|
||||||
|
|
||||||
|
// For each idxtionary match, see if it can find the corresponding .dat
|
||||||
|
for (unsigned int i=0;i<idx.Count();i++) {
|
||||||
|
wxString curdat = idx[i].Left(MAX(0,idx[i].Length()-4)) + _T(".dat");
|
||||||
|
for (unsigned int j=0;j<dat.Count();j++) {
|
||||||
|
// Found match
|
||||||
|
if (curdat == dat[j]) {
|
||||||
|
wxFileName fname(curdat);
|
||||||
|
list.Add(fname.GetName());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return list
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,4 +124,24 @@ wxArrayString MySpellThesaurus::GetLanguageList() {
|
||||||
////////////////
|
////////////////
|
||||||
// Set language
|
// Set language
|
||||||
void MySpellThesaurus::SetLanguage(wxString language) {
|
void MySpellThesaurus::SetLanguage(wxString language) {
|
||||||
|
// Get dir name
|
||||||
|
wxString path = DecodeRelativePath(Options.AsText(_T("Dictionaries path")),AegisubApp::folderName) + _T("/");
|
||||||
|
|
||||||
|
// Get affix and dictionary paths
|
||||||
|
wxString idxpath = path + _T("th_") + language + _T(".idx");
|
||||||
|
wxString datpath = path + _T("th_") + language + _T(".dat");
|
||||||
|
|
||||||
|
// Check if language is available
|
||||||
|
if (!wxFileExists(idxpath) || !wxFileExists(datpath)) return;
|
||||||
|
|
||||||
|
// Unload
|
||||||
|
delete mythes;
|
||||||
|
mythes = NULL;
|
||||||
|
delete conv;
|
||||||
|
conv = NULL;
|
||||||
|
|
||||||
|
// Load
|
||||||
|
mythes = new MyThes(idxpath.mb_str(wxConvLocal),datpath.mb_str(wxConvLocal));
|
||||||
|
conv = NULL;
|
||||||
|
if (mythes) conv = new wxCSConv(wxString(mythes->get_th_encoding(),wxConvUTF8));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue