From: Richard Heck Date: Sun, 8 Apr 2012 14:03:23 +0000 (-0400) Subject: The logic of the endParagraph() routine is wrong. We should first X-Git-Tag: 2.1.0beta1~1933^2~54 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=7c5f28ad265;p=features.git The logic of the endParagraph() routine is wrong. We should first check if the parsep_tag is pending. --- diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index fbd9f4bc1c..11d2de2734 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -283,37 +283,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()) {