X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftrans.C;h=4e2d45c20a7e5355057fe5d54436aab07ce8ea47;hb=664eb7ff45dbb4fabc22ec0b56798031a82335b1;hp=ee3b985ff8b769081166059850969ce06dfc9949;hpb=7c6267e4b10364cc892776e0a426eb32ade6b0b4;p=lyx.git diff --git a/src/trans.C b/src/trans.C index ee3b985ff8..4e2d45c20a 100644 --- a/src/trans.C +++ b/src/trans.C @@ -12,6 +12,8 @@ #include "debug.h" #include "trans_mgr.h" +using std::endl; + // KmodInfo KmodInfo::KmodInfo() @@ -33,7 +35,7 @@ DefaultTrans::DefaultTrans() } -string DefaultTrans::process(char c, TransManager & k) +string const DefaultTrans::process(char c, TransManager & k) { char dummy[2] = "?"; dummy[0] = c; @@ -46,11 +48,7 @@ string DefaultTrans::process(char c, TransManager & k) Trans::Trans() { - int i = 0; - for(; i < 256; ++i) - keymap_[i] = 0; - - for(i = 0; i < TEX_MAX_ACCENT + 1; ++i) + for (int i = 0; i < TEX_MAX_ACCENT + 1; ++i) kmod_list_[i] = 0; } @@ -64,9 +62,7 @@ Trans::~Trans() void Trans::InsertException(Trans::keyexc & exclist, char c, string const & data, bool flag, tex_accent accent) { - keyexc p; - - p = new Keyexc; + keyexc p = new Keyexc; p->next = exclist; p->c = c; @@ -91,13 +87,11 @@ void Trans::FreeException(Trans::keyexc & exclist) void Trans::FreeKeymap() { - int i = 0; - for(; 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; i < TEX_MAX_ACCENT + 1; ++i) + for (int i = 0; i < TEX_MAX_ACCENT + 1; ++i) if (kmod_list_[i]) { FreeException(kmod_list_[i]->exception_list); delete kmod_list_[i]; @@ -106,19 +100,19 @@ void Trans::FreeKeymap() } -bool Trans::IsDefined() +bool Trans::IsDefined() const { return !name_.empty(); } -string const & Trans::GetName() +string const & Trans::GetName() const { return name_; } -enum _kmaptags { +enum kmaptags_ { KCOMB = 1, KMOD, KMAP, @@ -150,17 +144,23 @@ void Trans::AddDeadkey(tex_accent accent, string const & keys, kmod_list_[accent] = new kmod_list_decl; kmod_list_[accent]->data = keys; kmod_list_[accent]->accent = accent; - if (allowed == "all") { + 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 = - keymap_[static_cast(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; } @@ -171,7 +171,7 @@ 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)) @@ -186,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 @@ -210,7 +210,7 @@ int Trans::Load(LyXLex & lex) break; } case KCOMB: { - char const * str; + string str; lyxerr[Debug::KBMAP] << "KCOMB:" << endl; if (lex.next(true)) { @@ -238,8 +238,9 @@ int Trans::Load(LyXLex & lex) // Find what key accent_2 is on - should // check about accent_1 also int key = 0; - for(; key < 256; ++key) { - if (keymap_[key] && keymap_[key][0] == 0 + for (; key < 256; ++key) { + if (!keymap_[key].empty() + && keymap_[key][0] == 0 && keymap_[key][1] == accent_2) break; } @@ -259,12 +260,11 @@ int Trans::Load(LyXLex & lex) break; case KMAP: { unsigned char key_from; - char * string_to; 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; @@ -272,8 +272,9 @@ 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); + 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 << "'" @@ -286,7 +287,7 @@ int Trans::Load(LyXLex & lex) case KXMOD: { tex_accent accent; char key; - char const * str; + string str; if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "KXMOD:\t" << lex.text() << endl; @@ -331,9 +332,9 @@ 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) { + if (kmod_list_[accent] != 0) { i = *kmod_list_[accent]; return true; } @@ -341,13 +342,17 @@ bool Trans::isAccentDefined(tex_accent accent, KmodInfo & i) } -string Trans::process(char c, TransManager & k) +string const Trans::process(char c, TransManager & k) { - char dummy[2] = "?"; - char * dt = dummy; - char * t = Match(static_cast(c)); - - if ((t == 0 && (*dt = c)) || (t[0] != 0 && (dt = t)) ){ + 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, @@ -358,7 +363,7 @@ string Trans::process(char c, TransManager & k) int Trans::Load(string const & language) { - string filename = LibFileSearch("kbd", language, "kmap"); + string const filename = LibFileSearch("kbd", language, "kmap"); if (filename.empty()) return -1; @@ -366,12 +371,12 @@ 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; } else - name_.clear(); + name_.erase(); return res; } @@ -387,7 +392,7 @@ tex_accent getkeymod(string const & p) << "].name = `" << lyx_accent_table[i].name << "'" << endl; - if ( 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 static_cast(i);