commit 12bb380941437fe8a48774e7ceb5f17034dc3317
Author: Richard Kimberly Heck <[email protected]>
Date: Sun Jan 10 01:43:34 2021 -0500
Fix bug #5972: Count words in citations (approximately).
---
src/Buffer.cpp | 6 ++++++
src/frontends/qt/GuiApplication.cpp | 1 +
src/insets/Inset.h | 3 +++
src/insets/InsetCitation.cpp | 16 ++++++++++++++--
src/insets/InsetCitation.h | 2 ++
5 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 4455039..40c91b8 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -5365,6 +5365,12 @@ void Buffer::Impl::updateStatistics(DocIterator & from,
DocIterator & to, bool s
}
else if (ins && ins->isSpace())
++blank_count_;
+ else if (ins) {
+ pair<int, int> words = ins->isWords();
+ char_count_ += words.first;
+ word_count_ += words.second;
+ inword = false;
+ }
else {
char_type const c = par.getChar(pos);
if (isPrintableNonspace(c))
diff --git a/src/frontends/qt/GuiApplication.cpp
b/src/frontends/qt/GuiApplication.cpp
index b0ec64e..0016f6d 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -1056,6 +1056,7 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
setDesktopFileName(lyx_package);
#endif
+ // FIXME Deprecated. Should use QRandomGenerator since 5.10
qsrand(QDateTime::currentDateTime().toTime_t());
// Install LyX translator for missing Qt translations
diff --git a/src/insets/Inset.h b/src/insets/Inset.h
index ab2c535..824ba46 100644
--- a/src/insets/Inset.h
+++ b/src/insets/Inset.h
@@ -466,6 +466,9 @@ public:
/// is this equivalent to a space (which is BTW different from
/// a line separator)?
virtual bool isSpace() const { return false; }
+ /// returns chars, words if the inset is equivalent to such, otherwise
+ /// (0,0), which should be interpreted as 'false'
+ virtual std::pair<int, int> isWords() const { return
std::pair<int,int>(0, 0); }
/// does this inset try to use all available space (like \\hfill does)?
virtual bool isHfill() const { return false; }
diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp
index ead9d3a..6672ea1 100644
--- a/src/insets/InsetCitation.cpp
+++ b/src/insets/InsetCitation.cpp
@@ -37,6 +37,7 @@
#include "support/FileNameList.h"
#include "support/gettext.h"
#include "support/lstrings.h"
+#include "support/textutils.h"
#include <algorithm>
#include <climits>
@@ -594,7 +595,7 @@ int InsetCitation::plaintext(odocstringstream & os,
if (cmd == "nocite")
return 0;
- docstring const label = generateLabel(false);
+ docstring const label = generateLabel();
os << label;
return label.size();
}
@@ -658,7 +659,7 @@ docstring InsetCitation::xhtml(XMLStream & xs, OutputParams
const &) const
void InsetCitation::toString(odocstream & os) const
{
odocstringstream ods;
- plaintext(ods, OutputParams(0));
+ plaintext(ods, OutputParams(nullptr));
os << ods.str();
}
@@ -775,6 +776,17 @@ void InsetCitation::latex(otexstream & os, OutputParams
const & runparams) const
os << "}";
}
+pair<int, int> InsetCitation::isWords() const
+{
+ docstring const label = generateLabel(false);
+ int words = 1;
+ for (auto const & c : label) {
+ if (lyx::isSpace(c))
+ words++;
+ }
+ return pair<int, int>(label.size(), words);
+}
+
string InsetCitation::contextMenuName() const
{
diff --git a/src/insets/InsetCitation.h b/src/insets/InsetCitation.h
index 3d97bbf..f41ef54 100644
--- a/src/insets/InsetCitation.h
+++ b/src/insets/InsetCitation.h
@@ -101,6 +101,8 @@ public:
bool openCitationPossible() const;
/// search and open citation source
void openCitation();
+ ///
+ std::pair<int, int> isWords() const override;
private:
/// tries to make a pretty label and makes a basic one if not
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs