void InsetText::fixParagraphsFont()
{
- if (!getLayout().isPassThru())
- return;
-
Font font(inherit_font, buffer().params().language);
font.setLanguage(latex_language);
ParagraphList::iterator par = paragraphs().begin();
ParagraphList::iterator const end = paragraphs().end();
while (par != end) {
- par->resetFonts(font);
- par->params().clear();
+ if (par->isPassThru())
+ par->resetFonts(font);
+ if (!par->allowParagraphCustomization())
+ par->params().clear();
++par;
}
}
}
-int InsetText::latex(odocstream & os, OutputParams const & runparams) const
+void InsetText::latex(otexstream & os, OutputParams const & runparams) const
{
// This implements the standard way of handling the LaTeX
// output of a text inset, either a command or an
// environment. Standard collapsable insets should not
// redefine this, non-standard ones may call this.
InsetLayout const & il = getLayout();
- int rows = 0;
if (!il.latexname().empty()) {
if (il.latextype() == InsetLayout::COMMAND) {
// FIXME UNICODE
os << from_utf8(il.latexparam());
os << '{';
} else if (il.latextype() == InsetLayout::ENVIRONMENT) {
- os << "%\n\\begin{" << from_utf8(il.latexname()) << "}\n";
+ if (il.isDisplay())
+ os << breakln;
+ else
+ os << safebreakln;
+ if (runparams.lastid != -1)
+ os.texrow().start(runparams.lastid,
+ runparams.lastpos);
+ os << "\\begin{" << from_utf8(il.latexname()) << "}\n";
if (!il.latexparam().empty())
os << from_utf8(il.latexparam());
- rows += 2;
}
}
OutputParams rp = runparams;
rp.pass_thru = true;
if (il.isNeedProtect())
rp.moving_arg = true;
+ rp.par_begin = 0;
+ rp.par_end = paragraphs().size();
// Output the contents of the inset
- TexRow texrow;
- latexParagraphs(buffer(), text_, os, texrow, rp);
- rows += texrow.rows();
+ latexParagraphs(buffer(), text_, os, rp);
runparams.encoding = rp.encoding;
if (!il.latexname().empty()) {
if (il.latextype() == InsetLayout::COMMAND) {
os << "}";
} else if (il.latextype() == InsetLayout::ENVIRONMENT) {
- os << "\n\\end{" << from_utf8(il.latexname()) << "}\n";
- rows += 2;
+ // A comment environment doesn't need a % before \n\end
+ if (il.isDisplay() || runparams.inComment)
+ os << breakln;
+ else
+ os << safebreakln;
+ os << "\\end{" << from_utf8(il.latexname()) << "}\n";
+ if (!il.isDisplay())
+ os.protectSpace(true);
}
}
- return rows;
}
// tclass.counters().clearLastLayout()
// since we are saving and restoring the existing counters, etc.
Counters const savecnt = tclass.counters();
- tclass.counters() = Counters();
+ tclass.counters().reset();
buffer().updateBuffer(it2, utype);
tclass.counters() = savecnt;
}
}
-void InsetText::tocString(odocstream & os) const
+void InsetText::toString(odocstream & os) const
{
os << text().asString(0, 1, AS_STR_LABEL | AS_STR_INSETS);
}
+void InsetText::forToc(docstring & os, size_t maxlen) const
+{
+ if (!getLayout().isInToc())
+ return;
+ text().forToc(os, maxlen, false);
+}
-void InsetText::addToToc(DocIterator const & cdit)
+
+void InsetText::addToToc(DocIterator const & cdit) const
{
DocIterator dit = cdit;
- dit.push_back(CursorSlice(*this));
+ dit.push_back(CursorSlice(const_cast<InsetText &>(*this)));
Toc & toc = buffer().tocBackend().toc("tableofcontents");
BufferParams const & bufparams = buffer_->params();
- const int min_toclevel = bufparams.documentClass().min_toclevel();
+ int const min_toclevel = bufparams.documentClass().min_toclevel();
// For each paragraph, traverse its insets and let them add
// their toc items
- ParagraphList & pars = paragraphs();
+ ParagraphList const & pars = paragraphs();
pit_type pend = paragraphs().size();
for (pit_type pit = 0; pit != pend; ++pit) {
Paragraph const & par = pars[pit];
dit.pit() = pit;
- // the string that goes to the toc (could be the optarg)
- docstring tocstring;
+ // if we find an optarg, we'll save it for use later.
+ InsetText const * arginset = 0;
InsetList::const_iterator it = par.insetList().begin();
InsetList::const_iterator end = par.insetList().end();
for (; it != end; ++it) {
dit.pos() = it->pos;
//lyxerr << (void*)&inset << " code: " << inset.lyxCode() << std::endl;
inset.addToToc(dit);
- switch (inset.lyxCode()) {
- case ARG_CODE: {
- if (!tocstring.empty())
- break;
- dit.pos() = 0;
- Paragraph const & insetpar =
- *static_cast<InsetArgument&>(inset).paragraphs().begin();
- if (!par.labelString().empty())
- tocstring = par.labelString() + ' ';
- tocstring += insetpar.asString(AS_STR_INSETS);
- break;
- }
- default:
- break;
- }
+ if (inset.lyxCode() == ARG_CODE)
+ arginset = inset.asInsetText();
}
// now the toc entry for the paragraph
int const toclevel = par.layout().toclevel;
if (toclevel != Layout::NOT_IN_TOC && toclevel >= min_toclevel) {
- dit.pos() = 0;
// insert this into the table of contents
- if (tocstring.empty())
- tocstring = par.asString(AS_STR_LABEL | AS_STR_INSETS);
+ docstring tocstring;
+ if (arginset) {
+ tocstring = par.labelString();
+ if (!tocstring.empty())
+ tocstring += ' ';
+ arginset->text().forToc(tocstring, TOC_ENTRY_LENGTH);
+ } else
+ par.forToc(tocstring, TOC_ENTRY_LENGTH);
+ dit.pos() = 0;
toc.push_back(TocItem(dit, toclevel - min_toclevel,
tocstring, tocstring));
}
docstring InsetText::contextMenu(BufferView const &, int, int) const
+{
+ docstring context_menu = contextMenuName();
+ if (context_menu != InsetText::contextMenuName())
+ context_menu += ";" + InsetText::contextMenuName();
+ return context_menu;
+}
+
+
+docstring InsetText::contextMenuName() const
{
return from_ascii("context-edit");
}
-docstring InsetText::toolTipText(docstring prefix) const
+docstring InsetText::toolTipText(docstring prefix,
+ size_t numlines, size_t len) const
{
- static unsigned int max_length = 400; // five 80 column lines
+ size_t const max_length = numlines * len;
OutputParams rp(&buffer().params().encoding());
odocstringstream oss;
oss << prefix;
if (str.length() > max_length)
break;
}
- return support::wrapParas(str, 4, 80, 5);
+ return support::wrapParas(str, 4, len, numlines);
}