#include <config.h>
#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"
// KmodInfo
KmodInfo::KmodInfo()
{
+#if 0
exception_list = 0;
+#endif
}
+#if 0
// Default Trans
bool DefaultTrans::init_ = false;
}
+#if 0
string const DefaultTrans::process(char c, TransManager & k)
{
char dummy[2] = "?";
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
}
}
-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;
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();
delete kmod_list_[i];
kmod_list_[i] = 0;
}
+#else
+ kmod_list_.clear();
+ keymap_.clear();
+#endif
}
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) {
string & temp =
keymap_[static_cast<unsigned char>(keys[i])];
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
}
{
bool error = false;
- while (lex.IsOK() && !error) {
+ while (lex.isOK() && !error) {
switch (lex.lex()) {
case KMOD:
{
} else
return -1;
- string keys = lex.GetString();
+ string const keys = lex.getString();
if (lex.next(true)) {
if (lyxerr.debugging(Debug::KBMAP))
} 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()
} 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: {
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<int, KmodInfo>::iterator it1 =
+ kmod_list_.find(accent_1);
+ std::map<int, KmodInfo>::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()
} else
return -1;
- InsertException(kmod_list_[accent_1]->exception_list,
+ InsertException(kmod_list_[accent_1].exception_list,
static_cast<char>(key), allowed,
true, accent_2);
+#else
+ std::map<int, string>::iterator it = keymap_.begin();
+ std::map<int, string>::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<char>(it->first), allowed,
+ true, accent_2);
+#endif
}
break;
case KMAP: {
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 << "'"
if (lyxerr.debugging(Debug::KBMAP))
lyxerr << "\t`" << lex.text() << "'"
<< endl;
- accent = getkeymod(lex.GetString());
+ accent = getkeymod(lex.getString());
} else
return -1;
} else
return -1;
- InsertException(kmod_list_[accent]->exception_list,
+ InsertException(kmod_list_[accent].exception_list,
key, str);
break;
}
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<int, KmodInfo>::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<unsigned char>(c));
if (t.empty() && c != 0) {
*kmod_list_[static_cast<tex_accent>(t[1])]);
}
}
+#else
+string const Trans::process(char c, TransManager & k)
+{
+ string const t = Match(static_cast<unsigned char>(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<tex_accent>(t[1])]);
+#else
+ return k.deadkey(c,
+ kmod_list_[static_cast<tex_accent>(t[1])]);
+#endif
+ }
+}
+#endif
int Trans::Load(string const & language)