mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Backport the following from trunk:
29cf7af6d3
8dd436b7dc
7c5f28ad26
This fixes issues with empty paragraphs in XHTML output.
This commit is contained in:
parent
c5c0a289f5
commit
25246819de
@ -198,7 +198,7 @@ XHTMLStream::XHTMLStream(odocstream & os)
|
||||
{}
|
||||
|
||||
|
||||
void XHTMLStream::writeError(std::string const & s)
|
||||
void XHTMLStream::writeError(std::string const & s) const
|
||||
{
|
||||
LYXERR0(s);
|
||||
os_ << from_utf8("<!-- Output Error: " + s + " -->");
|
||||
@ -213,8 +213,15 @@ namespace {
|
||||
|
||||
bool XHTMLStream::closeFontTags()
|
||||
{
|
||||
if (isTagPending(parsep_tag))
|
||||
// we haven't had any content
|
||||
return true;
|
||||
|
||||
// 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())
|
||||
return true;
|
||||
|
||||
// first, we close any open font tags we can close
|
||||
html::StartTag curtag = tag_stack_.back();
|
||||
while (html::isFontTag(curtag.tag_)) {
|
||||
@ -256,37 +263,27 @@ void XHTMLStream::startParagraph(bool keep_empty)
|
||||
|
||||
void XHTMLStream::endParagraph()
|
||||
{
|
||||
if (!isTagOpen(parsep_tag)) {
|
||||
// is it pending?
|
||||
TagStack::const_iterator dit = pending_tags_.begin();
|
||||
TagStack::const_iterator const den = pending_tags_.end();
|
||||
bool found = false;
|
||||
for (; dit != den; ++dit) {
|
||||
if (dit->tag_ == parsep_tag) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
writeError("No paragraph separation tag found in endParagraph().");
|
||||
return;
|
||||
}
|
||||
|
||||
// this case is normal.
|
||||
if (isTagPending(parsep_tag)) {
|
||||
// this case is normal. it just means we didn't have content,
|
||||
// so the parsep_tag never got moved onto the tag stack.
|
||||
while (!pending_tags_.empty()) {
|
||||
// clear all pending tags up to and including the parsep tag.
|
||||
// note that we work from the back, because we want to get rid
|
||||
// of everything that hasnt' been used.
|
||||
// of everything that hasn't been used.
|
||||
html::StartTag const cur_tag = pending_tags_.back();
|
||||
string const & tag = cur_tag.tag_;
|
||||
tag_stack_.pop_back();
|
||||
pending_tags_.pop_back();
|
||||
if (tag == parsep_tag)
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isTagOpen(parsep_tag)) {
|
||||
writeError("No paragraph separation tag found in endParagraph().");
|
||||
return;
|
||||
}
|
||||
|
||||
// this case is also normal, if the parsep tag is the last one
|
||||
// on the stack. otherwise, it's an error.
|
||||
while (!tag_stack_.empty()) {
|
||||
@ -398,7 +395,7 @@ XHTMLStream & XHTMLStream::operator<<(html::CR const &)
|
||||
}
|
||||
|
||||
|
||||
bool XHTMLStream::isTagOpen(string const & stag)
|
||||
bool XHTMLStream::isTagOpen(string const & stag) const
|
||||
{
|
||||
TagStack::const_iterator sit = tag_stack_.begin();
|
||||
TagStack::const_iterator const sen = tag_stack_.end();
|
||||
@ -409,6 +406,17 @@ bool XHTMLStream::isTagOpen(string const & stag)
|
||||
}
|
||||
|
||||
|
||||
bool XHTMLStream::isTagPending(string const & stag) const
|
||||
{
|
||||
TagStack::const_iterator sit = pending_tags_.begin();
|
||||
TagStack::const_iterator const sen = pending_tags_.end();
|
||||
for (; sit != sen; ++sit)
|
||||
if (sit->tag_ == stag)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// this is complicated, because we want to make sure that
|
||||
// everything is properly nested. the code ought to make
|
||||
// sure of that, but we won't assert (yet) if we run into
|
||||
|
@ -138,9 +138,11 @@ private:
|
||||
///
|
||||
void clearTagDeque();
|
||||
///
|
||||
bool isTagOpen(std::string const &);
|
||||
bool isTagOpen(std::string const &) const;
|
||||
///
|
||||
void writeError(std::string const &);
|
||||
bool isTagPending(std::string const &) const;
|
||||
///
|
||||
void writeError(std::string const &) const;
|
||||
///
|
||||
odocstream & os_;
|
||||
///
|
||||
|
@ -80,6 +80,8 @@ What's new
|
||||
|
||||
- Index entries in XHTML output no longer sorted case sensitively.
|
||||
|
||||
- Fixed some probelms XHTML output had with empty paragraphs.
|
||||
|
||||
|
||||
* USER INTERFACE
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user