+ // Do not output empty environments if the whole paragraph has
+ // been deleted with ct and changes are not output.
+ bool output_changes;
+ if (!runparams.find_effective())
+ output_changes = bparams.output_changes;
+ else
+ output_changes = runparams.find_with_deleted();
+ bool const lastpar = size_t(pit + 1) >= paragraphs.size();
+ if (!lastpar) {
+ ParagraphList::const_iterator nextpar = paragraphs.iterator_at(pit + 1);
+ Paragraph const & cpar = paragraphs.at(pit);
+ if ((par->layout() != nextpar->layout()
+ || par->params().depth() == nextpar->params().depth()
+ || par->params().leftIndent() == nextpar->params().leftIndent())
+ && !cpar.empty()
+ && cpar.isDeleted(0, cpar.size()) && !output_changes) {
+ if (!cpar.parEndChange().deleted())
+ os << '\n' << '\n';
+ continue;
+ }
+ } else {
+ // This is the last par
+ Paragraph const & cpar = paragraphs.at(pit);
+ if ( !cpar.empty()
+ && cpar.isDeleted(0, cpar.size()) && !output_changes) {
+ if (!cpar.parEndChange().deleted())
+ os << '\n' << '\n';
+ continue;
+ }
+ }
+