#include "FuncStatus.h"
#include "LaTeXFeatures.h"
#include "Lexer.h"
-#include "LyXRC.h"
#include "MetricsInfo.h"
#include "OutputParams.h"
#include "RenderPreview.h"
+#include "texstream.h"
#include "frontends/Painter.h"
namespace lyx {
-InsetIPA::InsetIPA(Buffer * buf)
+InsetIPA::InsetIPA(Buffer * buf)
: InsetText(buf),
- preview_(new RenderPreview(this)), use_preview_(true)
+ preview_(new RenderPreview(this))
{
- setAutoBreakRows(true);
setDrawFrame(true);
setFrameColor(Color_insetframe);
}
-InsetIPA::~InsetIPA()
+InsetIPA::~InsetIPA()
{}
}
+InsetIPA & InsetIPA::operator=(InsetIPA const & other)
+{
+ if (&other == this)
+ return *this;
+
+ InsetText::operator=(other);
+ preview_.reset(new RenderPreview(*other.preview_, this));
+
+ return *this;
+}
+
+
void InsetIPA::write(ostream & os) const
{
os << "IPA" << "\n";
}
-void InsetIPA::preparePreview(DocIterator const & pos) const
+void InsetIPA::preparePreview(DocIterator const & pos) const
{
- TexRow texrow;
- odocstringstream str;
- otexstream os(str, texrow);
+ odocstringstream str;
+ otexstream os(str);
OutputParams runparams(&pos.buffer()->params().encoding());
latex(os, runparams);
docstring const snippet = str.str();
- preview_->addPreview(snippet, *pos.buffer());
+ preview_->addPreview(snippet, *pos.buffer());
}
bool InsetIPA::previewState(BufferView * bv) const
{
- if (!editing(bv) && (RenderPreview::status() == LyXRC::PREVIEW_ON ||
- RenderPreview::status() == LyXRC::PREVIEW_NO_MATH)) {
+ if (!editing(bv) && RenderPreview::previewText()) {
graphics::PreviewImage const * pimage =
preview_->getPreviewImage(bv->buffer());
return pimage && pimage->image();
void InsetIPA::draw(PainterInfo & pi, int x, int y) const
{
- use_preview_ = previewState(pi.base.bv);
-
- if (use_preview_) {
- preview_->draw(pi, x + TEXT_TO_INSET_OFFSET, y);
- setPosCache(pi, x, y);
+ if (previewState(pi.base.bv)) {
+ preview_->draw(pi, x, y);
return;
}
InsetText::draw(pi, x, y);
Inset * InsetIPA::editXY(Cursor & cur, int x, int y)
{
- if (use_preview_) {
+ if (previewState(&cur.bv())) {
edit(cur, true, ENTRY_DIRECTION_IGNORE);
return this;
}
{
if (previewState(mi.base.bv)) {
preview_->metrics(mi, dim);
- mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
-
+
dim.wid = max(dim.wid, 4);
dim.asc = max(dim.asc, 4);
-
- dim.asc += TEXT_TO_INSET_OFFSET;
- dim.des += TEXT_TO_INSET_OFFSET;
- dim.wid += TEXT_TO_INSET_OFFSET;
- dim_ = dim;
- dim.wid += TEXT_TO_INSET_OFFSET;
+
+ dim.asc += topOffset(mi.base.bv);
+ dim.des += bottomOffset(mi.base.bv);
// insert a one pixel gap
dim.wid += 1;
- // Cache the inset dimension.
- setDimCache(mi, dim);
Dimension dim_dummy;
MetricsInfo mi_dummy = mi;
InsetText::metrics(mi_dummy, dim_dummy);
void InsetIPA::validate(LaTeXFeatures & features) const
{
- if (buffer_->params().useNonTeXFonts)
- return;
features.require("tipa");
features.require("tipx");
+
InsetText::validate(features);
}
}
+docstring InsetIPA::xhtml(XMLStream & xs, OutputParams const & runparams_in) const
+{
+ OutputParams runparams(runparams_in);
+ runparams.inIPA = true;
+ return InsetText::xhtml(xs, runparams);
+}
+
+
bool InsetIPA::insetAllowed(InsetCode code) const
{
switch (code) {
// code that is allowed
case ERT_CODE:
+ case IPACHAR_CODE:
+ case IPADECO_CODE:
case SCRIPT_CODE:
return true;
default: