#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;
int hack_button;
-void handleFont(BufferView * bv, MathTextCodes t)
+void handleFont(BufferView * bv, string const & arg, MathTextCodes t)
{
if (mathcursor->selection())
bv->lockedInsetStoreUndo(Undo::EDIT);
mathcursor->handleFont(t);
-}
-
-
-void handleAccent(BufferView * bv, string const & name)
-{
- bv->lockedInsetStoreUndo(Undo::EDIT);
- mathcursor->insert(createMathInset(name));
+ for (string::const_iterator it = arg.begin(); it != arg.end(); ++it)
+ mathcursor->insert(*it);
}
}
+// 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);
}
hideInsetCursor(bv);
mathcursor->normalize();
-
switch (action) {
// --- Cursor Movements ---------------------------------------------
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());
break;
case LFUN_WORDLEFTSEL:
break;
- // --- accented characters ------------------------------
-
- case LFUN_UMLAUT: handleAccent(bv, "ddot"); break;
- case LFUN_CIRCUMFLEX: handleAccent(bv, "hat"); break;
- case LFUN_GRAVE: handleAccent(bv, "grave"); break;
- case LFUN_ACUTE: handleAccent(bv, "acute"); break;
- case LFUN_TILDE: handleAccent(bv, "tilde"); break;
- case LFUN_MACRON: handleAccent(bv, "bar"); break;
- case LFUN_DOT: handleAccent(bv, "dot"); break;
- case LFUN_CARON: handleAccent(bv, "check"); break;
- case LFUN_BREVE: handleAccent(bv, "breve"); break;
- case LFUN_VECTOR: handleAccent(bv, "vec"); 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, LM_TC_GREEK); break;
- case LFUN_BOLD: handleFont(bv, LM_TC_BF); break;
- case LFUN_SANS: handleFont(bv, LM_TC_SF); break;
- case LFUN_EMPH: handleFont(bv, LM_TC_CAL); break;
- case LFUN_ROMAN: handleFont(bv, LM_TC_RM); break;
- case LFUN_CODE: handleFont(bv, LM_TC_TT); break;
- case LFUN_NOUN: handleFont(bv, LM_TC_BB); break;
- case LFUN_DEFAULT: handleFont(bv, LM_TC_VAR); break;
+ case LFUN_GREEK_TOGGLE: handleFont(bv, arg, LM_TC_GREEK); break;
+ case LFUN_BOLD: handleFont(bv, arg, LM_TC_BF); break;
+ case LFUN_SANS: handleFont(bv, arg, LM_TC_SF); break;
+ case LFUN_EMPH: handleFont(bv, arg, LM_TC_CAL); break;
+ case LFUN_ROMAN: handleFont(bv, arg, LM_TC_RM); break;
+ case LFUN_CODE: handleFont(bv, arg, LM_TC_TT); break;
+ case LFUN_FRAK: handleFont(bv, arg, LM_TC_EUFRAK); break;
+ case LFUN_ITAL: handleFont(bv, arg, LM_TC_IT); break;
+ case LFUN_NOUN: handleFont(bv, arg, LM_TC_BB); break;
+ case LFUN_DEFAULT: handleFont(bv, arg, LM_TC_VAR); break;
+ case LFUN_FREE: handleFont(bv, arg, LM_TC_TEXTRM); break;
case LFUN_GREEK:
- handleFont(bv, LM_TC_GREEK1);
+ handleFont(bv, arg, LM_TC_GREEK1);
if (arg.size())
mathcursor->interpret(arg);
break;
case LFUN_MATH_MODE:
- //handleFont(bv, LM_TC_TEXTRM);
+#if 0
+ handleFont(bv, arg, LM_TC_TEXTRM);
+#endif
+
+#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;
bool InsetFormulaBase::searchForward(BufferView * bv, string const & str,
- bool const &, bool const &)
+ bool, bool)
{
#ifdef WITH_WARNINGS
#warning pretty ugly
bool InsetFormulaBase::searchBackward(BufferView * bv, string const & what,
- bool const & a, bool const & b)
+ bool a, bool b)
{
lyxerr << "searching backward not implemented in mathed" << endl;
return searchForward(bv, what, a, b);
// 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);
}