| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905 |
- /*
- ** Command & Conquer Generals(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- //
- // TransDB.cpp
- //
- #include "stdAfx.h"
- #include "transdb.h"
- #include "noxstringdlg.h"
- #include "noxstring.h"
- #include "assert.h"
- #include "bin.h"
- #include "list.h"
- static char buffer[100*1024];
- static List DataBases;
- static LANGINFO langinfo[] =
- {
- { LANGID_US, "US", "us", "e"},
- { LANGID_UK, "UK", "uk", "e" },
- { LANGID_GERMAN, "German", "ge", "g" },
- { LANGID_FRENCH, "French", "fr", "f" },
- { LANGID_SPANISH, "Spanish", "sp", "s" },
- { LANGID_ITALIAN, "Italian", "it", "i" },
- { LANGID_JAPANESE, "Japanese", "ja", "j" },
- { LANGID_KOREAN, "Korean", "ko", "k" },
- { LANGID_CHINESE, "Chinese", "ch", "c" },
- { LANGID_JABBER, "Jabberwockie", "jb", "e" },
- { LANGID_UNKNOWN, "Unknown", NULL, NULL }
- };
- LANGINFO *GetLangInfo ( int index )
- {
-
- if ( (index >= 0) && (index < (sizeof ( langinfo ) / sizeof (LANGINFO )) -1) )
- {
- return &langinfo[index];
- }
- return NULL;
- }
- LANGINFO *GetLangInfo ( LangID langid )
- {
- LANGINFO *item;
- item = langinfo;
- while ( item->langid != LANGID_UNKNOWN )
- {
- if ( item->langid == langid )
- {
- return item;
- }
- item++;
- }
- return NULL;
- }
- char *GetLangName ( LangID langid )
- {
- LANGINFO *item;
- if ( ( item = GetLangInfo ( langid )) )
- {
- return item->name;
- }
- return "unknown";
- }
- LANGINFO *GetLangInfo ( char *language )
- {
- LANGINFO *item;
- item = langinfo;
- while ( item->langid != LANGID_UNKNOWN )
- {
- if ( !stricmp ( language, item->name ) )
- {
- return item;
- }
- item++;
- }
- return NULL;
- }
- TransDB* FirstTransDB ( void )
- {
- ListNode *first;
- first = DataBases.Next ();
- if ( first )
- {
- return (TransDB *) first->Item ();
- }
- return NULL;
- }
- TransDB::TransDB ( char *cname )
- {
- text_bin = new Bin ();
- text_id_bin = new BinID ();
- label_bin = new Bin ();
- obsolete_bin = new Bin ();
- strncpy ( name, cname, sizeof ( name ) -1 );
- name[sizeof(name)-1] = 0;
- node.SetItem ( this );
- DataBases.AddToTail ( &node );
- next_string_id = -1;
- valid = TRUE;
- num_obsolete = 0;
- checked_for_errors = FALSE;
- flags = TRANSDB_OPTION_NONE | TRANSDB_OPTION_DUP_TEXT;
- }
- TransDB:: ~TransDB ( )
- {
- Clear ();
- node.Remove ();
- delete text_bin;
- delete text_id_bin;
- delete label_bin;
- delete obsolete_bin;
- }
- void TransDB::AddLabel ( NoxLabel *label )
- {
- ListNode *node = new ListNode ();
- node->SetItem ( label );
- label_bin->Add ( label, label->Name() );
- labels.AddToTail ( node );
- label->SetDB ( this );
- Changed ();
- }
- void TransDB::AddText ( NoxText *text )
- {
- text_bin->Add ( text, text->Get() );
- if ( text->ID () > 0 )
- {
- text_id_bin->Add ( text, text->ID ());
- }
- }
- void TransDB::AddObsolete ( NoxText *text )
- {
- ListNode *node = new ListNode ();
- node->SetItem ( text );
- obsolete_bin->Add ( text, text->Get() );
- if ( text->ID () > 0 )
- {
- text_id_bin->Add ( text, text->ID ());
- }
- num_obsolete++;
- text->SetParent ( (DBAttribs *)this );
- text->Changed ();
- obsolete.AddToTail ( node );
- Changed ();
- }
- void TransDB::RemoveLabel ( NoxLabel *label )
- {
- ListNode *node;
- if ( (node = labels.Find ( label )) )
- {
- node->Remove ();
- label->SetDB ( NULL );
- label_bin->Remove ( label );
- delete node;
- Changed ();
- }
- }
- void TransDB::RemoveText ( NoxText *text )
- {
- text_bin->Remove ( text );
- text_id_bin->Remove ( text );
- }
- void TransDB::RemoveObsolete ( NoxText *text )
- {
- ListNode *node;
- if ( (node = obsolete.Find ( text )) )
- {
- node->Remove ();
- obsolete_bin->Remove ( text );
- text_id_bin->Remove ( text );
- num_obsolete--;
- delete node;
- Changed ();
- }
- }
- int TransDB::NumLabelsChanged ( void )
- {
- NoxLabel *label;
- ListSearch sh;
- int changed = 0;
- label = FirstLabel ( sh );
- while ( label )
- {
- if ( label->IsChanged ())
- {
- changed++;
- }
- label = NextLabel ( sh );
- }
- return changed;
- }
- int TransDB::NumLabels ( void )
- {
- return labels.NumItems();
- }
- NoxLabel* TransDB::FirstLabel ( ListSearch& sh )
- {
- ListNode *node;
- if ( ( node = sh.FirstNode ( &labels )))
- {
- return (NoxLabel *) node->Item ();
- }
- return NULL;
- }
- NoxLabel* TransDB::NextLabel ( ListSearch& sh)
- {
- ListNode *node;
- if ( ( node = sh.Next ()))
- {
- return (NoxLabel *) node->Item ();
- }
- return NULL;
- }
- NoxText* TransDB::FirstObsolete ( ListSearch& sh )
- {
- ListNode *node;
- if ( ( node = sh.FirstNode ( &obsolete )))
- {
- return (NoxText *) node->Item ();
- }
- return NULL;
- }
- NoxText* TransDB::NextObsolete ( ListSearch& sh)
- {
- ListNode *node;
- if ( ( node = sh.Next ()))
- {
- return (NoxText *) node->Item ();
- }
- return NULL;
- }
- NoxLabel* TransDB::FindLabel ( OLECHAR *name )
- {
- return (NoxLabel *) label_bin->Get ( name );
- }
- NoxText* TransDB::FindText ( OLECHAR *text )
- {
- return (NoxText *) text_bin->Get ( text );
- }
- NoxText* TransDB::FindSubText ( OLECHAR *pattern, int item )
- {
- NoxLabel *label;
- ListSearch sh;
- NoxText *text;
- ListSearch sh_text;
- int plen = wcslen ( pattern );
- label = FirstLabel ( sh );
- while ( label )
- {
- text = label->FirstText ( sh_text );
- while ( text )
- {
-
- if ( !wcsnicmp ( text->Get (), pattern, 15 ))
- {
- if ( !item )
- {
- return text;
- }
- item--;
- }
- text = label->NextText ( sh_text );
- }
- label = NextLabel ( sh );
- }
- return NULL;
- }
- NoxText* TransDB::FindText ( int id )
- {
- return (NoxText *) text_id_bin->Get ( id );
- }
- NoxText* TransDB::FindNextText ( void )
- {
- return (NoxText *) text_bin->GetNext ( );
- }
- NoxText* TransDB::FindObsolete ( OLECHAR *name )
- {
- return (NoxText *) obsolete_bin->Get ( name );
- }
- NoxText* TransDB::FindNextObsolete ( void )
- {
- return (NoxText *) obsolete_bin->GetNext ( );
- }
- int TransDB::Clear ( void )
- {
- ListSearch sh;
- NoxLabel *label;
- NoxText *text;
- ListNode *node;
- int count = 0;
- text_bin->Clear ();
- text_id_bin->Clear ();
- label_bin->Clear ();
- obsolete_bin->Clear ();
- while ( node = sh.FirstNode ( &labels ) )
- {
- node->Remove ();
- label = (NoxLabel *) node->Item ();
- count++;
- delete label;
- delete node;
- }
- while ( node = sh.FirstNode ( &obsolete ) )
- {
- node->Remove ();
- text = (NoxText *) node->Item ();
- count++;
- delete text;
- delete node;
- }
- num_obsolete = 0;
- if ( next_string_id != -1 )
- {
- next_string_id = START_STRING_ID;
- }
- if ( count )
- {
- Changed ();
- }
- valid = TRUE;
- return count;
- }
- void TransDB::ClearChanges ( void )
- {
- ListSearch sh;
- NoxLabel *label;
- label = FirstLabel ( sh );
- while ( label )
- {
- label->ClearChanges ();
- label = NextLabel ( sh );
- }
- NoxText *text = FirstObsolete ( sh );
- while ( text )
- {
- text->ClearChanges ();
- text = NextObsolete ( sh );
- }
- NotChanged ();
- }
- void TransDB::ClearProcessed ( void )
- {
- ListSearch sh;
- NoxLabel *label;
- label = FirstLabel ( sh );
- while ( label )
- {
- label->ClearProcessed ();
- label = NextLabel ( sh );
- }
- NotProcessed ();
- }
- void TransDB::ClearMatched ( void )
- {
- ListSearch sh;
- NoxLabel *label;
- label = FirstLabel ( sh );
- while ( label )
- {
- label->ClearMatched ();
- label = NextLabel ( sh );
- }
- NotMatched ();
- }
- void TransDB::AddToTree ( CTreeCtrl *tc, HTREEITEM parent, int changes, void (*cb) ( void ) )
- {
- HTREEITEM item;
- HTREEITEM ilabels, iobsolete;
- ListSearch sh;
- NoxLabel *label;
- NoxText *txt;
-
- sprintf ( buffer, "%s%c (%d/%d)",name, ChangedSymbol(), NumLabelsChanged(), NumLabels() );
- item = tc->InsertItem ( buffer, parent );
- ilabels = tc->InsertItem ( "Labels", item );
- label = FirstLabel ( sh );
- while ( label )
- {
- if ( !changes || label->IsChanged ())
- {
- label->AddToTree ( tc, ilabels, changes );
- }
- if ( cb )
- {
- cb ( );
- }
- label = NextLabel ( sh );
- }
- if ( num_obsolete )
- {
- iobsolete = tc->InsertItem ( "Obsolete Strings", item );
-
- txt = FirstObsolete ( sh );
-
- while ( txt )
- {
- if ( !changes || txt->IsChanged ())
- {
- txt->AddToTree ( tc, iobsolete );
- }
-
- if ( cb )
- {
- cb ( );
- }
-
- txt = NextObsolete ( sh );
- }
- }
- }
- TransDB* TransDB::Next ( void )
- {
- ListNode *next;
- next = node.Next ();
- if ( next )
- {
- return (TransDB *) next->Item ();
- }
- return NULL;
- }
- void NoxLabel::init ( void )
- {
- db = NULL;
- comment = NULL;
- line_number = -1;
- max_len = 0;
- name = NULL;
- }
- NoxLabel::NoxLabel ( void )
- {
- init ();
- name = new OLEString ( );
- comment = new OLEString ( );
- context = new OLEString ( );
- speaker = new OLEString ( );
- listener = new OLEString ( );
- }
- NoxLabel::~NoxLabel ( )
- {
- Clear ();
- delete name;
- delete comment;
- delete context;
- delete speaker;
- delete listener;
- }
- void NoxLabel::Remove ( void )
- {
- if ( db )
- {
- db->RemoveLabel ( this );
- }
- }
- void NoxLabel::RemoveText ( NoxText *txt )
- {
- ListNode *node;
- if ( (node = text.Find ( txt )) )
- {
- node->Remove ();
- txt->SetDB ( NULL );
- txt->SetLabel ( NULL );
- txt->SetParent ( NULL );
- delete node;
- Changed ();
- }
- }
- void NoxLabel::AddText ( NoxText *new_text )
- {
- TransDB *db = DB();
- ListNode *node = new ListNode ();
- node->SetItem ( new_text );
- text.AddToTail ( node );
- Changed ();
- new_text->SetDB ( db );
- new_text->SetParent ( (DBAttribs *) this );
- new_text->SetLabel ( this );
- }
- int NoxLabel::Clear ( void )
- {
- ListSearch sh;
- NoxText *txt;
- ListNode *node;
- int count = 0;
- while ( node = sh.FirstNode ( &text ) )
- {
- node->Remove ();
- txt = (NoxText *) node->Item ();
- delete txt;
- delete node;
- count++;
- }
- if ( count )
- {
- Changed ();
- }
- return count;
- }
- NoxLabel* NoxLabel::Clone ( void )
- {
- NoxLabel *clone = new NoxLabel();
- NoxText *txt;
- ListSearch sh;
- clone->SetName ( Name());
- clone->SetComment ( Comment ());
- clone->SetListener ( Listener ());
- clone->SetSpeaker ( Speaker ());
- clone->SetMaxLen ( MaxLen ());
- clone->SetContext ( Context ());
- txt = FirstText ( sh );
- while ( txt )
- {
- clone->AddText ( txt->Clone ());
- txt = NextText ( sh );
- }
- return clone;
- }
- NoxText* NoxLabel::FirstText ( ListSearch& sh )
- {
- ListNode *node;
- if ( ( node = sh.FirstNode ( &text )))
- {
- return (NoxText *) node->Item ();
- }
- return NULL;
- }
- NoxText* NoxLabel::NextText ( ListSearch& sh)
- {
- ListNode *node;
- if ( ( node = sh.Next ( )))
- {
- return (NoxText *) node->Item ();
- }
- return NULL;
- }
- NoxText* NoxLabel::FindText ( OLECHAR *find_text )
- {
- ListSearch sh;
- NoxText *txt;
- txt = FirstText ( sh );
- while ( txt )
- {
- if ( !wcscmp ( txt->Get(), find_text ))
- {
- return txt;
- }
- txt = NextText ( sh );
- }
- return NULL;
- }
- void NoxLabel::SetDB ( TransDB *new_db )
- {
- NoxText *ntext;
- ListSearch sh;
- db = new_db;
- SetParent ( (DBAttribs *) new_db );
- ntext = FirstText ( sh );
- while ( ntext )
- {
- ntext->SetDB ( new_db );
-
- ntext = NextText ( sh );
- }
- }
- void NoxLabel::ClearChanges ( void )
- {
- NoxText *ntext;
- ListSearch sh;
- ntext = FirstText ( sh );
- while ( ntext )
- {
- ntext->ClearChanges();
-
- ntext = NextText ( sh );
- }
- NotChanged();
- }
- void NoxLabel::ClearProcessed ( void )
- {
- NoxText *ntext;
- ListSearch sh;
- ntext = FirstText ( sh );
- while ( ntext )
- {
- ntext->ClearProcessed();
-
- ntext = NextText ( sh );
- }
- NotProcessed();
- }
- void NoxLabel::ClearMatched ( void )
- {
- NoxText *ntext;
- ListSearch sh;
- ntext = FirstText ( sh );
- while ( ntext )
- {
- ntext->ClearMatched();
-
- ntext = NextText ( sh );
- }
- NotMatched();
- }
- int NoxLabel::AllMatched ( void )
- {
- NoxText *ntext;
- ListSearch sh;
- ntext = FirstText ( sh );
- while ( ntext )
- {
- if ( !ntext->Matched() )
- {
- return FALSE;
- }
-
- ntext = NextText ( sh );
- }
- return TRUE;
- }
- NoxText::NoxText( void )
- {
- init ();
- text = new OLEString ( );
- wavefile = new OLEString ( );
- }
- int NoxText::IsSent ( void )
- {
- return sent;
- }
- void NoxText::Sent ( int val )
- {
- sent = val;
- }
- void NoxLabel::AddToTree ( CTreeCtrl *tc, HTREEITEM parent, int changes )
- {
- HTREEITEM litem;
- ListSearch sh;
- NoxText *txt;
- sprintf ( buffer, "%s%c", NameSB(), ChangedSymbol() );
-
- litem = tc->InsertItem ( buffer, parent );
- txt = FirstText ( sh );
- while ( txt )
- {
- if ( !changes || txt->IsChanged ())
- {
- txt->AddToTree ( tc, litem );
- }
- txt = NextText ( sh );
- }
- if ( strcmp ( CommentSB(), "" ) )
- {
- sprintf ( buffer, "COMMENT : %s", CommentSB() );
- tc->InsertItem ( buffer, litem );
- }
- if ( strcmp ( ContextSB(), "" ) )
- {
- sprintf ( buffer, "CONTEXT : %s", ContextSB() );
- tc->InsertItem ( buffer, litem );
- }
-
- if ( strcmp ( SpeakerSB(), "" ) )
- {
- sprintf ( buffer, "SPEAKER : %s", SpeakerSB() );
- tc->InsertItem ( buffer, litem );
- }
-
- if ( strcmp ( ListenerSB(), "" ) )
- {
- sprintf ( buffer, "LISTENER: %s", ListenerSB() );
- tc->InsertItem ( buffer, litem );
- }
- if ( line_number != -1 )
- {
- sprintf ( buffer, "LINE : %d", line_number );
- tc->InsertItem ( buffer, litem );
- }
- if ( max_len )
- {
- sprintf ( buffer, "MAX LEN : %d", max_len );
- tc->InsertItem ( buffer, litem );
- }
- }
- void NoxText::init ( void )
- {
- db = NULL;
- label = NULL;
- line_number = -1;
- revision = 1;
- text = NULL;
- wavefile = NULL;
- id = -1;
- retranslate = FALSE;
- sent = FALSE;
- }
- NoxText::~NoxText( )
- {
- Clear();
- delete text;
- delete wavefile;
- }
- void NoxText::SetDB ( TransDB *new_db )
- {
- Translation *trans;
- ListSearch sh;
- if ( db )
- {
- db->RemoveText ( this );
- }
- if ( (db = new_db) )
- {
- AssignID ();
- db->AddText ( this );
- }
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- trans->SetDB ( new_db );
-
- trans = NextTranslation ( sh );
- }
- }
- void NoxText::Remove ( void )
- {
- if ( label )
- {
- label->RemoveText ( this );
- }
- }
- int NoxText::IsDialog ( void )
- {
- return strcmp (WaveSB(), "" );
- }
- int NoxText::DialogIsValid ( const char *path, LangID langid, int check )
- {
- LANGINFO *linfo;
- CWaveInfo *winfo;
- DBAttribs *attribs;
- linfo = GetLangInfo ( langid );
- if ( langid == LANGID_US )
- {
- winfo = &WaveInfo;
- attribs = (DBAttribs *) this;
- }
- else
- {
- Translation *trans = GetTranslation ( langid );
- if ( !trans )
- {
- return FALSE;
- }
- attribs = (DBAttribs *) trans;
- winfo = &trans->WaveInfo;
- }
- if ( winfo->Valid () && check )
- {
- WIN32_FIND_DATA info;
- HANDLE handle;
-
- winfo->SetValid ( FALSE );
- winfo->SetMissing ( TRUE );
- sprintf ( buffer, "%s%s\\%s%s.wav", path, linfo->character, WaveSB(), linfo->character );
- if ( (handle = FindFirstFile ( buffer, &info )) != INVALID_HANDLE_VALUE )
- {
- if ( ! (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
- {
- if ( winfo->Lo () == info.nFileSizeLow && winfo->Hi() == info.nFileSizeHigh )
- {
- winfo->SetValid ( TRUE );
- }
- winfo->SetMissing ( FALSE );
- }
- FindClose ( handle );
- }
- }
- return winfo->Valid ();
- }
- int NoxText::ValidateDialog ( const char *path, LangID langid )
- {
- WIN32_FIND_DATA info;
- HANDLE handle;
- CWaveInfo *winfo;
- LANGINFO *linfo;
- DBAttribs *attribs;
- linfo = GetLangInfo ( langid );
- if ( langid == LANGID_US )
- {
- winfo = &WaveInfo;
- attribs = (DBAttribs *) this;
- }
- else
- {
- Translation *trans = GetTranslation ( langid );
- if ( !trans )
- {
- return FALSE;
- }
- attribs = (DBAttribs *) trans;
- winfo = &trans->WaveInfo;
- }
- winfo->SetValid ( FALSE );
- winfo->SetMissing ( TRUE );
- sprintf ( buffer, "%s%s\\%s%s.wav", path, linfo->character , WaveSB(), linfo->character );
- if ( (handle = FindFirstFile ( buffer, &info )) != INVALID_HANDLE_VALUE )
- {
- if ( ! (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
- {
- winfo->SetLo ( info.nFileSizeLow );
- winfo->SetHi ( info.nFileSizeHigh );
- winfo->SetValid ( TRUE );
- winfo->SetMissing ( FALSE );
- attribs->Changed();
- }
- FindClose ( handle );
- }
- return winfo->Valid ();
- }
- int NoxText::DialogIsPresent ( const char *path, LangID langid )
- {
-
- WIN32_FIND_DATA info;
- HANDLE handle;
- int present = FALSE;
- LANGINFO *linfo = GetLangInfo ( langid );
- sprintf ( buffer, "%s%s\\%s%s.wav", path, linfo->character , WaveSB(), linfo->character );
- if ( (handle = FindFirstFile ( buffer, &info )) != INVALID_HANDLE_VALUE )
- {
- if ( ! (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
- {
- present = TRUE;
- }
- FindClose ( handle );
- }
- return present;
- }
- void NoxText::AddTranslation ( Translation *trans )
- {
- ListNode *node = new ListNode ();
- node->SetItem ( trans );
- translations.AddToTail ( node );
- Changed ();
- trans->SetDB ( DB() );
- trans->SetParent ( (DBAttribs *) this );
- }
- Translation* NoxText::FirstTranslation ( ListSearch& sh )
- {
- ListNode *node;
- if ( ( node = sh.FirstNode ( &translations )))
- {
- return (Translation *) node->Item ();
- }
- return NULL;
- }
- Translation* NoxText::NextTranslation ( ListSearch& sh)
- {
- ListNode *node;
- if ( ( node = sh.Next ( )))
- {
- return (Translation *) node->Item ();
- }
- return NULL;
- }
- Translation* NoxText::GetTranslation ( LangID langid )
- {
- ListSearch sh;
- Translation *trans;
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- if ( langid == trans->GetLangID())
- {
- break;
- }
- trans = NextTranslation ( sh );
- }
- return trans;
- }
- int NoxText::Clear ( void )
- {
- ListSearch sh;
- Translation *trans;
- ListNode *node;
- int count = 0;
- while ( node = sh.FirstNode ( &translations ) )
- {
- node->Remove ();
- trans = (Translation *) node->Item ();
- delete trans;
- delete node;
- count++;
- }
- if ( count )
- {
- Changed ();
- }
- return count;
- }
- NoxText* NoxText::Clone ( void )
- {
- NoxText *clone = new NoxText();
- Translation *trans;
- ListSearch sh;
- clone->Set ( Get ());
- clone->SetWave ( Wave ());
- clone->SetRevision ( Revision ());
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- clone->AddTranslation ( trans->Clone ());
- trans = NextTranslation ( sh );
- }
- return clone;
- }
- void NoxText::ClearChanges ( void )
- {
- Translation *trans;
- ListSearch sh;
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- trans->ClearChanges();
-
- trans = NextTranslation ( sh );
- }
- NotChanged();
- }
- void NoxText::ClearProcessed ( void )
- {
- Translation *trans;
- ListSearch sh;
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- trans->ClearProcessed();
-
- trans = NextTranslation ( sh );
- }
- NotProcessed();
- }
- void NoxText::ClearMatched ( void )
- {
- Translation *trans;
- ListSearch sh;
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- trans->ClearMatched();
-
- trans = NextTranslation ( sh );
- }
- NotMatched();
- }
- void NoxText::AssignID ( void )
- {
- if ( id != -1 )
- {
- return; // already assigned
- }
- if ( db )
- {
- SetID ( db->NewID ());
- }
- }
- void NoxText::Set ( OLECHAR *string )
- {
- if ( db )
- {
- db->RemoveText ( this );
- }
- text->Set ( string );
- InvalidateWave ( );
- if ( db )
- {
- db->AddText ( this );
- }
- Changed ();
- }
- void NoxText::Set ( char *string )
- {
- if ( db )
- {
- db->RemoveText ( this );
- }
- text->Set ( string );
- InvalidateWave ();
- if ( db )
- {
- db->AddText ( this );
- }
- Changed ();
- }
- void NoxText::InvalidateAllWaves ( void )
- {
- Translation *trans;
- ListSearch sh;
- WaveInfo.SetValid ( FALSE );
- trans = FirstTranslation ( sh );
-
- while ( trans )
- {
- trans->WaveInfo.SetValid ( FALSE );
-
- trans = NextTranslation ( sh );
- }
- }
- void NoxText::InvalidateWave ( void )
- {
- WaveInfo.SetValid ( FALSE );
- }
- void NoxText::InvalidateWave ( LangID langid )
- {
- WaveInfo.SetValid ( FALSE );
- if ( langid == LANGID_US )
- {
- InvalidateWave ();
- }
- else
- {
- Translation *trans = GetTranslation ( langid );
-
- if ( trans )
- {
- trans->WaveInfo.SetValid ( FALSE );
- }
- }
- }
- void NoxText::AddToTree ( CTreeCtrl *tc, HTREEITEM parent, int changes )
- {
- HTREEITEM item;
- ListSearch sh;
- Translation *trans;
- sprintf ( buffer, "TEXT %c : %s", ChangedSymbol() ,GetSB ());
- item = tc->InsertItem ( buffer, parent );
- trans = FirstTranslation ( sh );
- while ( trans )
- {
- if ( !changes || trans->IsChanged ())
- {
- trans->AddToTree ( tc, item );
- }
- trans = NextTranslation ( sh );
- }
- if ( ID() != -1 )
- {
- sprintf ( buffer, "ID : %d", ID ());
- tc->InsertItem ( buffer, item );
- }
- if ( strcmp ( WaveSB(), "" ) )
- {
- sprintf ( buffer, "WAVE : %s", WaveSB() );
- tc->InsertItem ( buffer, item );
- }
- if ( line_number != -1 )
- {
- sprintf ( buffer, "LINE : %d", line_number );
- tc->InsertItem ( buffer, item );
- }
- sprintf ( buffer, "REV : %d", revision );
- tc->InsertItem ( buffer, item );
- sprintf ( buffer, "LEN : %d", this->Len() );
- tc->InsertItem ( buffer, item );
- }
- Translation::Translation ( void )
- {
- text = new OLEString ( );
- comment = new OLEString ( );
- revision = 0;
- sent = FALSE;
-
- }
- Translation::~Translation ( )
- {
- delete text;
- delete comment;
- }
- int Translation::IsSent ( void )
- {
- return sent;
- }
- void Translation::Sent ( int val )
- {
- sent = val;
- }
- void Translation::SetDB ( TransDB *new_db )
- {
- db = new_db;
- }
- Translation* Translation::Clone ( void )
- {
- Translation *clone = new Translation();
- clone->Set ( Get ());
- clone->SetComment ( Comment ());
- clone->SetLangID ( GetLangID ());
- clone->SetRevision ( Revision ());
- return clone;
- }
- void Translation::AddToTree ( CTreeCtrl *tc, HTREEITEM parent, int changes )
- {
- HTREEITEM item;
- sprintf ( buffer, "%s%c : %s", Language(), ChangedSymbol(), GetSB ());
- item = tc->InsertItem ( buffer, parent );
- if ( strcmp ( CommentSB(), "" ) )
- {
- sprintf ( buffer, "COMMENT: %s", CommentSB() );
- tc->InsertItem ( buffer, item );
- }
- sprintf ( buffer, "REV : %d", revision );
- tc->InsertItem ( buffer, item );
- sprintf ( buffer, "LEN : %d", Len() );
- tc->InsertItem ( buffer, item );
- }
- int Translation::TooLong ( int maxlen )
- {
- return maxlen != 0 && text->Len () > maxlen;
- }
- int Translation::ValidateFormat ( NoxText *ntext )
- {
- return SameFormat ( text->Get(), ntext->Get ());
- }
- int TransDB::Warnings ( CNoxstringDlg *dlg )
- {
- NoxLabel *label;
- ListSearch sh_label;
- int count = 0;
- int warnings = 0;
- List dups;
- if ( dlg )
- {
- dlg->InitProgress ( NumLabels ());
- dlg->Log ("");
- dlg->Log ("Generals.str Warnigs:");
- dlg->Status ( "Creating warnings report...", FALSE );
- }
- text_bin->Clear();
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- NoxText *existing_text;
- ListSearch sh_text;
- text = label->FirstText ( sh_text );
- while ( text )
- {
- if ( text->Len ( ) == 0 )
- {
- if ( dlg )
- {
- sprintf ( buffer, "Warning:: text at line %5d is NULL",
- text->LineNumber());
- dlg->Log ( buffer );
- }
- warnings++;
- }
- else if ( !DuplicatesAllowed() && ( existing_text = FindText ( text->Get () )))
- {
- warnings++;
- if ( dlg )
- {
- DupNode *dup = new DupNode ( text, existing_text );
- dups.Add ( dup );
- }
- }
- else
- {
- text_bin->Add ( text, text->Get() );
- }
- text = label->NextText ( sh_text );
- }
- count++;
- if ( dlg )
- {
- dlg->SetProgress ( count );
- }
- label = NextLabel ( sh_label );
- }
- if ( dlg )
- {
- DupNode *dup;
- while ( (dup = (DupNode*)dups.LastNode ()))
- {
- sprintf ( buffer, "Warning:: text at line %5d is a duplicate of text on line %5d",
- dup->Duplicate()->LineNumber(), dup->Original()->LineNumber());
- dlg->Log ( buffer );
- dup->Remove ();
- delete dup;
- }
- sprintf ( buffer, "Total warnings: %d", warnings );
- dlg->Log ( buffer );
- dlg->Ready();
- }
- return warnings;
- }
- int TransDB::Errors ( CNoxstringDlg *dlg )
- {
- NoxLabel *label;
- NoxLabel *existing_label;
- ListSearch sh_label;
- Bin *tbin = new Bin ();
- int count = 0;
- int errors = 0;
- if ( dlg )
- {
- dlg->InitProgress ( NumLabels ());
- dlg->Log ("");
- dlg->Log ("Generals.str Errors:");
- dlg->Status ( "Creating error report...", FALSE );
- }
- label_bin->Clear();
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- NoxText *existing_text;
- ListSearch sh_text;
- if ( !MultiTextAllowed () && label->NumStrings () > 1 )
- {
- errors++;
- if ( dlg )
- {
- sprintf ( buffer, "Error : Label \"%s\" at line %d is has more than 1 string defined",
- label->NameSB(), label->LineNumber());
- dlg->Log ( buffer );
- }
-
- }
- if ( ( existing_label = FindLabel ( label->Name () )))
- {
- errors++;
- if ( dlg )
- {
- sprintf ( buffer, "Error : Label \"%s\" at line %d is already defined on line %d",
- label->NameSB(), label->LineNumber(), existing_label->LineNumber());
- dlg->Log ( buffer );
- }
- }
- label_bin->Add ( label, label->Name());
- tbin->Clear ();
- text = label->FirstText ( sh_text );
- while ( text )
- {
- if ( ( existing_text = (NoxText *) tbin->Get ( text->Get () )))
- {
- errors++;
- if ( dlg )
- {
- sprintf ( buffer, "Error : Label \"%s\" has duplicate text at line %d",
- label->NameSB(), text->LineNumber());
- dlg->Log ( buffer );
- }
- }
- tbin->Add ( text, text->Get() );
- // check string length against max len
- if ( label->MaxLen () )
- {
- if ( text->Len () > label->MaxLen ())
- {
- errors++;
- if ( dlg )
- {
- sprintf ( buffer, "Error : The US text at line %d (for label \"%s\") exceeds the max length",
- text->LineNumber(), label->NameSB());
- dlg->Log ( buffer );
- }
- }
- }
- text = label->NextText ( sh_text );
- }
- count++;
- if ( dlg )
- {
- dlg->SetProgress ( count );
- }
- label = NextLabel ( sh_label );
- }
- if ( dlg )
- {
- sprintf ( buffer, "Total errors: %d", errors );
- dlg->Log ( buffer );
- dlg->Ready();
- }
- delete tbin;
- last_error_count = errors;
- checked_for_errors = TRUE;
- return errors;
- }
- CWaveInfo::CWaveInfo ( void )
- {
- wave_valid = FALSE;
- missing = TRUE;
- }
- void TransDB::VerifyDialog( LangID langid, void (*cb) (void) )
- {
- NoxLabel *label;
- ListSearch sh_label;
- int count = 0;
- LANGINFO *linfo = GetLangInfo ( langid );
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- ListSearch sh_text;
- text = label->FirstText ( sh_text );
- while ( text )
- {
- if ( text->IsDialog ())
- {
- if ( text->DialogIsPresent ( DialogPath, langid ))
- {
- text->DialogIsValid ( DialogPath, langid );
- }
- }
- text = label->NextText ( sh_text );
- }
- if ( cb )
- {
- cb();
- }
- label = NextLabel ( sh_label );
- }
- }
- void TransDB::InvalidateDialog( LangID langid )
- {
- NoxLabel *label;
- ListSearch sh_label;
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- ListSearch sh_text;
- text = label->FirstText ( sh_text );
- while ( text )
- {
- if ( text->IsDialog ())
- {
- text->InvalidateWave ( langid );
- }
- text = label->NextText ( sh_text );
- }
- label = NextLabel ( sh_label );
- }
- }
- int TransDB::ReportDialog( DLGREPORT *report, LangID langid, void (*print) ( const char *), PMASK pmask )
- {
- NoxLabel *label;
- ListSearch sh_label;
- int count = 0;
- DLGREPORT _info;
- DLGREPORT *info = &_info;
- int skip_verify = FALSE;
- LANGINFO *linfo = GetLangInfo ( langid );
- if ( report )
- {
- info = report;
- }
- memset ( info, 0, sizeof ( DLGREPORT ));
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- ListSearch sh_text;
- text = label->FirstText ( sh_text );
- while ( text )
- {
- if ( text->IsDialog ())
- {
- if ( text->DialogIsPresent ( DialogPath, langid))
- {
- if ( !text->DialogIsValid ( DialogPath, langid, FALSE ) )
- {
- if ( print && pmask & PMASK_UNRESOLVED )
- {
- sprintf ( buffer, "%d: audio file \"%s%s.wav\" not verified", text->ID(), text->WaveSB (), linfo->character);
-
- print ( buffer );
- }
- info->unresolved++;
- }
- else
- {
- info->resolved++;
- }
- }
- else
- {
- if ( print && pmask & PMASK_MISSING )
- {
- sprintf ( buffer, "%d: audio file \"%s%s.wav\" missing", text->ID(), text->WaveSB (), linfo->character);
-
- print ( buffer );
- }
- info->missing++;
- }
-
- info->numdialog++;
- }
- text = label->NextText ( sh_text );
- }
- label = NextLabel ( sh_label );
- }
- return info->missing + info->unresolved + info->errors ;
- }
- int TransDB::ReportTranslations( TRNREPORT *report, LangID langid, void (*print) ( const char *buffer), PMASK pmask )
- {
- NoxLabel *label;
- ListSearch sh_label;
- int count = 0;
- int first_error = FALSE;
- TRNREPORT _info;
- TRNREPORT *info = &_info;
- if ( report )
- {
- info = report;
- }
- memset ( info, 0, sizeof ( TRNREPORT ));
- label = FirstLabel ( sh_label );
- while ( label )
- {
- NoxText *text;
- ListSearch sh_text;
- int maxlen = label->MaxLen ();
- text = label->FirstText ( sh_text );
- while ( text )
- {
- int textnum = 0;
- Translation *trans;
- int too_big = FALSE;
- if ( text->Len ())
- {
- info->numstrings++;
- if ( langid != LANGID_US )
- {
- if ( (trans = text->GetTranslation ( langid ) ))
- {
- if ( maxlen && trans->Len() > maxlen )
- {
- if ( print && pmask & PMASK_TOOLONG )
- {
- sprintf ( buffer, "%d: translation is too long by %d characters", text->ID (), trans->Len() - maxlen);
-
- print ( buffer );
- }
- too_big = TRUE;
- }
-
- if ( text->Revision () > trans->Revision ())
- {
- if ( print && pmask & PMASK_RETRANSLATE )
- {
- sprintf ( buffer, "%d: needs re-translation", text->ID () );
-
- print ( buffer );
- }
- info->retranslate++;
- }
- else
- {
- info->translated++;
- if ( !trans->ValidateFormat ( text ) )
- {
- if ( print && pmask & PMASK_BADFORMAT )
- {
- sprintf ( buffer, "%d: translation has differring formating to original", text->ID () );
-
- print ( buffer );
- }
- info->bad_format++;
- }
- }
- }
- else
- {
- if ( print && pmask & PMASK_MISSING )
- {
- sprintf ( buffer, "%d: not translated", text->ID ());
-
- print ( buffer );
- }
- info->missing++;
- }
- }
- else
- {
- // check maxlen
- if ( maxlen )
- {
- if ( text->Len() > maxlen )
- {
- if ( print && pmask & PMASK_TOOLONG )
- {
- sprintf ( buffer, "%d: is too long by %d characters", text->ID (), text->Len() - maxlen);
-
- print ( buffer );
- }
- too_big = TRUE;
- }
- }
- }
-
- }
- if ( too_big )
- {
- info->too_big++;
- }
- text = label->NextText ( sh_text );
- }
- info->numlabels++;
- label = NextLabel ( sh_label );
- }
- info->errors = info->too_big + info->bad_format;
- return info->missing + info->too_big + info->retranslate + info->bad_format;
- }
|