]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
HTML for math sizes.
[lyx.git] / src / Paragraph.cpp
index 233057e9163ad9058363f378066dbef466f92de7..c47718c3d5a8eedf9d14d8040b1d10769600465a 100644 (file)
@@ -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;
        }
 
@@ -2396,7 +2417,6 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                                    XHTMLStream & xs,
                                    OutputParams const & runparams,
                                    Font const & outerfont,
-                                               bool fortoc,
                                    pos_type initial) const
 {
        docstring retval;
@@ -2407,10 +2427,10 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
 
        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 =
@@ -2418,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;
                        }
                }
@@ -2447,7 +2471,9 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                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;
@@ -2577,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();
 
@@ -2590,6 +2616,20 @@ bool Paragraph::isMultiLingual(BufferParams const & bparams) const
 }
 
 
+void Paragraph::getLanguages(std::set<Language const *> & 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);
@@ -2601,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) {
@@ -3125,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<Language *>(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;