}
+// Initialization of the counter for the paragraph id's,
+//
+// FIXME: There should be a more intelligent way to generate and use the
+// paragraph ids per buffer instead a global static counter for all InsetText
+// in the running program.
+static int paragraph_id = -1;
+
Paragraph::Private::Private(Private const & p, Paragraph * owner)
: owner_(owner), inset_owner_(p.inset_owner_), fontlist_(p.fontlist_),
- id_(p.id_), params_(p.params_), changes_(p.changes_), insetlist_(p.insetlist_),
+ params_(p.params_), changes_(p.changes_), insetlist_(p.insetlist_),
begin_of_body_(p.begin_of_body_), text_(p.text_), words_(p.words_),
layout_(p.layout_)
{
+ id_ = ++paragraph_id;
}
begin_of_body_(p.begin_of_body_), words_(p.words_),
layout_(p.layout_)
{
+ id_ = ++paragraph_id;
if (beg >= pos_type(p.text_.size()))
return;
text_ = p.text_.substr(beg, end - beg);
features.addPreambleSnippet(to_utf8(d));
}
+ if (features.runparams().flavor == OutputParams::HTML
+ && layout_->htmltitle()) {
+ features.setHTMLTitle(owner_->asString(AS_STR_INSETS));
+ }
+
// check the params.
if (!params_.spacing().isDefault())
features.require("setspace");
}
-docstring Paragraph::expandLabel(Layout const & layout,
+docstring Paragraph::expandLabel(Layout const & layout,
+ BufferParams const & bparams) const
+{
+ return expandParagraphLabel(layout, bparams, true);
+}
+
+
+docstring Paragraph::expandDocBookLabel(Layout const & layout,
+ BufferParams const & bparams) const
+{
+ return expandParagraphLabel(layout, bparams, false);
+}
+
+
+docstring Paragraph::expandParagraphLabel(Layout const & layout,
BufferParams const & bparams, bool process_appendix) const
{
DocumentClass const & tclass = bparams.documentClass();
docstring parent(fmt, i + 1, j - i - 1);
docstring label = from_ascii("??");
if (tclass.hasLayout(parent))
- docstring label = expandLabel(tclass[parent], bparams,
+ docstring label = expandParagraphLabel(tclass[parent], bparams,
process_appendix);
fmt = docstring(fmt, 0, i) + label
+ docstring(fmt, j + 1, docstring::npos);
unsigned int column = 0;
if (body_pos > 0) {
- os << '[';
- column += 1;
+ // the optional argument is kept in curly brackets in
+ // case it contains a ']'
+ os << "[{";
+ column += 2;
basefont = getLabelFont(bparams, outerfont);
} else {
basefont = getLayoutFont(bparams, outerfont);
runparams);
runningChange = Change(Change::UNCHANGED);
- os << "] ";
- column +=2;
+ os << "}] ";
+ column +=3;
}
if (style.isCommand()) {
os << '{';
// Needed if there is an optional argument but no contents.
if (body_pos > 0 && body_pos == size()) {
- os << "]~";
+ os << "}]~";
return_value = false;
}
XHTMLStream & xs,
OutputParams const & runparams,
Font const & outerfont,
- bool fortoc,
pos_type initial) const
{
docstring retval;
Layout const & style = *d->layout_;
- if (!fortoc) {
+ if (!runparams.for_toc && runparams.html_make_pars) {
// generate a magic label for this paragraph
string const attr = "id='" + magicLabel() + "'";
- xs << CompTag("a", attr);
+ xs << html::CompTag("a", attr);
}
FontInfo font_old =
// parsing main loop
for (pos_type i = initial; i < size(); ++i) {
+ // let's not show deleted material in the output
+ if (isDeleted(i))
+ continue;
+
Font font = getFont(buf.params(), i, outerfont);
// emphasis
if (font_old.emph() != font.fontInfo().emph()) {
if (font.fontInfo().emph() == FONT_ON) {
- xs << StartTag("em");
+ xs << html::StartTag("em");
emph_flag = true;
} else if (emph_flag && i != initial) {
- xs << EndTag("em");
+ xs << html::EndTag("em");
emph_flag = false;
}
}
// bold
if (font_old.series() != font.fontInfo().series()) {
if (font.fontInfo().series() == BOLD_SERIES) {
- xs << StartTag("strong");
+ xs << html::StartTag("strong");
bold_flag = true;
} else if (bold_flag && i != initial) {
- xs << EndTag("strong");
+ xs << html::EndTag("strong");
bold_flag = false;
}
}
if (inset) {
InsetCommand const * ic = inset->asInsetCommand();
InsetLayout const & il = inset->getLayout();
- if (!fortoc || il.isInToc() || (ic && ic->isInToc())) {
+ InsetMath const * im = inset->asInsetMath();
+ if (!runparams.for_toc
+ || im || il.isInToc() || (ic && ic->isInToc())) {
OutputParams np = runparams;
if (!il.htmlisblock())
np.html_in_par = true;
return false;
docstring word = asString(from, to, AS_STR_INSETS);
- string const lang_code = lyxrc.spellchecker_alt_lang.empty()
- ? getFontSettings(d->inset_owner_->buffer().params(), from).language()->code()
- : lyxrc.spellchecker_alt_lang;
- wl = WordLangTuple(word, lang_code);
+ string lang_code;
+ string lang_variety;
+ if (!lyxrc.spellchecker_alt_lang.empty())
+ lang_variety = split(lyxrc.spellchecker_alt_lang, lang_code, '-');
+ else {
+ lang_code = getFontSettings(
+ d->inset_owner_->buffer().params(), from).language()->code();
+ lang_variety = getFontSettings(
+ d->inset_owner_->buffer().params(), from).language()->variety();
+ }
+ wl = WordLangTuple(word, lang_code, lang_variety);
SpellChecker::Result res = speller->check(wl);
// Just ignore any error that the spellchecker reports.
// FIXME: we should through out an exception and catch it in the GUI to