]> git.lyx.org Git - lyx.git/blobdiff - src/trans_mgr.C
Add string << operators for the other streams as well, and removes
[lyx.git] / src / trans_mgr.C
index f7e4bb63102a5e9e0a47dc14ca34c94d9cf73175..c6f5bd7ab6158f531710ab96d043d447f50736a4 100644 (file)
@@ -19,8 +19,8 @@
 using std::endl;
 using std::pair;
 
-extern string DoAccent(string const &, tex_accent);
-extern string DoAccent(char, tex_accent);
+extern string const DoAccent(string const &, tex_accent);
+extern string const DoAccent(char, tex_accent);
 extern BufferView * current_view;
 
 
@@ -29,7 +29,9 @@ TransFSMData::TransFSMData()
 {
        deadkey_ = deadkey2_ = 0;
        deadkey_info_.accent = deadkey2_info_.accent = TEX_NOACCENT;
+#if 0
        comb_info_ = 0;
+#endif
 }
 
 
@@ -44,17 +46,26 @@ TransInitState::TransInitState()
 }
 
 
-string TransInitState::normalkey(char c, char * t)
+#if 0
+string const TransInitState::normalkey(char c, string const & t)
 {
        string res;
-       if (t)  res = t;
+       if (!t.empty()) res = t;
        else res = c;
        
        return res;
 }
+#else
+string const TransInitState::normalkey(char c)
+{
+       string res;
+       res = c;
+       return res;
+}
+#endif
 
 
-string TransInitState::deadkey(char c, KmodInfo d)
+string const TransInitState::deadkey(char c, KmodInfo d)
 {
        deadkey_ = c;
        deadkey_info_ = d;
@@ -70,13 +81,14 @@ TransDeadkeyState::TransDeadkeyState()
 }
 
 
-string TransDeadkeyState::normalkey(char c, char * trans)
+#if 0
+string const TransDeadkeyState::normalkey(char c, string const & trans)
 {
        string res;
        
        // Check if it is an exception
        KmodException l = deadkey_info_.exception_list;
-       while(l != 0) {
+       while (l != 0) {
                if (l->c == c) {
                        res = l->data;
                        break;
@@ -85,8 +97,7 @@ string TransDeadkeyState::normalkey(char c, char * trans)
        }
        if (l == 0) {
                // Not an exception. Check if it allowed
-               if (current_view->buffer()->params.allowAccents == true ||
-                   countChar(deadkey_info_.allowed, c) > 0) {
+               if (countChar(deadkey_info_.allowed, c) > 0) {
                        res = DoAccent(c, deadkey_info_.accent);
                } else {
                        // Not allowed
@@ -99,9 +110,49 @@ string TransDeadkeyState::normalkey(char c, char * trans)
        currentState = init_state_;
        return res;
 }
+#else
+string const TransDeadkeyState::normalkey(char c)
+{
+#if 0
+       string res;
+       
+       // Check if it is an exception
+       KmodException l = deadkey_info_.exception_list;
+       while (l != 0) {
+               if (l->c == c) {
+                       res = l->data;
+                       break;
+               }
+               l = l->next;
+       }
+       if (l == 0) {
+                       res = DoAccent(c, deadkey_info_.accent);
+       }
+       currentState = init_state_;
+       return res;
+#else
+       string res;
+       
+       KmodException::iterator it = deadkey_info_.exception_list.begin();
+       KmodException::iterator end = deadkey_info_.exception_list.end();
 
+       for (; it != end; ++it) {
+               if (it->c == c) {
+                       res = it->data;
+                       break;
+               }
+       }
+       if (it == end) {
+               res = DoAccent(c, deadkey_info_.accent);
+       }
+       currentState = init_state_;
+       return res;
+#endif
+}
+#endif
 
-string TransDeadkeyState::deadkey(char c, KmodInfo d)
+
+string const TransDeadkeyState::deadkey(char c, KmodInfo d)
 {
        string res;
        
@@ -115,10 +166,11 @@ string TransDeadkeyState::deadkey(char c, KmodInfo d)
        }
        
        // Check if it is a combination or an exception
+#if 0
        KmodException l;
        l = deadkey_info_.exception_list;
        
-       while(l) {
+       while (l) {
                if (l->combined == true && l->accent == d.accent) {
                        deadkey2_ = c;
                        deadkey2_info_ = d;
@@ -135,7 +187,26 @@ string TransDeadkeyState::deadkey(char c, KmodInfo d)
                }
                l = l->next;
        }
-       
+#else
+       KmodException::const_iterator cit = deadkey_info_.exception_list.begin();
+       KmodException::const_iterator end = deadkey_info_.exception_list.end();
+       for (; cit != end; ++cit) {
+               if (cit->combined == true && cit->accent == d.accent) {
+                       deadkey2_ = c;
+                       deadkey2_info_ = d;
+                       comb_info_ = (*cit);
+                       currentState = combined_state_;
+                       return string();
+               }
+               if (cit->c == c) {
+                       res = cit->data;
+                       deadkey_ = 0;
+                       deadkey_info_.accent = TEX_NOACCENT;
+                       currentState = init_state_;
+                       return res;
+               }
+       }
+#endif
        // Not a combination or an exception. 
        // Output deadkey1 and keep deadkey2
        
@@ -154,14 +225,14 @@ TransCombinedState::TransCombinedState()
 }
 
 
-string TransCombinedState::normalkey(char c, char * trans)
+#if 0
+string const TransCombinedState::normalkey(char c, string const & trans)
 {
        string res;
-       
+
        // Check if the key is allowed on the combination
        if (countChar(comb_info_->data, c) > 0) {
-               string temp;
-               temp = DoAccent(c, deadkey2_info_.accent);
+               string const temp = DoAccent(c, deadkey2_info_.accent);
                res = DoAccent(temp, deadkey_info_.accent);
                currentState = init_state_;
        } else {
@@ -176,9 +247,20 @@ string TransCombinedState::normalkey(char c, char * trans)
        }
        return res;
 }
+#else
+string const TransCombinedState::normalkey(char c)
+{
+       string res;
+
+       string const temp = DoAccent(c, deadkey2_info_.accent);
+       res = DoAccent(temp, deadkey_info_.accent);
+       currentState = init_state_;
+       return res;
+}
+#endif
 
 
-string TransCombinedState::deadkey(char c, KmodInfo d)
+string const TransCombinedState::deadkey(char c, KmodInfo d)
 {
        // Third key in a row. Output the first one and
        // reenter with shifted deadkeys
@@ -206,14 +288,15 @@ TransFSM::TransFSM():
 
 // TransManager
 
+// Initialize static member.
+Trans TransManager::default_;
+
+
 TransManager::TransManager()
        : active_(0), t1_(new Trans), t2_(new Trans)
 {}
 
 
-Trans * TransManager::default_ = new Trans;
-
-
 TransManager::~TransManager() 
 { 
        delete t1_;
@@ -239,9 +322,9 @@ int TransManager::SetSecondary(string const & language)
 }
 
 
-bool TransManager::setCharset(char const * set)
+bool TransManager::setCharset(string const & str)
 {
-       return chset_.loadFile(set);
+       return chset_.loadFile(str);
 }
 
 
@@ -264,7 +347,7 @@ void TransManager::EnableSecondary()
 
 void TransManager::DisableKeymap()
 {
-       active_ = default_;
+       active_ = &default_;
        lyxerr[Debug::KBMAP] << "Disabling keymap" << endl;
 }
 
@@ -276,7 +359,7 @@ void  TransManager::TranslateAndInsert(char c, LyXText * text)
        // Process with tokens
        string temp;
        
-       while(res.length() > 0) {
+       while (res.length() > 0) {
                res = split(res, temp, TransState::TOKEN_SEP);
                insert(temp, text);
        }
@@ -285,17 +368,10 @@ void  TransManager::TranslateAndInsert(char c, LyXText * text)
 
 void TransManager::insertVerbatim(string const & str, LyXText * text)
 {      
-       int l = str.length();
+       string::size_type const l = str.length();
        
-       for (int i = 0; i < l; ++i){
-               if (str[i] == '\"' 
-                   && text->GetFont(text->cursor.par,
-                                    text->cursor.pos).latex() == LyXFont::OFF
-                   && text->GetFont(text->cursor.par,
-                                    text->cursor.pos).language()->lang != "hebrew")
-                       current_view->insertCorrectQuote();
-               else
-                       text->InsertChar(str[i]);
+       for (string::size_type i = 0; i < l; ++i) {
+               text->insertChar(current_view, str[i]);
        }
 }
 
@@ -304,7 +380,7 @@ void TransManager::insert(string const & str, LyXText * text)
 {
        // Go through the character encoding only if the current 
        // encoding (chset_->name()) matches the current font_norm
-       // (lyrxc->font_norm
+       // (lyrxc->font_norm)
        
        // Is false to speak about "only if" the current encoding will
        // almost always be equal to font_norm.
@@ -313,38 +389,44 @@ void TransManager::insert(string const & str, LyXText * text)
            !enc.first) {
                // Could not find an encoding
                InsetLatexAccent ins(str);
-               if (ins.CanDisplay()) {
-                       text->InsertInset(new InsetLatexAccent(ins));
+               if (ins.canDisplay()) {
+                       text->insertInset(current_view,
+                                         new InsetLatexAccent(ins));
                } else {
                        insertVerbatim(str, text);
                }
                return;
        }
-       string tmp; tmp += static_cast<char>(enc.second);
+       string tmp;
+       tmp += static_cast<char>(enc.second);
        insertVerbatim(tmp, text);
 }
 
 
 void TransManager::deadkey(char c, tex_accent accent, LyXText * t)
 {
-       if (c == 0 && active_ != default_) {
+       if (c == 0 && active_ != &default_) {
                // A deadkey was pressed that cannot be printed
                // or a accent command was typed in the minibuffer
                KmodInfo i;
                if (active_->isAccentDefined(accent, i) == true) {
-                       string res = trans_fsm_.currentState->deadkey(c, i);
+                       string const res = trans_fsm_
+                               .currentState->deadkey(c, i);
                        insert(res, t);
                        return;
                }
        }
        
-       if (active_ == default_ || c == 0) {
+       if (active_ == &default_ || c == 0) {
                KmodInfo i;
                i.accent = accent;
+#if 0
                i.allowed = lyx_accent_table[accent].native;
+#endif
                i.data.erase();
+#if 0
                i.exception_list = 0;
-               
+#endif 
                string res = trans_fsm_.currentState->deadkey(c, i);
                insert(res, t);
        } else {