]> git.lyx.org Git - lyx.git/blobdiff - src/insets/Inset.cpp
Restore XHTML output for InsetListings.
[lyx.git] / src / insets / Inset.cpp
index 9ebf4f8628236562bdc62d59a7a35c35e6ca5ed7..82a5426cbe43147d609dec5f3dc8dfbea2a9c61a 100644 (file)
 #include "FuncRequest.h"
 #include "FuncStatus.h"
 #include "MetricsInfo.h"
+#include "output_xhtml.h"
 #include "Text.h"
 #include "TextClass.h"
 
 #include "frontends/Application.h"
 #include "frontends/Painter.h"
 
-#include "support/convert.h"
 #include "support/debug.h"
 #include "support/docstream.h"
 #include "support/ExceptionMessage.h"
@@ -102,12 +102,65 @@ static TranslatorMap const build_translator()
                InsetName("flex", FLEX_CODE),
                InsetName("space", SPACE_CODE),
                InsetName("vspace", VSPACE_CODE),
-               InsetName("mathmacroarg", MATHMACROARG_CODE),
+               InsetName("mathmacroarg", MATH_MACROARG_CODE),
                InsetName("listings", LISTINGS_CODE),
                InsetName("info", INFO_CODE),
                InsetName("collapsable", COLLAPSABLE_CODE),
                InsetName("newpage", NEWPAGE_CODE),
-               InsetName("tablecell", CELL_CODE)
+               InsetName("tablecell", CELL_CODE),
+               InsetName("mathamsarray", MATH_AMSARRAY_CODE),
+               InsetName("matharray", MATH_ARRAY_CODE),
+               InsetName("mathbig", MATH_BIG_CODE),
+               InsetName("mathboldsymbol", MATH_BOLDSYMBOL_CODE),
+               InsetName("mathbox", MATH_BOX_CODE),
+               InsetName("mathbrace", MATH_BRACE_CODE),
+               InsetName("mathcases", MATH_CASES_CODE),
+               InsetName("mathchar", MATH_CHAR_CODE),
+               InsetName("mathcolor", MATH_COLOR_CODE),
+               InsetName("mathcomment", MATH_COMMENT_CODE),
+               InsetName("mathdecoration", MATH_DECORATION_CODE),
+               InsetName("mathdelim", MATH_DELIM_CODE),
+               InsetName("mathdiff", MATH_DIFF_CODE),
+               InsetName("mathdots", MATH_DOTS_CODE),
+               InsetName("mathensuremath", MATH_ENSUREMATH_CODE),
+               InsetName("mathenv", MATH_ENV_CODE),
+               InsetName("mathexfunc", MATH_EXFUNC_CODE),
+               InsetName("mathexint", MATH_EXINT_CODE),
+               InsetName("mathfont", MATH_FONT_CODE),
+               InsetName("mathfontold", MATH_FONTOLD_CODE),
+               InsetName("mathfrac", MATH_FRAC_CODE),
+               InsetName("mathgrid", MATH_GRID_CODE),
+               InsetName("math", MATH_CODE),
+               InsetName("mathhull", MATH_HULL_CODE),
+               InsetName("mathkern", MATH_KERN_CODE),
+               InsetName("mathlefteqn", MATH_LEFTEQN_CODE),
+               InsetName("mathlim", MATH_LIM_CODE),
+               InsetName("mathmatrix", MATH_MATRIX_CODE),
+               InsetName("mathmbox", MATH_MBOX_CODE),
+               InsetName("mathnest", MATH_NEST_CODE),
+               InsetName("mathnumber", MATH_NUMBER_CODE),
+               InsetName("mathoverset", MATH_OVERSET_CODE),
+               InsetName("mathpar", MATH_PAR_CODE),
+               InsetName("mathphantom", MATH_PHANTOM_CODE),
+               InsetName("mathref", MATH_REF_CODE),
+               InsetName("mathroot", MATH_ROOT_CODE),
+               InsetName("mathscript", MATH_SCRIPT_CODE),
+               InsetName("mathsize", MATH_SIZE_CODE),
+               InsetName("mathspace", MATH_SPACE_CODE),
+               InsetName("mathspecialchar", MATH_SPECIALCHAR_CODE),
+               InsetName("mathsplit", MATH_SPLIT_CODE),
+               InsetName("mathsqrt", MATH_SQRT_CODE),
+               InsetName("mathstackrel", MATH_STACKREL_CODE),
+               InsetName("mathstring", MATH_STRING_CODE),
+               InsetName("mathsubstack", MATH_SUBSTACK_CODE),
+               InsetName("mathsymbol", MATH_SYMBOL_CODE),
+               InsetName("mathtabular", MATH_TABULAR_CODE),
+               InsetName("mathunderset", MATH_UNDERSET_CODE),
+               InsetName("mathunknown", MATH_UNKNOWN_CODE),
+               InsetName("mathxarrow", MATH_XARROW_CODE),
+               InsetName("mathxyarrow", MATH_XYARROW_CODE),
+               InsetName("mathxymatrix", MATH_XYMATRIX_CODE),
+               InsetName("mathmacro", MATH_MACRO_CODE),
        };
 
        size_t const insetnames_size =
@@ -133,7 +186,10 @@ Buffer & Inset::buffer()
 {
        if (!buffer_) {
                odocstringstream s;
-               lyxerr << "LyX Code: " << lyxCode() << " name: " << name() << std::endl;
+               lyxerr << "Inset: " << this
+                                       << " LyX Code: " << lyxCode()
+                                       << " name: " << insetName(lyxCode())
+                                       << std::endl;
                s << "LyX Code: " << lyxCode() << " name: " << name();
                LASSERT(false, /**/);
                throw ExceptionMessage(BufferException, 
@@ -161,6 +217,22 @@ docstring Inset::name() const
 }
 
 
+bool Inset::isFreeSpacing() const 
+{
+       return getLayout().isFreeSpacing();
+}
+
+
+bool Inset::allowEmpty() const
+{
+       return getLayout().isKeepEmpty();
+}
+
+bool Inset::forceLTR() const
+{
+       return getLayout().forceLTR();
+}
+
 void Inset::initView()
 {
        if (isLabeled())
@@ -211,6 +283,11 @@ string insetName(InsetCode c)
 
 void Inset::dispatch(Cursor & cur, FuncRequest & cmd)
 {
+       if (buffer_ == 0) {
+               lyxerr << "Unassigned buffer_ member in Inset::dispatch()" << std::endl;
+               lyxerr << "LyX Code: " << lyxCode() << " name: " << insetName(lyxCode()) << std::endl;
+       } else if (cur.buffer() != buffer_)
+               lyxerr << "cur.buffer() != buffer_ in Inset::dispatch()" << std::endl;
        cur.updateFlags(Update::Force | Update::FitCursor);
        cur.dispatched();
        doDispatch(cur, cmd);
@@ -220,14 +297,24 @@ void Inset::dispatch(Cursor & cur, FuncRequest & cmd)
 void Inset::doDispatch(Cursor & cur, FuncRequest &cmd)
 {
        switch (cmd.action) {
-       case LFUN_INSET_TOGGLE:
-               edit(cur, true);
-               cur.dispatched();
+       case LFUN_MOUSE_RELEASE:
+               // if the derived inset did not explicitly handle mouse_release,
+               // we assume we request the settings dialog
+               if (!cur.selection() && cmd.button() == mouse_button::button1
+                         && hasSettings()) {
+                       FuncRequest tmpcmd(LFUN_INSET_SETTINGS);
+                       dispatch(cur, tmpcmd);
+               }
                break;
+
        case LFUN_INSET_SETTINGS:
-               showInsetDialog(&cur.bv());
-               cur.dispatched();
+               if (cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode())) {
+                       showInsetDialog(&cur.bv());
+                       cur.dispatched();
+               } else
+                       cur.undispatched();
                break;
+
        default:
                cur.noUpdate();
                cur.undispatched();
@@ -262,14 +349,15 @@ bool Inset::getStatus(Cursor &, FuncRequest const & cmd,
                flag.setEnabled(false);
                return true;
 
-       case LFUN_INSET_TOGGLE:
-               // remove this if we dissociate toggle from edit.
-               flag.setEnabled(editable() == IS_EDITABLE);
-               return true;
-
        case LFUN_INSET_SETTINGS:
-               flag.setEnabled(false);
-               return true;
+               if (cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode())) {
+                       bool const enable = hasSettings();
+                       flag.setEnabled(enable);
+                       return true;
+               } else {
+                       flag.setEnabled(false);
+                       return false;
+               }
 
        default:
                break;
@@ -319,27 +407,40 @@ int Inset::docbook(odocstream &, OutputParams const &) const
 }
 
 
+docstring Inset::xhtml(XHTMLStream & xs, OutputParams const &) const
+{
+       xs << "[[Inset: " << from_ascii(insetName(lyxCode())) << "]]";
+       return docstring();
+}
+
+docstring Inset::xhtml(odocstream & od, OutputParams const &) const
+{
+       od << "[[Inset: " << from_ascii(insetName(lyxCode())) << "]]";
+       return docstring();
+}
+
 bool Inset::directWrite() const
 {
        return false;
 }
 
 
-Inset::EDITABLE Inset::editable() const
+bool Inset::editable() const
 {
-       return NOT_EDITABLE;
+       return false;
 }
 
 
-bool Inset::autoDelete() const
+bool Inset::hasSettings() const
 {
        return false;
 }
 
 
-docstring Inset::editMessage() const
+
+bool Inset::autoDelete() const
 {
-       return _("Opened inset");
+       return false;
 }
 
 
@@ -425,9 +526,16 @@ bool Inset::covers(BufferView const & bv, int x, int y) const
 }
 
 
-InsetLayout const & Inset::getLayout(BufferParams const & bp) const
+InsetLayout const & Inset::getLayout() const
+{
+       return buffer().params().documentClass().insetLayout(name());
+}
+
+
+bool Inset::undefined() const
 {
-       return bp.documentClass().insetLayout(name());
+       docstring const & n = getLayout().name();
+       return n.empty() || n == DocumentClass::plainInsetLayout().name();
 }
 
 
@@ -443,6 +551,12 @@ ColorCode Inset::backgroundColor() const
 }
 
 
+ColorCode Inset::labelColor() const
+{
+       return Color_foreground;
+}
+
+
 void Inset::setPosCache(PainterInfo const & pi, int x, int y) const
 {
        //LYXERR("Inset: set position cache to " << x << " " << y);