///
TextContainer text_;
- typedef std::set<docstring> Words;
+ typedef set<docstring> Words;
///
- Words words_;
+ map<Language, Words> words_;
///
Layout const * layout_;
};
void Paragraph::Private::validate(LaTeXFeatures & features) const
{
+ if (layout_->inpreamble && inset_owner_) {
+ Buffer const & buf = inset_owner_->buffer();
+ BufferParams const & bp = buf.params();
+ Font f;
+ TexRow tr;
+ odocstringstream ods;
+ owner_->latex(bp, f, ods, tr, features.runparams());
+ docstring d = ods.str();
+ if (!d.empty())
+ features.addPreambleSnippet(to_utf8(d));
+ }
+
// check the params.
if (!params_.spacing().isDefault())
features.require("setspace");
{
LYXERR(Debug::LATEX, "Paragraph::latex... " << this);
+ if (layout().inpreamble)
+ return true;
+
bool return_value = false;
bool const allowcust = allowParagraphCustomization();
char_type c = d->text_[i];
if (c == ' ')
break;
- xs << html::escapeChar(c);
+ xs << c;
}
}
return i;
XHTMLStream & xs,
OutputParams const & runparams,
Font const & outerfont,
+ bool fortoc,
pos_type initial) const
{
docstring retval;
- // FIXME We really need to manage the tag nesting here.
- // Probably in the same sort of way as in output_xhtml.
bool emph_flag = false;
bool bold_flag = false;
- std::string closing_tag;
+ string closing_tag;
Layout const & style = *d->layout_;
+
+ if (!fortoc) {
+ // generate a magic label for this paragraph
+ string const attr = "id='" + magicLabel() + "'";
+ xs << CompTag("a", attr);
+ }
+
FontInfo font_old =
style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
bold_flag = false;
}
}
- // FIXME Other such tags?
+ // FIXME XHTML
+ // Other such tags? What about the other text ranges?
Inset const * inset = getInset(i);
if (inset) {
+ InsetCommand const * ic = inset->asInsetCommand();
InsetLayout const & il = inset->getLayout();
- OutputParams np = runparams;
- if (!il.htmlisblock())
- np.html_in_par = true;
- retval += inset->xhtml(xs, np);
+ if (!fortoc || il.isInToc() || (ic && ic->isInToc())) {
+ OutputParams np = runparams;
+ if (!il.htmlisblock())
+ np.html_in_par = true;
+ retval += inset->xhtml(xs, np);
+ }
} else {
char_type c = d->text_[i];
}
else
str += c;
- xs << str;
+ // We don't want to escape the entities. Note that
+ // it is safe to do this, since str can otherwise
+ // only be "-". E.g., it can't be "<".
+ xs << XHTMLStream::NextRaw() << str;
} else
xs << c;
}
void Paragraph::deregisterWords()
{
+ map<Language, Private::Words>::const_iterator itl;
Private::Words::const_iterator it;
- WordList & wl = theWordList();
- for (it = d->words_.begin(); it != d->words_.end(); ++it)
- wl.remove(*it);
+ for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+ WordList * wl = theWordList(itl->first);
+ for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+ wl->remove(*it);
+ }
d->words_.clear();
}
locateWord(from, pos, WHOLE_WORD);
if (pos - from >= 6) {
docstring word = asString(from, pos, AS_STR_NONE);
- d->words_.insert(word);
+ FontList::const_iterator cit = d->fontlist_.fontIterator(pos);
+ if (cit == d->fontlist_.end())
+ return;
+ Language const * lang = cit->font().language();
+ d->words_[*lang].insert(word);
}
}
}
void Paragraph::registerWords()
{
+ map<Language, Private::Words>::const_iterator itl;
Private::Words::const_iterator it;
- WordList & wl = theWordList();
- for (it = d->words_.begin(); it != d->words_.end(); ++it)
- wl.insert(*it);
+ for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) {
+ WordList * wl = theWordList(itl->first);
+ for (it = (itl->second).begin(); it != (itl->second).end(); ++it)
+ wl->insert(*it);
+ }
}
}
+string Paragraph::magicLabel() const
+{
+ stringstream ss;
+ ss << "magicparlabel-" << id();
+ return ss.str();
+}
+
+
} // namespace lyx