X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftrans.C;h=6f1e3809f7461ba87cb56d4360c1eef60c64f004;hb=c93e9dcbc59d0b404561dbc7c373716f11fc13f1;hp=e324cc46d9f32b93efb80cbb4926fe7fbfb32e8f;hpb=85a5ea7bfc80e179a61a99f2955455e84d3384cc;p=lyx.git diff --git a/src/trans.C b/src/trans.C index e324cc46d9..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() { +#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,22 +85,37 @@ 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() { +#if 0 for (int i = 0; i < 256; ++i) if (!keymap_[i].empty()) { keymap_[i].erase(); @@ -97,6 +126,10 @@ void Trans::FreeKeymap() delete kmod_list_[i]; kmod_list_[i] = 0; } +#else + kmod_list_.clear(); + keymap_.clear(); +#endif } @@ -132,28 +165,36 @@ 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 { -#endif kmod_list_[accent]->allowed = allowed; -#if 0 } -#endif - + for (string::size_type i = 0; i < keys.length(); ++i) { string & temp = keymap_[static_cast(keys[i])]; @@ -166,15 +207,25 @@ void Trans::AddDeadkey(tex_accent accent, string const & keys, temp += char(0); temp += char(accent); } +#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) { + while (lex.isOK() && !error) { switch (lex.lex()) { case KMOD: { @@ -187,7 +238,7 @@ 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)) @@ -196,11 +247,15 @@ int Trans::Load(LyXLex & lex) } 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() @@ -208,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: { @@ -235,12 +292,24 @@ 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) { if (!keymap_[key].empty() @@ -257,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: { @@ -277,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 << "'" @@ -299,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; @@ -319,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; } @@ -338,18 +427,26 @@ 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)); @@ -364,6 +461,27 @@ 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)