X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=c47718c3d5a8eedf9d14d8040b1d10769600465a;hb=f3711d8a651445a61e1a759ac7493a9c5c7800e2;hp=abee04a727d42c1430274040c7a4ea977a7722ee;hpb=59c04f7096779680caa0ba7623f9b53affef218b;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index abee04a727..c47718c3d5 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -1086,6 +1086,11 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const 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"); @@ -1651,7 +1656,21 @@ void Paragraph::setLabelWidthString(docstring const & s) } -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(); @@ -1672,7 +1691,7 @@ docstring Paragraph::expandLabel(Layout const & layout, 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); @@ -1985,8 +2004,10 @@ bool Paragraph::latex(BufferParams const & bparams, 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); @@ -2032,8 +2053,8 @@ bool Paragraph::latex(BufferParams const & bparams, runparams); runningChange = Change(Change::UNCHANGED); - os << "] "; - column +=2; + os << "}] "; + column +=3; } if (style.isCommand()) { os << '{'; @@ -2226,7 +2247,7 @@ bool Paragraph::latex(BufferParams const & bparams, // Needed if there is an optional argument but no contents. if (body_pos > 0 && body_pos == size()) { - os << "]~"; + os << "}]~"; return_value = false; } @@ -2406,10 +2427,10 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, Layout const & style = *d->layout_; - if (!runparams.for_toc) { + 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 = @@ -2417,25 +2438,29 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, // 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; } } @@ -2578,7 +2603,7 @@ void Paragraph::changeLanguage(BufferParams const & bparams, bool Paragraph::isMultiLingual(BufferParams const & bparams) const { - Language const * doc_language = bparams.language; + Language const * doc_language = bparams.language; FontList::const_iterator cit = d->fontlist_.begin(); FontList::const_iterator end = d->fontlist_.end(); @@ -2591,6 +2616,20 @@ bool Paragraph::isMultiLingual(BufferParams const & bparams) const } +void Paragraph::getLanguages(std::set & languages) const +{ + FontList::const_iterator cit = d->fontlist_.begin(); + FontList::const_iterator end = d->fontlist_.end(); + + for (; cit != end; ++cit) { + Language const * lang = cit->font().language(); + if (lang != ignore_language && + lang != latex_language) + languages.insert(lang); + } +} + + docstring Paragraph::asString(int options) const { return asString(0, size(), options); @@ -2602,8 +2641,8 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const odocstringstream os; if (beg == 0 - && options & AS_STR_LABEL - && !d->params_.labelString().empty()) + && options & AS_STR_LABEL + && !d->params_.labelString().empty()) os << d->params_.labelString() << ' '; for (pos_type i = beg; i < end; ++i) { @@ -3126,21 +3165,40 @@ bool Paragraph::spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl, if (!speller) return false; + if (!d->layout_->spellcheck || !inInset().allowSpellCheck()) + return false; + locateWord(from, to, WHOLE_WORD); if (from == to || from >= pos_type(d->text_.size())) 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); - SpellChecker::Result res = speller->check(wl); + // Ignore words with digits + // FIXME: make this customizable + // (note that hunspell ignores words with digits by default) + bool const ignored = hasDigit(word); + Language * lang = const_cast(getFontSettings( + d->inset_owner_->buffer().params(), from).language()); + if (lang == d->inset_owner_->buffer().params().language + && !lyxrc.spellchecker_alt_lang.empty()) { + string lang_code; + string const lang_variety = + split(lyxrc.spellchecker_alt_lang, lang_code, '-'); + lang->setCode(lang_code); + lang->setVariety(lang_variety); + } + wl = WordLangTuple(word, lang); + SpellChecker::Result res = ignored ? + SpellChecker::OK : speller->check(wl); +#if 0 +// FIXME: the code below makes aspell abort if a word in an unknown +// language is checked. // Just ignore any error that the spellchecker reports. // FIXME: we should through out an exception and catch it in the GUI to // display the error. if (!speller->error().empty()) return false; +#endif bool const misspelled = res != SpellChecker::OK && res != SpellChecker::IGNORED_WORD;