}
-string DefaultTrans::process(char c, TransManager & k)
+string const DefaultTrans::process(char c, TransManager & k)
{
char dummy[2] = "?";
dummy[0] = c;
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;
}
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];
}
-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,
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;
}
bool error = false;
while (lex.IsOK() && !error) {
- switch(lex.lex()) {
+ switch (lex.lex()) {
case KMOD:
{
if (lyxerr.debugging(Debug::KBMAP))
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
break;
}
case KCOMB: {
- char const * str;
+ string str;
lyxerr[Debug::KBMAP] << "KCOMB:" << endl;
if (lex.next(true)) {
// 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;
}
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 << "'"
case KXMOD: {
tex_accent accent;
char key;
- char const * str;
+ string str;
if (lyxerr.debugging(Debug::KBMAP))
lyxerr << "KXMOD:\t" << lex.text() << endl;
}
-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;
}
}
-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,
int Trans::Load(string const & language)
{
- string filename = LibFileSearch("kbd", language, "kmap");
+ string const filename = LibFileSearch("kbd", language, "kmap");
if (filename.empty())
return -1;
LyXLex lex(kmapTags, K_LAST-1);
lex.setFile(filename);
- int res = Load(lex);
+ int const res = Load(lex);
if (res == 0) {
name_ = language;
<< "].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);