]> git.lyx.org Git - lyx.git/blobdiff - src/output_xhtml.cpp
Initialize nextraw_. The first character of the outputted html file was represented...
[lyx.git] / src / output_xhtml.cpp
index 8eabbc19ab8246b24a8f373ec52d52efd212eda6..376de29c25c0eac3e601f9e5a51d6e84e405daa1 100644 (file)
@@ -123,7 +123,7 @@ docstring CompTag::asTag() const
 ////////////////////////////////////////////////////////////////
 
 XHTMLStream::XHTMLStream(odocstream & os) 
-               :os_(os)
+               : os_(os), nextraw_(false)
 {}
 
 
@@ -143,6 +143,8 @@ void XHTMLStream::writeError(std::string const & s)
 
 bool XHTMLStream::closeFontTags()
 {
+       if (tag_stack_.empty())
+               return true;
        // first, we close any open font tags we can close
        StartTag curtag = tag_stack_.back();
        while (html::isFontTag(curtag.tag_)) {
@@ -185,7 +187,11 @@ void XHTMLStream::clearTagDeque()
 XHTMLStream & XHTMLStream::operator<<(docstring const & d)
 {
        clearTagDeque();
-       os_ << html::htmlize(d);
+       if (nextraw_) {
+               os_ << d;
+               nextraw_ = false;
+       } else
+               os_ << html::htmlize(d);
        return *this;
 }
 
@@ -193,7 +199,12 @@ XHTMLStream & XHTMLStream::operator<<(docstring const & d)
 XHTMLStream & XHTMLStream::operator<<(const char * s)
 {
        clearTagDeque();
-       os_ << html::htmlize(from_ascii(s));
+       docstring const d = from_ascii(s);
+       if (nextraw_) {
+               os_ << d;
+               nextraw_ = false;
+       } else
+               os_ << html::htmlize(d);
        return *this;
 }
 
@@ -201,7 +212,18 @@ XHTMLStream & XHTMLStream::operator<<(const char * s)
 XHTMLStream & XHTMLStream::operator<<(char_type c)
 {
        clearTagDeque();
-       os_ << html::escapeChar(c);
+       if (nextraw_) {
+               os_ << c;
+               nextraw_ = false;
+       } else
+               os_ << html::escapeChar(c);
+       return *this;
+}
+
+
+XHTMLStream & XHTMLStream::operator<<(NextRaw const &) 
+{ 
+       nextraw_ = true; 
        return *this;
 }
 
@@ -475,12 +497,12 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf,
                if (par != pbegin)
                        xs.cr();
 
-               // FIXME Should we really allow anything other than 'p' here?
-               
                // If we are already in a paragraph, and this is the first one, then we
                // do not want to open the paragraph tag.
-               bool const opened = 
-                       (par == pbegin && runparams.html_in_par) ? false : true;
+               // we also do not want to open it if the current layout does not permit
+               // multiple paragraphs.
+               bool const opened = runparams.html_make_pars &&
+                       (par != pbegin || !runparams.html_in_par);
                if (opened)
                        openTag(xs, lay);
                docstring const deferred = 
@@ -501,7 +523,7 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf,
                        xs.cr();
                }
                if (!deferred.empty()) {
-                       xs << deferred;
+                       xs << XHTMLStream::NextRaw() << deferred;
                        xs.cr();
                }
        }
@@ -617,21 +639,15 @@ ParagraphList::const_iterator makeEnvironmentHtml(Buffer const & buf,
                                        }
                                        if (labelfirst)
                                                openItemTag(xs, style);
-                                       else
-                                               // FIXME This should probalby be put into the layout file rather 
-                                               // than hardcoded.
-                                               xs << StartTag("span", "class='" + to_utf8(style.name()) + "_inneritem'");
                                }
                                par->simpleLyXHTMLOnePar(buf, xs, runparams, 
                                        text.outerFont(distance(begin, par)), sep);
-                               if (!isNormalEnv(style) && !labelfirst)
-                                       xs << EndTag("span");
                                ++par;
                                // We may not want to close the tag yet, in particular,
                                // if we're not at the end...
                                if (par != pend 
                                        //  and are doing items...
-                                        && style.latextype == LATEX_ITEM_ENVIRONMENT
+                                        && !isNormalEnv(style)
                                         // and if the depth has changed...
                                         && par->params().depth() != origdepth) {
                                         // then we'll save this layout for later, and close it when