#include "LyXView.h"
#include "Painter.h"
#include "font.h"
+#include "Lsstream.h"
#include "math_arrayinset.h"
#include "math_cursor.h"
#include "math_factory.h"
#include "math_pos.h"
#include "math_spaceinset.h"
#include "undo_funcs.h"
+#include "frontends/Dialogs.h"
+#include "intl.h"
using std::endl;
using std::ostream;
}
+// simply scrap this function if you want
+void InsetFormulaBase::mutateToText()
+{
+#if 0
+ // translate to latex
+ ostringstream os;
+ latex(NULL, os, false, false);
+ string str = os.str();
+
+ // insert this text
+ LyXText * lt = view_->getLyXText();
+ string::const_iterator cit = str.begin();
+ string::const_iterator end = str.end();
+ for (; cit != end; ++cit)
+ view_->owner()->getIntl()->getTrans().TranslateAndInsert(*cit, lt);
+
+ // remove ourselves
+ //view_->owner()->getLyXFunc()->dispatch(LFUN_ESCAPE);
+#endif
+}
+
+
// Check if uses AMS macros
void InsetFormulaBase::validate(LaTeXFeatures &) const
{}
}
break;
*/
+ case 3:
+ // launch math panel for right mouse button
+ bv->owner()->getDialogs()->showMathPanel();
+ break;
}
bv->updateInset(this, false);
}
case LFUN_RIGHT:
result = mathcursor->right(sel) ? DISPATCHED : FINISHED_RIGHT;
+ //lyxerr << "calling scroll 20\n";
+ //scroll(bv, 20);
updateLocal(bv, false);
// write something to the minibuffer
//bv->owner()->message(mathcursor->info());
case LFUN_WORDLEFTSEL:
break;
- // --- accented characters ------------------------------
-
- case LFUN_UMLAUT: handleAccent(bv, arg, "ddot"); break;
- case LFUN_CIRCUMFLEX: handleAccent(bv, arg, "hat"); break;
- case LFUN_GRAVE: handleAccent(bv, arg, "grave"); break;
- case LFUN_ACUTE: handleAccent(bv, arg, "acute"); break;
- case LFUN_TILDE: handleAccent(bv, arg, "tilde"); break;
- case LFUN_MACRON: handleAccent(bv, arg, "bar"); break;
- case LFUN_DOT: handleAccent(bv, arg, "dot"); break;
- case LFUN_CARON: handleAccent(bv, arg, "check"); break;
- case LFUN_BREVE: handleAccent(bv, arg, "breve"); break;
- case LFUN_VECTOR: handleAccent(bv, arg, "vec"); break;
- case LFUN_UNDERBAR: handleAccent(bv, arg, "underbar"); break;
+ // Special casing for superscript in case of LyX handling
+ // dead-keys:
+ case LFUN_CIRCUMFLEX:
+ if (arg.empty()) {
+ // do superscript if LyX handles
+ // deadkeys
+ bv->lockedInsetStoreUndo(Undo::EDIT);
+ mathcursor->script(true);
+ updateLocal(bv, true);
+ }
+ break;
+ case LFUN_UMLAUT:
+ case LFUN_ACUTE:
+ case LFUN_GRAVE:
+ case LFUN_BREVE:
+ case LFUN_DOT:
+ case LFUN_MACRON:
+ case LFUN_CARON:
+ case LFUN_TILDE:
+ case LFUN_CEDILLA:
+ case LFUN_CIRCLE:
+ case LFUN_UNDERDOT:
+ case LFUN_TIE:
+ case LFUN_OGONEK:
+ case LFUN_HUNG_UMLAUT:
+ break;
// Math fonts
case LFUN_GREEK_TOGGLE: handleFont(bv, arg, LM_TC_GREEK); break;
break;
case LFUN_MATH_MODE:
- //handleFont(bv, arg, LM_TC_TEXTRM);
+#if 0
+ handleFont(bv, arg, LM_TC_TEXTRM);
+#endif
- //mathcursor->niceInsert(MathAtom(new MathHullInset(LM_OT_SIMPLE)));
- //updateLocal(bv, true);
+#if 0
+ mathcursor->niceInsert(MathAtom(new MathHullInset(LM_OT_SIMPLE)));
+ updateLocal(bv, true);
+#endif
//bv->owner()->message(_("math text mode toggled"));
break;
else
bv->unlockInset(this);
+ revealCodes(bv);
+
return result; // original version
}
+void InsetFormulaBase::revealCodes(BufferView * bv) const
+{
+ if (!mathcursor)
+ return;
+#if 0
+ // write something to the minibuffer
+ // translate to latex
+ mathcursor->markInsert();
+ ostringstream os;
+ write(NULL, os);
+ string str = os.str();
+ mathcursor->markErase();
+ string::size_type pos = 0;
+ string res;
+ for (string::iterator it = str.begin(); it != str.end(); ++it) {
+ if (*it == '\n')
+ res += ' ';
+ else if (*it == '\0') {
+ res += " -X- ";
+ pos = it - str.begin();
+ }
+ else
+ res += *it;
+ }
+ if (pos > 30)
+ res = res.substr(pos - 30);
+ if (res.size() > 60)
+ res = res.substr(0, 60);
+ bv->owner()->message(res);
+#endif
+}
+
+
Inset::Code InsetFormulaBase::lyxCode() const
{
return Inset::MATH_CODE;
}
-
-void InsetFormulaBase::handleAccent(BufferView * bv,
- string const & arg, string const & name)
-{
- bv->lockedInsetStoreUndo(Undo::EDIT);
- MathAtom at = createMathInset(name);
- mathed_parse_cell(at->cell(0), arg);
- mathcursor->insert(at);
- updateLocal(bv, true);
-}
-
-
/////////////////////////////////////////////////////////////////////
// formula otherwise
if (sel.find("\\newcommand") == string::npos)
f = new InsetFormula(sel);
- else
+ else {
+ string name;
+ if (!mathed_parse_macro(name, sel))
+ return;
f = new InsetFormulaMacro(sel);
+ }
bv->getLyXText()->cutSelection(bv);
openNewInset(bv, f);
}