]> git.lyx.org Git - lyx.git/blobdiff - src/trans.C
another pesky \#warning snuck in
[lyx.git] / src / trans.C
index 122e7f3cf033b8bf8072169db3f952a974e1bc87..4e2d45c20a7e5355057fe5d54436aab07ce8ea47 100644 (file)
@@ -35,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;
@@ -48,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;
 }
 
@@ -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<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<unsigned char>(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;
                        }
@@ -271,9 +272,9 @@ int Trans::Load(LyXLex & lex)
                                return -1;
 
                        if (lex.next(true)) {
-                               char const * t = lex.text();
-                               char * 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<unsigned char>(c));
-    
-       if ((t == 0 && (*dt = c)) || (t[0] != 0 && (dt = t)) ){
+       string dummy("?");
+       string dt = dummy;
+       string const t = Match(static_cast<unsigned char>(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<tex_accent>(i);