X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_xhtml.cpp;h=080369f104e935535a2be7e6a548416584717b29;hb=175711046db2b986550318fa78d901628de28cb8;hp=1dd4ef1bda1c73d0482a6a99f2b68185cfe8b3a4;hpb=dd7863b6ac70d3d1e6298306dab6c3b7235c9e99;p=lyx.git diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index 1dd4ef1bda..080369f104 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -172,6 +172,7 @@ string fontToTag(html::FontTypes type) case FT_DBAR: return "u"; case FT_SOUT: + case FT_XOUT: return "del"; case FT_ITALIC: return "i"; @@ -211,6 +212,7 @@ string fontToAttribute(html::FontTypes type) return ""; case FT_DBAR: return "class='dline'"; + case FT_XOUT: case FT_SOUT: return "class='strikeout'"; case FT_WAVE: @@ -326,7 +328,7 @@ void XHTMLStream::writeError(std::string const & s) const namespace { // an illegal tag for internal use static html::StartTag const parsep_tag("&LyX_parsep_tag&"); -} +} // namespace bool XHTMLStream::closeFontTags() @@ -335,6 +337,10 @@ bool XHTMLStream::closeFontTags() // we haven't had any content return true; +#ifdef XHTML_DEBUG + dumpTagStack("Beging Close Font Tags"); +#endif + // this may be a useless check, since we ought at least to have // the parsep_tag. but it can't hurt too much to be careful. if (tag_stack_.empty()) @@ -347,10 +353,14 @@ bool XHTMLStream::closeFontTags() tag_stack_.pop_back(); // this shouldn't happen, since then the font tags // weren't in any other tag. - LBUFERR(!tag_stack_.empty()); + LASSERT(!tag_stack_.empty(), return true); curtag = tag_stack_.back(); } +#ifdef XHTML_DEBUG + dumpTagStack("End Close Font Tags"); +#endif + if (*curtag == parsep_tag) return true; @@ -373,6 +383,9 @@ void XHTMLStream::startDivision(bool keep_empty) pending_tags_.push_back(makeTagPtr(html::StartTag(parsep_tag))); if (keep_empty) clearTagDeque(); +#ifdef XHTML_DEBUG + dumpTagStack("StartDivision"); +#endif } @@ -390,6 +403,11 @@ void XHTMLStream::endDivision() if (*cur_tag == parsep_tag) break; } + +#ifdef XHTML_DEBUG + dumpTagStack("EndDivision"); +#endif + return; } @@ -408,6 +426,10 @@ void XHTMLStream::endDivision() writeError("Tag `" + cur_tag->tag_ + "' still open at end of paragraph. Closing."); os_ << cur_tag->writeEndTag(); } + +#ifdef XHTML_DEBUG + dumpTagStack("EndDivision"); +#endif } @@ -845,12 +867,28 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf, // (i) the current layout permits multiple paragraphs // (ii) we are either not already inside a paragraph (HTMLIsBlock) OR // we are, but this is not the first paragraph - // But we do not want to open the paragraph tag if this paragraph contains - // only one item, and that item is "inline", i.e., not HTMLIsBlock (such - // as a branch). That is the "special case" we handle first. + // + // But there is also a special case, and we first see whether we are in it. + // We do not want to open the paragraph tag if this paragraph contains + // only one item, and that item is "inline", i.e., not HTMLIsBlock (such + // as a branch). On the other hand, if that single item has a font change + // applied to it, then we still do need to open the paragraph. + // + // Obviously, this is very fragile. The main reason we need to do this is + // because of branches, e.g., a branch that contains an entire new section. + // We do not really want to wrap that whole thing in a