The branch, feature/docbook, has been updated. - Log -----------------------------------------------------------------
commit eeedeb8a20e5bfd062943f794f10814b6c6f78b5 Author: Thibaut Cuvelier <[email protected]> Date: Thu Sep 3 01:23:20 2020 +0200 DocBook: avoid using isspace in StartTag::writeTag. This is the cause of crashes (on both Windows and Linux). diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp index addf24a..dbe081f 100644 --- a/src/output_docbook.cpp +++ b/src/output_docbook.cpp @@ -429,16 +429,6 @@ void makeBibliography( } -bool isNotOnlySpace(docstring const & str) -{ - for (auto const & c: str) { - if (c != ' ' && c != '\t' && c != '\n' && c != '\v' && c != '\f' && c != '\r') - return true; - } - return false; -} - - void makeParagraph( Text const & text, Buffer const & buf, diff --git a/src/xml.cpp b/src/xml.cpp index dd9790f..478f961 100644 --- a/src/xml.cpp +++ b/src/xml.cpp @@ -108,12 +108,9 @@ docstring StartTag::writeTag() const { docstring output = '<' + tag_; if (!attr_.empty()) { - docstring attributes = xml::escapeString(attr_, XMLStream::ESCAPE_NONE); - attributes.erase(attributes.begin(), std::find_if(attributes.begin(), attributes.end(), - [](int c) {return !std::isspace(c);})); - if (!attributes.empty()) { + docstring attributes = xml::trimLeft(xml::escapeString(attr_, XMLStream::ESCAPE_NONE)); + if (!attributes.empty()) output += ' ' + attributes; - } } output += ">"; return output; @@ -601,6 +598,39 @@ docstring xml::uniqueID(docstring const & label) } +bool xml::isNotOnlySpace(docstring const & str) +{ + for (auto const & c: str) { + if (c != ' ' && c != '\t' && c != '\n' && c != '\v' && c != '\f' && c != '\r') + return true; + } + return false; +} + + +docstring xml::removeSpace(docstring const & str) +{ + odocstringstream ss; + for (auto const & c: str) { + if (c != ' ' && c != '\t' && c != '\n' && c != '\v' && c != '\f' && c != '\r') + ss << c; + } + return ss.str(); +} + + +docstring xml::trimLeft(docstring const & str) +{ + size_t i = 0; + for (auto const & c: str) { + if (c != ' ' && c != '\t' && c != '\n' && c != '\v' && c != '\f' && c != '\r') + return str.substr(i, docstring::npos); + i++; + } + return str; +} + + docstring xml::cleanID(docstring const & orig) { // The standard xml:id only allows letters, digits, '-' and '.' in a name. diff --git a/src/xml.h b/src/xml.h index ebb8b8e..568c5e5 100644 --- a/src/xml.h +++ b/src/xml.h @@ -162,6 +162,15 @@ docstring cleanID(docstring const &orig); /// returns a unique numeric ID docstring uniqueID(docstring const & label); +/// determines whether a string only contains space characters +bool isNotOnlySpace(docstring const & str); + +/// +docstring removeSpace(docstring const & str); + +/// +docstring trimLeft(docstring const & str); + struct FontTag; struct EndFontTag; ----------------------------------------------------------------------- Summary of changes: src/output_docbook.cpp | 10 ---------- src/xml.cpp | 40 +++++++++++++++++++++++++++++++++++----- src/xml.h | 9 +++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) hooks/post-receive -- Repository for new features -- lyx-cvs mailing list [email protected] http://lists.lyx.org/mailman/listinfo/lyx-cvs
