]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
That didn't really work. So revert to old CSS for gray notes.
[lyx.git] / src / Paragraph.cpp
index 39d5540c68697606bec3596101984300943df615..0266c2e6ff9cf19a5b7875a12ebee99a7fceed7e 100644 (file)
@@ -5,6 +5,7 @@
  *
  * \author Asger Alstrup
  * \author Lars Gullik Bjønnes
+ * \author Richard Heck (XHTML output)
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
  * \author John Levon
@@ -1071,6 +1072,18 @@ bool Paragraph::Private::latexSpecialPhrase(odocstream & os, pos_type & i,
 
 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");
@@ -1945,6 +1958,9 @@ bool Paragraph::latex(BufferParams const & bparams,
 {
        LYXERR(Debug::LATEX, "Paragraph::latex...     " << this);
 
+       if (layout().inpreamble)
+               return true;
+
        bool return_value = false;
 
        bool const allowcust = allowParagraphCustomization();
@@ -2291,13 +2307,12 @@ pos_type Paragraph::firstWordLyXHTML(XHTMLStream & xs, OutputParams const & runp
        pos_type i;
        for (i = 0; i < size(); ++i) {
                if (Inset const * inset = getInset(i)) {
-// FIXME XHTMLStream
-//                     inset->xhtml(xs, runparams);
+                       inset->xhtml(xs, runparams);
                } else {
                        char_type c = d->text_[i];
                        if (c == ' ')
                                break;
-                       xs << html::escapeChar(c);
+                       xs << c;
                }
        }
        return i;
@@ -2379,17 +2394,23 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                                    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;
 
        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;
 
@@ -2417,16 +2438,19 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                                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;
-                       // FIXME XHTMLStream
-                       // 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];
 
@@ -2447,7 +2471,10 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                                }
                                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;
                }
@@ -3121,4 +3148,12 @@ bool Paragraph::isMisspelled(pos_type pos) const
 }
 
 
+string Paragraph::magicLabel() const
+{
+       stringstream ss;
+       ss << "magicparlabel-" << id();
+       return ss.str();
+}
+
+
 } // namespace lyx