X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftrans.C;h=6f1e3809f7461ba87cb56d4360c1eef60c64f004;hb=c93e9dcbc59d0b404561dbc7c373716f11fc13f1;hp=98b6c45c0dd3cee30135d2739a8e15f3590b4223;hpb=85f8bf7445db373d95bad64faede475e0f6f9049;p=lyx.git diff --git a/src/trans.C b/src/trans.C index 98b6c45c0d..6f1e3809f7 100644 --- a/src/trans.C +++ b/src/trans.C @@ -1,12 +1,13 @@ #include #ifdef __GNUG__ -#pragma implementation "trans.h" +#pragma implementation #endif #include "LyXView.h" #include "trans.h" #include "support/filetools.h" +#include "support/lstrings.h" #include "tex-strings.h" #include "lyxlex.h" #include "debug.h" @@ -18,10 +19,13 @@ using std::endl; // KmodInfo KmodInfo::KmodInfo() { +#if 0 exception_list = 0; +#endif } +#if 0 // Default Trans bool DefaultTrans::init_ = false; @@ -35,6 +39,7 @@ DefaultTrans::DefaultTrans() } +#if 0 string const DefaultTrans::process(char c, TransManager & k) { char dummy[2] = "?"; @@ -42,14 +47,22 @@ string const DefaultTrans::process(char c, TransManager & k) return k.normalkey(c, dummy); } - +#else +string const DefaultTrans::process(char c, TransManager & k) +{ + return k.normalkey(c); +} +#endif +#endif // Trans class Trans::Trans() { - for(int i = 0; i < TEX_MAX_ACCENT + 1; ++i) +#if 0 + for (int i = 0; i < TEX_MAX_ACCENT + 1; ++i) kmod_list_[i] = 0; +#endif } @@ -59,9 +72,10 @@ Trans::~Trans() } -void Trans::InsertException(Trans::keyexc & exclist, char c, +void Trans::InsertException(KmodException & exclist, char c, string const & data, bool flag, tex_accent accent) { +#if 0 keyexc p = new Keyexc; p->next = exclist; p->c = c; @@ -71,32 +85,51 @@ void Trans::InsertException(Trans::keyexc & exclist, char c, p->accent = accent; exclist = p; +#else + Keyexc p; + p.c = c; + p.data = data; + p.combined = flag; + p.accent = accent; + exclist.insert(exclist.begin(), p); + // or just + // exclist.push_back(p); +#endif } -void Trans::FreeException(Trans::keyexc & exclist) +void Trans::FreeException(KmodException & exclist) { +#if 0 Trans::keyexc p = exclist; while (p) { p = exclist->next; delete exclist; exclist = p; } +#else + exclist.clear(); +#endif } void Trans::FreeKeymap() { - for(int i = 0; i < 256; ++i) +#if 0 + for (int i = 0; i < 256; ++i) if (!keymap_[i].empty()) { keymap_[i].erase(); } - for(int 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]; kmod_list_[i] = 0; } +#else + kmod_list_.clear(); + keymap_.clear(); +#endif } @@ -132,36 +165,37 @@ struct keyword_item kmapTags[K_LAST - 1] = { tex_accent getkeymod(string const &); +#if 0 void Trans::AddDeadkey(tex_accent accent, string const & keys, string const & allowed) +#else +void Trans::AddDeadkey(tex_accent accent, string const & keys) +#endif { +#if 0 if (kmod_list_[accent]) { FreeException(kmod_list_[accent]->exception_list); delete kmod_list_[accent]; } - kmod_list_[accent] = new kmod_list_decl; + kmod_list_[accent] = new KmodInfo; kmod_list_[accent]->data = keys; kmod_list_[accent]->accent = accent; +#else + KmodInfo tmp; + tmp.data = keys; + tmp.accent = accent; + kmod_list_[accent] = tmp; +#endif +#if 0 if (allowed == "native") { kmod_list_[accent]->allowed= lyx_accent_table[accent].native; - } else { + } else { kmod_list_[accent]->allowed = allowed; } - - for(string::size_type i = 0; i < keys.length(); ++i) { -#if 0 - string * temp = - &keymap_[static_cast(keys[i])]; -#warning this is not really clean we should find a cleaner way (Jug) - *temp = "xx"; /* this is needed for the being sure that - the below assignment is not assigned to - a nullpointer (if size of string = 0) - */ - (*temp)[0] = 0; - (*temp)[1] = accent; -#else + + for (string::size_type i = 0; i < keys.length(); ++i) { string & temp = keymap_[static_cast(keys[i])]; if (!temp.empty()) @@ -172,18 +206,27 @@ void Trans::AddDeadkey(tex_accent accent, string const & keys, // Lgb temp += char(0); temp += char(accent); -#endif } +#else + for (string::size_type i = 0; i < keys.length(); ++i) { + string tmp; + tmp += char(0); + tmp += char(accent); + keymap_[keys[i]] = tmp; + } +#endif +#if 0 kmod_list_[accent]->exception_list = 0; +#endif } -int Trans::Load(LyXLex & lex) +int Trans::Load(LyXLex & lex) { bool error = false; - while (lex.IsOK() && !error) { - switch(lex.lex()) { + while (lex.isOK() && !error) { + switch (lex.lex()) { case KMOD: { if (lyxerr.debugging(Debug::KBMAP)) @@ -195,20 +238,24 @@ int Trans::Load(LyXLex & lex) } else return -1; - string keys = lex.GetString(); + string const keys = lex.getString(); if (lex.next(true)) { - if ( lyxerr.debugging(Debug::KBMAP)) + if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "accent\t`" << lex.text() << "'" << endl; } else return -1; - tex_accent accent = getkeymod(lex.GetString()); + tex_accent accent = getkeymod(lex.getString()); if (accent == TEX_NOACCENT) return -1; +#if 1 +//#warning This code should be removed... + // But we need to fix up all the kmap files first + // so that this field is not present anymore. if (lex.next(true)) { if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "allowed\t`" << lex.text() @@ -216,9 +263,11 @@ int Trans::Load(LyXLex & lex) } else return -1; - string allowed = lex.GetString(); - - AddDeadkey(accent, keys, allowed); + string const allowed = lex.getString(); + AddDeadkey(accent, keys /*, allowed*/); +#else + AddDeadkey(accent, keys); +#endif break; } case KCOMB: { @@ -243,14 +292,26 @@ int Trans::Load(LyXLex & lex) tex_accent accent_2= getkeymod(str); if (accent_2 == TEX_NOACCENT) return -1; +#if 0 if (kmod_list_[accent_1] == 0 || kmod_list_[accent_2] == 0) return -1; +#else + std::map::iterator it1 = + kmod_list_.find(accent_1); + std::map::iterator it2 = + kmod_list_.find(accent_2); + if (it1 == kmod_list_.end() + || it2 == kmod_list_.end()) { + return -1; + } +#endif // Find what key accent_2 is on - should // check about accent_1 also +#if 0 int key = 0; - for(; key < 256; ++key) { + for (; key < 256; ++key) { if (!keymap_[key].empty() && keymap_[key][0] == 0 && keymap_[key][1] == accent_2) @@ -265,9 +326,31 @@ int Trans::Load(LyXLex & lex) } else return -1; - InsertException(kmod_list_[accent_1]->exception_list, + InsertException(kmod_list_[accent_1].exception_list, static_cast(key), allowed, true, accent_2); +#else + std::map::iterator it = keymap_.begin(); + std::map::iterator end = keymap_.end(); + for (; it != end; ++it) { + if (!it->second.empty() + && it->second[0] == 0 + && it->second[1] == accent_2) + break; + } + string allowed; + if (lex.next()) { + allowed = lex.getString(); + lyxerr[Debug::KBMAP] << "allowed: " + << allowed << endl; + } else { + return -1; + } + + InsertException(kmod_list_[accent_1].exception_list, + static_cast(it->first), allowed, + true, accent_2); +#endif } break; case KMAP: { @@ -285,8 +368,6 @@ int Trans::Load(LyXLex & lex) if (lex.next(true)) { 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 << "'" @@ -307,7 +388,7 @@ int Trans::Load(LyXLex & lex) if (lyxerr.debugging(Debug::KBMAP)) lyxerr << "\t`" << lex.text() << "'" << endl; - accent = getkeymod(lex.GetString()); + accent = getkeymod(lex.getString()); } else return -1; @@ -327,7 +408,7 @@ int Trans::Load(LyXLex & lex) } else return -1; - InsertException(kmod_list_[accent]->exception_list, + InsertException(kmod_list_[accent].exception_list, key, str); break; } @@ -346,24 +427,33 @@ int Trans::Load(LyXLex & lex) bool Trans::isAccentDefined(tex_accent accent, KmodInfo & i) const { +#if 0 if (kmod_list_[accent] != 0) { i = *kmod_list_[accent]; return true; } return false; +#else + std::map::const_iterator cit = kmod_list_.find(accent); + if (cit != kmod_list_.end()) { + i = cit->second; + return true; + } + return false; +#endif } +#if 0 string const Trans::process(char c, TransManager & k) { - string dummy("?"); - string dt = dummy; + string dt("?"); string const t = Match(static_cast(c)); if (t.empty() && c != 0) { dt[0] = c; return k.normalkey(c, dt); - } else if (!t.empty()) { + } else if (!t.empty() && t[0] != char(0)) { dt = t; return k.normalkey(c, dt); } else { @@ -371,11 +461,32 @@ string const Trans::process(char c, TransManager & k) *kmod_list_[static_cast(t[1])]); } } +#else +string const Trans::process(char c, TransManager & k) +{ + string const t = Match(static_cast(c)); + + if (t.empty() && c != 0) { + return k.normalkey(c); + } else if (!t.empty() && t[0] != char(0)) { + //return k.normalkey(c); + return t; + } else { +#if 0 + return k.deadkey(c, + *kmod_list_[static_cast(t[1])]); +#else + return k.deadkey(c, + kmod_list_[static_cast(t[1])]); +#endif + } +} +#endif int Trans::Load(string const & language) { - string filename = LibFileSearch("kbd", language, "kmap"); + string const filename = LibFileSearch("kbd", language, "kmap"); if (filename.empty()) return -1; @@ -383,7 +494,7 @@ 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; @@ -404,7 +515,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);