X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftrans.C;h=4e2d45c20a7e5355057fe5d54436aab07ce8ea47;hb=c90c5e6386ce69c34c99b3594d6fa452e6a13161;hp=460215817f1c6854a29a10aba4880db1f6ecadd5;hpb=35584afc1162dec2cf9fff79305e95cb3b75aefb;p=lyx.git diff --git a/src/trans.C b/src/trans.C index 460215817f..4e2d45c20a 100644 --- a/src/trans.C +++ b/src/trans.C @@ -1,7 +1,5 @@ #include -//#include - #ifdef __GNUG__ #pragma implementation "trans.h" #endif @@ -14,52 +12,35 @@ #include "debug.h" #include "trans_mgr.h" +using std::endl; + // KmodInfo KmodInfo::KmodInfo() { - exception_list=0; -} - - -KmodInfo::KmodInfo(const KmodInfo& o) -{ - (*this)=o; + exception_list = 0; } -KmodInfo& KmodInfo::operator=(const KmodInfo& o) -{ - if (this!=&o) { - allowed=o.allowed; - accent=o.accent; - data=o.data; - exception_list=o.exception_list; - } - - return *this; -} - - // Default Trans -bool DefaultTrans::init_=false; +bool DefaultTrans::init_ = false; DefaultTrans::DefaultTrans() { - if (init_==false) { + if (init_ == false) { // Do initialization - init_=true; + init_ = true; } } -string DefaultTrans::process(char c,TransManager& k) +string const DefaultTrans::process(char c, TransManager & k) { - char dummy[2]="?"; - dummy[0]=c; + char dummy[2] = "?"; + dummy[0] = c; - return k.normalkey(c,dummy); + return k.normalkey(c, dummy); } @@ -67,13 +48,8 @@ string DefaultTrans::process(char c,TransManager& k) Trans::Trans() { - int i; - - for(i=0; i<256; i++) - keymap_[i]=0; - - for(i=0; i next = exclist; - p -> c = c; + keyexc p = new Keyexc; + p->next = exclist; + p->c = c; p->data = data; - p->combined=flag; - p->accent=accent; + p->combined = flag; + p->accent = accent; exclist = p; } -void Trans::FreeException(Trans::keyexc& exclist) +void Trans::FreeException(Trans::keyexc & exclist) { - Trans::keyexc p; - - p = exclist; + Trans::keyexc p = exclist; while (p) { p = exclist->next; delete exclist; @@ -115,36 +87,33 @@ void Trans::FreeException(Trans::keyexc& exclist) void Trans::FreeKeymap() { - int i; - - for(i=0; i<256; i++) - if (keymap_[i]) { - delete keymap_[i]; - keymap_[i]=0; + for (int i = 0; i < 256; ++i) + if (!keymap_[i].empty()) { + keymap_[i].erase(); } - for(i=0; iexception_list); delete kmod_list_[i]; - kmod_list_[i]=0; + kmod_list_[i] = 0; } } -bool Trans::IsDefined() +bool Trans::IsDefined() const { return !name_.empty(); } -const string& Trans::GetName() +string const & Trans::GetName() const { return name_; } -enum _kmaptags { - KCOMB=1, +enum kmaptags_ { + KCOMB = 1, KMOD, KMAP, KXMOD, @@ -152,19 +121,19 @@ enum _kmaptags { }; -struct keyword_item kmapTags[K_LAST-1] = { - {"\\kcomb",KCOMB }, +struct keyword_item kmapTags[K_LAST - 1] = { + {"\\kcomb", KCOMB }, { "\\kmap", KMAP }, { "\\kmod", KMOD }, { "\\kxmod", KXMOD } }; -tex_accent getkeymod(const string&); +tex_accent getkeymod(string const &); -void Trans::AddDeadkey(tex_accent accent,const string& keys, - const string& allowed) +void Trans::AddDeadkey(tex_accent accent, string const & keys, + string const & allowed) { if (kmod_list_[accent]) { FreeException(kmod_list_[accent]->exception_list); @@ -175,27 +144,34 @@ void Trans::AddDeadkey(tex_accent accent,const string& keys, kmod_list_[accent] = new kmod_list_decl; kmod_list_[accent]->data = keys; kmod_list_[accent]->accent = accent; - if (allowed=="all") { - kmod_list_[accent]->allowed=lyx_accent_table[accent].native; + if (allowed == "native") { + kmod_list_[accent]->allowed= lyx_accent_table[accent].native; } else { kmod_list_[accent]->allowed = allowed; } - for(string::size_type i = 0; i < keys.length(); ++i) { - char * temp; - temp = keymap_[(unsigned char)keys[i]] = new char[2]; - temp[0] = 0; temp[1] = accent; + for (string::size_type i = 0; i < keys.length(); ++i) { + string & temp = + keymap_[static_cast(keys[i])]; + if (!temp.empty()) + temp.erase(); + + // But the question remains: "Should we be allowed + // to change bindings, without unbinding first?" + // Lgb + temp += char(0); + temp += char(accent); } - kmod_list_[accent]->exception_list=0; + kmod_list_[accent]->exception_list = 0; } -int Trans::Load(LyXLex &lex) +int Trans::Load(LyXLex & lex) { bool error = false; while (lex.IsOK() && !error) { - switch(lex.lex()) { + switch (lex.lex()) { case KMOD: { if (lyxerr.debugging(Debug::KBMAP)) @@ -210,7 +186,7 @@ int Trans::Load(LyXLex &lex) string keys = lex.GetString(); if (lex.next(true)) { - if ( lyxerr.debugging(Debug::KBMAP)) + if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "accent\t`" << lex.text() << "'" << endl; } else @@ -218,7 +194,7 @@ int Trans::Load(LyXLex &lex) tex_accent accent = getkeymod(lex.GetString()); - if (accent==TEX_NOACCENT) + if (accent == TEX_NOACCENT) return -1; if (lex.next(true)) { @@ -234,57 +210,61 @@ int Trans::Load(LyXLex &lex) break; } case KCOMB: { - const char *str; + string str; lyxerr[Debug::KBMAP] << "KCOMB:" << endl; if (lex.next(true)) { - str=lex.text(); + str= lex.text(); lyxerr[Debug::KBMAP] << str << endl; } else return -1; - tex_accent accent_1=getkeymod(str); - if (accent_1==TEX_NOACCENT) return -1; + tex_accent accent_1 = getkeymod(str); + if (accent_1 == TEX_NOACCENT) return -1; if (lex.next(true)) { - str=lex.text(); + str = lex.text(); lyxerr[Debug::KBMAP] << str << endl; } else return -1; - tex_accent accent_2=getkeymod(str); - if (accent_2==TEX_NOACCENT) return -1; + tex_accent accent_2= getkeymod(str); + if (accent_2 == TEX_NOACCENT) return -1; - if (kmod_list_[accent_1]==0 || kmod_list_[accent_2]==0) + if (kmod_list_[accent_1] == 0 + || kmod_list_[accent_2] == 0) return -1; - // Find what key accent_2 is on - should check about accent_1 also - int key; - - for(key=0;key<256;key++) - if (keymap_[key] && keymap_[key][0]==0 && keymap_[key][1]==accent_2) + // Find what key accent_2 is on - should + // check about accent_1 also + int key = 0; + for (; key < 256; ++key) { + if (!keymap_[key].empty() + && keymap_[key][0] == 0 + && keymap_[key][1] == accent_2) break; - + } string allowed; if (lex.next()) { - allowed=lex.GetString(); + allowed = lex.GetString(); lyxerr[Debug::KBMAP] << "allowed: " << allowed << endl; } else return -1; - InsertException(kmod_list_[accent_1]->exception_list,(char)key,allowed,true,accent_2); + InsertException(kmod_list_[accent_1]->exception_list, + static_cast(key), allowed, + true, accent_2); } break; case KMAP: { - char key_from; - char *string_to; + unsigned char key_from; if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "KMAP:\t" << lex.text() << endl; if (lex.next(true)) { - key_from=lex.text()[0]; + key_from = lex.text()[0]; if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "\t`" << lex.text() << "'" << endl; @@ -292,9 +272,10 @@ int Trans::Load(LyXLex &lex) return -1; if (lex.next(true)) { - char const *t = lex.text(); - string_to = strcpy(new char[strlen(t)+1],t); - keymap_[(unsigned char)key_from]=string_to; + string string_to = lex.text(); + //char * string_to = + // strcpy(new char[strlen(t)+1], t); + keymap_[key_from] = string_to; if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "\t`" << string_to << "'" << endl; @@ -306,7 +287,7 @@ int Trans::Load(LyXLex &lex) case KXMOD: { tex_accent accent; char key; - const char *str; + string str; if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "KXMOD:\t" << lex.text() << endl; @@ -322,7 +303,7 @@ int Trans::Load(LyXLex &lex) if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "\t`" << lex.text() << "'" << endl; - key=lex.text()[0]; + key = lex.text()[0]; } else return -1; @@ -330,11 +311,12 @@ int Trans::Load(LyXLex &lex) if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "\t`" << lex.text() << "'" << endl; - str=lex.text(); + str = lex.text(); } else return -1; - InsertException(kmod_list_[accent]->exception_list,key,str); + InsertException(kmod_list_[accent]->exception_list, + key, str); break; } case LyXLex::LEX_FEOF: @@ -350,34 +332,38 @@ int Trans::Load(LyXLex &lex) } -bool Trans::isAccentDefined(tex_accent accent,KmodInfo& i) +bool Trans::isAccentDefined(tex_accent accent, KmodInfo & i) const { - if (kmod_list_[accent]!=0) { - i=*kmod_list_[accent]; + if (kmod_list_[accent] != 0) { + i = *kmod_list_[accent]; return true; } return false; } -string Trans::process(char c,TransManager& k) +string const Trans::process(char c, TransManager & k) { - char dummy[2]="?"; - char *dt=dummy; - char *t=Match(c); - - - if ((t==0 && (*dt=c)) || (t[0]!=0 && (dt=t)) ){ - return k.normalkey(c,dt); + string dummy("?"); + string dt = dummy; + string const t = Match(static_cast(c)); + + if (t.empty() && c != 0) { + dt[0] = c; + return k.normalkey(c, dt); + } else if (!t.empty() && t[0] != char(0)) { + dt = t; + return k.normalkey(c, dt); } else { - return k.deadkey(c,*kmod_list_[(tex_accent)t[1]]); + return k.deadkey(c, + *kmod_list_[static_cast(t[1])]); } } -int Trans::Load(string const &language) +int Trans::Load(string const & language) { - string filename = LibFileSearch("kbd", language, "kmap"); + string const filename = LibFileSearch("kbd", language, "kmap"); if (filename.empty()) return -1; @@ -385,10 +371,10 @@ int Trans::Load(string const &language) LyXLex lex(kmapTags, K_LAST-1); lex.setFile(filename); - int res=Load(lex); + int const res = Load(lex); - if (res==0) { - name_=language; + if (res == 0) { + name_ = language; } else name_.erase(); @@ -396,19 +382,20 @@ int Trans::Load(string const &language) } -tex_accent getkeymod(string const &p) +tex_accent getkeymod(string const & p) /* return modifier - decoded from p and update p */ { - for (int i = 1; i <= TEX_MAX_ACCENT; i++) { + for (int i = 1; i <= TEX_MAX_ACCENT; ++i) { if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "p = " << p << ", lyx_accent_table[" << i - <<"].name = `" << lyx_accent_table[i].name + << "].name = `" << lyx_accent_table[i].name << "'" << endl; - if ( lyx_accent_table[i].name && contains(p, lyx_accent_table[i].name)) { + if (lyx_accent_table[i].name + && contains(p, lyx_accent_table[i].name)) { lyxerr[Debug::KBMAP] << "Found it!" << endl; - return (tex_accent)i; + return static_cast(i); } } return TEX_NOACCENT;