]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetScript.cpp
New DocBook support
[lyx.git] / src / insets / InsetScript.cpp
index 35c181fbe9ea211e5fcbb58fdb411f153050810f..3dc9e1248a6f4bb3e822eadefe36deae14b8433f 100644 (file)
@@ -40,6 +40,7 @@
 #include "frontends/Painter.h"
 
 #include <algorithm>
+#include <output_docbook.h>
 
 using namespace std;
 
@@ -81,7 +82,7 @@ ScriptTranslatorLoc const & scripttranslator_loc()
        return translator;
 }
 
-} // anon
+} // namespace
 
 
 InsetScriptParams::InsetScriptParams()
@@ -151,16 +152,12 @@ docstring InsetScript::layoutName() const
 }
 
 
-Inset::DisplayType InsetScript::display() const
-{
-       return Inline;
-}
-
-
 void InsetScript::metrics(MetricsInfo & mi, Dimension & dim) const
 {
        int const shift = params_.shift(mi.base.font);
-       ScriptChanger dummy(mi.base);
+       // Remember the value of the outser font, so that it can be used in cursorPos.
+       outer_font_ = mi.base.font;
+       Changer dummy = mi.base.changeScript();
        InsetText::metrics(mi, dim);
        dim.asc -= shift;
        dim.des += shift;
@@ -170,7 +167,7 @@ void InsetScript::metrics(MetricsInfo & mi, Dimension & dim) const
 void InsetScript::draw(PainterInfo & pi, int x, int y) const
 {
        int const shift = params_.shift(pi.base.font);
-       ScriptChanger dummy(pi.base);
+       Changer dummy = pi.base.changeScript();
        InsetText::draw(pi, x, y + shift);
 }
 
@@ -178,8 +175,7 @@ void InsetScript::draw(PainterInfo & pi, int x, int y) const
 void InsetScript::cursorPos(BufferView const & bv,
                CursorSlice const & sl, bool boundary, int & x, int & y) const
 {
-       Font const font = bv.textMetrics(&text()).displayFont(sl.pit(), sl.pos());
-       int const shift = params_.shift(font.fontInfo());
+       int const shift = params_.shift(outer_font_);
        InsetText::cursorPos(bv, sl, boundary, x, y);
        y += shift;
 }
@@ -216,7 +212,7 @@ void InsetScript::doDispatch(Cursor & cur, FuncRequest & cmd)
 {
        switch (cmd.action()) {
        case LFUN_INSET_MODIFY:
-               cur.recordUndoInset(ATOMIC_UNDO, this);
+               cur.recordUndoInset(this);
                string2params(to_utf8(cmd.argument()), params_);
                break;
        default:
@@ -235,7 +231,7 @@ bool InsetScript::insetAllowed(InsetCode code) const
        case BOX_CODE:
        case BRANCH_CODE:
        case CAPTION_CODE:
-       case COLLAPSABLE_CODE:
+       case COLLAPSIBLE_CODE:
        case FLOAT_CODE:
        case FLOAT_LIST_CODE:
        case FOOT_CODE:
@@ -263,8 +259,6 @@ bool InsetScript::getStatus(Cursor & cur, FuncRequest const & cmd,
                FuncStatus & flag) const
 {
        switch (cmd.action()) {
-       case LFUN_LAYOUT:
-       case LFUN_LAYOUT_PARAGRAPH:
        case LFUN_MATH_DISPLAY:
        case LFUN_BOX_INSERT:
        case LFUN_BRANCH_INSERT:
@@ -282,6 +276,7 @@ bool InsetScript::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_PREVIEW_INSERT:
        case LFUN_QUOTE_INSERT:
        case LFUN_TABULAR_INSERT:
+       case LFUN_TABULAR_STYLE_INSERT:
        case LFUN_WRAP_INSERT:
                flag.setEnabled(false);
                return true;
@@ -317,8 +312,7 @@ docstring InsetScript::toolTip(BufferView const &, int, int) const
        InsetText::plaintext(ods, rp, 200);
        docstring content_tip = ods.str();
        // shorten it if necessary
-       if (content_tip.size() >= 200)
-               content_tip = content_tip.substr(0, 197) + "...";
+       support::truncateWithEllipsis(content_tip, 200);
        docstring res = scripttranslator_loc().find(params_.type);
        if (!content_tip.empty())
                res += from_ascii(": ") + content_tip;
@@ -361,22 +355,21 @@ int InsetScript::plaintext(odocstringstream & os,
 }
 
 
-int InsetScript::docbook(odocstream & os, OutputParams const & runparams) const
+void InsetScript::docbook(XMLStream & xs, OutputParams const & runparams) const
 {
-       string cmdname;
+       docstring cmdname;
        switch (params_.type) {
        case InsetScriptParams::Subscript:
-               cmdname = "subscript";
+               cmdname = from_ascii("subscript");
                break;
        case InsetScriptParams::Superscript:
-               cmdname = "superscript";
+               cmdname = from_ascii("superscript");
                break;
        }
-       os << '<' + cmdname + '>';
-       int const i = InsetText::docbook(os, runparams);
-       os << "</" + cmdname + '>';
 
-       return i;
+       xs << xml::StartTag(cmdname);
+       InsetText::docbook(xs, runparams);
+       xs << xml::EndTag(cmdname);
 }