Testing bot... And Kanji Timer slightly updated. But mostly testing the bot.

Originally committed to SVN as r811.
This commit is contained in:
Dan Donovan 2007-01-17 00:06:42 +00:00
parent aa553263d2
commit 92e6d4cb8f
1 changed files with 21 additions and 11 deletions

View File

@ -32,6 +32,9 @@
// Website: http://aegisub.cellosoft.com // Website: http://aegisub.cellosoft.com
// Contact: mailto:zeratul@cellosoft.com // Contact: mailto:zeratul@cellosoft.com
// //
//
// NOTE: A "source group" in this file refers to a group of plain text following a
// override block containing \k
#define MIN(a,b) ((a<b)?a:b) #define MIN(a,b) ((a<b)?a:b)
#define KANA_SEARCH_DISTANCE 1 //Kana interpolation, in characters, unset to disable #define KANA_SEARCH_DISTANCE 1 //Kana interpolation, in characters, unset to disable
@ -234,6 +237,7 @@ void DialogKanjiTimer::OnSkipSource(wxCommandEvent &event) {
AssDialogueBlockOverride *override; AssDialogueBlockOverride *override;
AssDialogueBlockPlain *plain; AssDialogueBlockPlain *plain;
AssOverrideTag *tag; AssOverrideTag *tag;
wxRegEx reK(_T("\\\\[kK][of]?"),wxRE_NOSUB);
int k, kIndex=0, textIndex=0, TextBeforeOffset=0; int k, kIndex=0, textIndex=0, TextBeforeOffset=0;
bool LastWasOverride = false; bool LastWasOverride = false;
@ -262,7 +266,7 @@ void DialogKanjiTimer::OnSkipSource(wxCommandEvent &event) {
for (size_t j=0;j<override->Tags.size();j++) { for (size_t j=0;j<override->Tags.size();j++) {
tag = override->Tags.at(j); tag = override->Tags.at(j);
if (tag->Name == _T("\\k") && tag->Params.size() == 1) if (reK.Matches(tag->Name)&&tag->Params.size() == 1)
k = tag->Params[0]->AsInt(); k = tag->Params[0]->AsInt();
} }
RegroupSourceKLengths[kIndex++] = k; RegroupSourceKLengths[kIndex++] = k;
@ -423,13 +427,18 @@ void DialogKanjiTimer::SetSelected() {
wxString Destext = DestText->GetValue(); wxString Destext = DestText->GetValue();
wxString SrcG = SourceText->GetStringSelection(); wxString SrcG = SourceText->GetStringSelection();
wxString trimmed = SrcG.Trim(true); wxString trimmed = SrcG.Trim(true);
wxString Destextmid;
SrcG = SourceText->GetStringSelection(); SrcG = SourceText->GetStringSelection();
int sourceindex=0, destsel=0; size_t sourceindex=0, destsel=0;
bool h,k;
//Find hiragana/katakana for the first source group
for(std::list<KanaEntry>::iterator iter = kt->entries.begin(); iter != kt->entries.end(); iter++) { for(std::list<KanaEntry>::iterator iter = kt->entries.begin(); iter != kt->entries.end(); iter++) {
KanaEntry ke = *iter; KanaEntry ke = *iter;
if ((int)Destext.Len()>=destsel&&(Destext.Mid(destsel).StartsWith(ke.hiragana)||Destext.StartsWith(ke.katakana))) { Destextmid=Destext.Mid(destsel);
h=Destextmid.StartsWith(ke.hiragana);
k=Destext.StartsWith(ke.katakana);
if (Destext.Len()>=destsel&&(h||k)) {
if (SrcG.Len()==sourceindex||trimmed.Mid(sourceindex)==ke.hepburn) { if (SrcG.Len()==sourceindex||trimmed.Mid(sourceindex)==ke.hepburn) {
foundit=true; foundit=true;
if (Destext.Len()>(destsel+1)&&SrcG.EndsWith(_T(" "))&&Destext.at(destsel+1)==' ') if (Destext.Len()>(destsel+1)&&SrcG.EndsWith(_T(" "))&&Destext.at(destsel+1)==' ')
@ -439,9 +448,9 @@ void DialogKanjiTimer::SetSelected() {
break; break;
} }
if (ke.hepburn.Len()!=0 && trimmed.Mid(sourceindex).StartsWith(ke.hepburn)) { if (ke.hepburn.Len()!=0 && trimmed.Mid(sourceindex).StartsWith(ke.hepburn)) {
destsel++; destsel+=h?ke.hiragana.Len():ke.katakana.Len();
sourceindex+=ke.hepburn.Len(); sourceindex+=ke.hepburn.Len();
iter = kt->entries.begin(); iter = kt->entries.begin(); //start over in list
} }
} }
} }
@ -450,14 +459,13 @@ void DialogKanjiTimer::SetSelected() {
//Try some interpolation for kanji. If we find a hiragana we know after this, //Try some interpolation for kanji. If we find a hiragana we know after this,
// then we may be able to figure this one out. // then we may be able to figure this one out.
wxString NextSGroup = RegroupSourceText[GetSourceArrayPos(false)]; wxString NextSGroup = RegroupSourceText[GetSourceArrayPos(false)];
int index; int highlight=0;
for(std::list<KanaEntry>::iterator iter = kt->entries.begin(); iter != kt->entries.end(); iter++) { for(std::list<KanaEntry>::iterator iter = kt->entries.begin(); iter != kt->entries.end(); iter++) {
KanaEntry ke = *iter; KanaEntry ke = *iter;
if (NextSGroup.StartsWith(ke.hepburn)) { if (NextSGroup.StartsWith(ke.hepburn)) {
index=0;
for(int i=0;i!=KANA_SEARCH_DISTANCE;i++) { for(int i=0;i!=KANA_SEARCH_DISTANCE;i++) {
wxString Destextmid = Destext.Mid(i); Destextmid = Destext.Mid(i);
if(Destextmid.StartsWith(ke.hiragana)||Destextmid.StartsWith(ke.katakana)) { if(Destextmid.StartsWith(ke.hiragana)||Destextmid.StartsWith(ke.katakana)) {
DestText->SetSelection(0,i); DestText->SetSelection(0,i);
return; return;
@ -544,7 +552,10 @@ int DialogKanjiTimer::GetSourceArrayPos(bool GoingDown) {
return index; return index;
} }
//////////////////////////////////////////////////////////////////////////
/// Return dialogue index given a style and the number of the occurance //
// StyleName: The name of the style you're looking for //
// Occurance: Look for the nth dialogue occurance. Indexed from 0. //
int DialogKanjiTimer::ListIndexFromStyleandIndex(wxString StyleName, int Occurance) { int DialogKanjiTimer::ListIndexFromStyleandIndex(wxString StyleName, int Occurance) {
AssDialogue *line; AssDialogue *line;
int index = 0; int index = 0;
@ -564,7 +575,6 @@ int DialogKanjiTimer::ListIndexFromStyleandIndex(wxString StyleName, int Occuran
DialogKanjiTimerEvent::DialogKanjiTimerEvent(DialogKanjiTimer *ctrl) { DialogKanjiTimerEvent::DialogKanjiTimerEvent(DialogKanjiTimer *ctrl) {
control = ctrl; control = ctrl;
} }