#include "InsetText.h"
-#include "insets/InsetOptArg.h"
+#include "insets/InsetArgument.h"
#include "buffer_funcs.h"
#include "Buffer.h"
#include "support/gettext.h"
#include "support/lstrings.h"
-#include <boost/bind.hpp>
+#include "support/bind.h"
#include "support/lassert.h"
+#include <algorithm>
+
+
using namespace std;
using namespace lyx::support;
-using boost::bind;
-using boost::ref;
namespace lyx {
/////////////////////////////////////////////////////////////////////
InsetText::InsetText(Buffer * buf, UsePlain type)
- : Inset(buf), drawFrame_(false), frame_color_(Color_insetframe), text_(this)
+ : Inset(buf), drawFrame_(false), frame_color_(Color_insetframe),
+ text_(this, type == DefaultLayout)
{
- initParagraphs(type);
}
InsetText::InsetText(InsetText const & in)
- : Inset(in), text_(this)
+ : Inset(in), text_(this, in.text_)
{
- text_.autoBreakRows_ = in.text_.autoBreakRows_;
drawFrame_ = in.drawFrame_;
frame_color_ = in.frame_color_;
- text_.paragraphs() = in.text_.paragraphs();
- setParagraphOwner();
}
}
-void InsetText::initParagraphs(UsePlain type)
-{
- LASSERT(paragraphs().empty(), /**/);
- paragraphs().push_back(Paragraph());
- Paragraph & ourpar = paragraphs().back();
- ourpar.setInsetOwner(this);
- DocumentClass const & dc = buffer_->params().documentClass();
- if (type == DefaultLayout)
- ourpar.setDefaultLayout(dc);
- else
- ourpar.setPlainLayout(dc);
-}
-
-
-void InsetText::setParagraphOwner()
-{
- for_each(paragraphs().begin(), paragraphs().end(),
- bind(&Paragraph::setInsetOwner, _1, this));
-}
-
-
void InsetText::clear()
{
ParagraphList & pars = paragraphs();
void InsetText::doDispatch(Cursor & cur, FuncRequest & cmd)
{
LYXERR(Debug::ACTION, "InsetText::doDispatch()"
- << " [ cmd.action = " << cmd.action << ']');
+ << " [ cmd.action() = " << cmd.action() << ']');
if (getLayout().isPassThru()) {
// Force any new text to latex_language FIXME: This
cur.real_current_font.setLanguage(latex_language);
}
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_PASTE:
case LFUN_CLIPBOARD_PASTE:
case LFUN_SELECTION_PASTE:
bool InsetText::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & status) const
{
- switch (cmd.action) {
- case LFUN_LAYOUT:
- status.setEnabled(!forcePlainLayout());
- return true;
-
- case LFUN_LAYOUT_PARAGRAPH:
- case LFUN_PARAGRAPH_PARAMS:
- case LFUN_PARAGRAPH_PARAMS_APPLY:
- case LFUN_PARAGRAPH_UPDATE:
- status.setEnabled(allowParagraphCustomization());
- return true;
-
+ switch (cmd.action()) {
case LFUN_INSET_DISSOLVE: {
bool const main_inset = &buffer().inset() == this;
bool const target_inset = cmd.argument().empty()
}
OutputParams rp = runparams;
if (il.isPassThru())
- rp.verbatim = true;
+ rp.pass_thru = true;
if (il.isNeedProtect())
rp.moving_arg = true;
TexRow texrow;
latexParagraphs(buffer(), text_, os, texrow, rp);
rows += texrow.rows();
+ runparams.encoding = rp.encoding;
if (!il.latexname().empty()) {
if (il.latextype() == InsetLayout::COMMAND) {
InsetLayout const & il = getLayout();
if (opts & WriteOuterTag)
- xs << StartTag(il.htmltag(), il.htmlattr());
+ xs << html::StartTag(il.htmltag(), il.htmlattr());
if ((opts & WriteLabel) && !il.counter().empty()) {
BufferParams const & bp = buffer().masterBuffer()->params();
Counters & cntrs = bp.documentClass().counters();
- cntrs.step(il.counter());
+ cntrs.step(il.counter(), OutputUpdate);
// FIXME: translate to paragraph language
if (!il.htmllabel().empty()) {
docstring const lbl =
cntrs.counterLabel(from_utf8(il.htmllabel()), bp.language->code());
// FIXME is this check necessary?
if (!lbl.empty()) {
- xs << StartTag(il.htmllabeltag(), il.htmllabelattr());
+ xs << html::StartTag(il.htmllabeltag(), il.htmllabelattr());
xs << lbl;
- xs << EndTag(il.htmllabeltag());
+ xs << html::EndTag(il.htmllabeltag());
}
}
}
if (opts & WriteInnerTag)
- xs << StartTag(il.htmlinnertag(), il.htmlinnerattr());
- if (il.isMultiPar())
- xhtmlParagraphs(text_, buffer(), xs, runparams);
- else {
- OutputParams ours = runparams;
+ xs << html::StartTag(il.htmlinnertag(), il.htmlinnerattr());
+ OutputParams ours = runparams;
+ if (!il.isMultiPar() || opts == JustText)
ours.html_make_pars = false;
- xhtmlParagraphs(text_, buffer(), xs, ours);
- }
+ xhtmlParagraphs(text_, buffer(), xs, ours);
if (opts & WriteInnerTag)
- xs << EndTag(il.htmlinnertag());
+ xs << html::EndTag(il.htmlinnertag());
if (opts & WriteOuterTag)
- xs << EndTag(il.htmltag());
+ xs << html::EndTag(il.htmltag());
return docstring();
}
}
-bool InsetText::showInsetDialog(BufferView *) const
-{
- return false;
-}
-
-
void InsetText::setText(docstring const & data, Font const & font, bool trackChanges)
{
clear();
}
-void InsetText::updateLabels(ParIterator const & it)
+void InsetText::updateBuffer(ParIterator const & it, UpdateType utype)
{
ParIterator it2 = it;
it2.forwardPos();
LASSERT(&it2.inset() == this && it2.pit() == 0, return);
- if (producesOutput())
- buffer().updateLabels(it2);
- else {
+ if (producesOutput()) {
+ InsetLayout const & il = getLayout();
+ bool const save_layouts = utype == OutputUpdate && il.htmlisblock();
+ Counters & cnt = buffer().masterBuffer()->params().documentClass().counters();
+ if (save_layouts) {
+ // LYXERR0("Entering " << name());
+ cnt.clearLastLayout();
+ // FIXME cnt.saveLastCounter()?
+ }
+ buffer().updateBuffer(it2, utype);
+ if (save_layouts) {
+ // LYXERR0("Exiting " << name());
+ cnt.restoreLastLayout();
+ // FIXME cnt.restoreLastCounter()?
+ }
+ } else {
DocumentClass const & tclass = buffer().masterBuffer()->params().documentClass();
+ // Note that we do not need to call:
+ // tclass.counters().clearLastLayout()
+ // since we are saving and restoring the existing counters, etc.
Counters const savecnt = tclass.counters();
- buffer().updateLabels(it2);
+ buffer().updateBuffer(it2, utype);
tclass.counters() = savecnt;
}
}
//lyxerr << (void*)&inset << " code: " << inset.lyxCode() << std::endl;
inset.addToToc(dit);
switch (inset.lyxCode()) {
- case OPTARG_CODE: {
+ case ARG_CODE: {
if (!tocstring.empty())
break;
dit.pos() = 0;
Paragraph const & insetpar =
- *static_cast<InsetOptArg&>(inset).paragraphs().begin();
+ *static_cast<InsetArgument&>(inset).paragraphs().begin();
if (!par.labelString().empty())
tocstring = par.labelString() + ' ';
tocstring += insetpar.asString(AS_STR_INSETS);
// insert this into the table of contents
if (tocstring.empty())
tocstring = par.asString(AS_STR_LABEL | AS_STR_INSETS);
- toc.push_back(TocItem(dit, toclevel - min_toclevel, tocstring));
+ toc.push_back(TocItem(dit, toclevel - min_toclevel,
+ tocstring, tocstring));
}
// And now the list of changes.
}
+docstring InsetText::toolTipText() const
+{
+ OutputParams rp(&buffer().params().encoding());
+ odocstringstream ods;
+ // do not remove InsetText::, otherwise there
+ // will be no tooltip text for InsetNotes
+ InsetText::plaintext(ods, rp);
+ docstring const content_tip = ods.str();
+ return support::wrapParas(content_tip, 4);
+}
+
+
InsetCaption const * InsetText::getCaptionInset() const
{
ParagraphList::const_iterator pit = paragraphs().begin();
return docstring();
odocstringstream ods;
- docstring def = ins->getCaptionAsHTML(ods, runparams);
+ XHTMLStream xs(ods);
+ docstring def = ins->getCaptionAsHTML(xs, runparams);
if (!def.empty())
- ods << def << '\n';
+ // should already have been escaped
+ xs << XHTMLStream::NextRaw() << def << '\n';
return ods.str();
}
+InsetText::XHTMLOptions operator|(InsetText::XHTMLOptions a1, InsetText::XHTMLOptions a2)
+{
+ return static_cast<InsetText::XHTMLOptions>((int)a1 | (int)a2);
+}
+
} // namespace lyx