mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
#7357 correct the numbers by introducing two modes of word count
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37947 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
85f486f259
commit
291c5c91ec
@ -179,13 +179,19 @@ Buffer * newUnnamedFile(FileName const & path, string const & prefix,
|
||||
* are similar but, unfortunately, they seem to have a different
|
||||
* notion of what to count. Since nobody ever complained about that,
|
||||
* this proves (again) that any number beats no number ! (JMarc)
|
||||
* We have two use cases:
|
||||
* 1. Count the words of the given range for document statistics
|
||||
* - ignore inset content without output. (skipNoOutput == true)
|
||||
* 2. Count the words to present a progress bar for the spell checker
|
||||
* - has to count whole content. (skipNoOutput == false)
|
||||
*/
|
||||
int countWords(DocIterator const & from, DocIterator const & to)
|
||||
int countWords(DocIterator const & from, DocIterator const & to,
|
||||
bool skipNoOutput)
|
||||
{
|
||||
int count = 0;
|
||||
bool inword = false;
|
||||
|
||||
for (DocIterator dit = from ; dit != to && !dit.empty(); ) {
|
||||
for (DocIterator dit = from ; dit != to && !dit.atEnd(); ) {
|
||||
if (!dit.inTexted()) {
|
||||
dit.forwardPos();
|
||||
continue;
|
||||
@ -199,10 +205,11 @@ int countWords(DocIterator const & from, DocIterator const & to)
|
||||
inword = false;
|
||||
} else if (!par.isDeleted(pos)) {
|
||||
Inset const * ins = par.getInset(pos);
|
||||
if (ins && !ins->producesOutput()) {
|
||||
//skip this inset
|
||||
if (ins && skipNoOutput && !ins->producesOutput()) {
|
||||
// skip this inset
|
||||
++dit.top().pos();
|
||||
if (dit >= to)
|
||||
// stop if end of range was skipped
|
||||
if (!to.atEnd() && dit >= to)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
@ -47,7 +47,8 @@ Buffer * newUnnamedFile(support::FileName const & path,
|
||||
Buffer * loadIfNeeded(support::FileName const & fname);
|
||||
|
||||
/// Count the number of words in the text between these two iterators
|
||||
int countWords(DocIterator const & from, DocIterator const & to);
|
||||
int countWords(DocIterator const & from, DocIterator const & to,
|
||||
bool skipNoOutput = true);
|
||||
|
||||
/// Count the number of chars in the text between these two iterators
|
||||
int countChars(DocIterator const & from, DocIterator const & to, bool with_blanks);
|
||||
|
@ -270,8 +270,8 @@ bool GuiSpellchecker::initialiseParams(string const &)
|
||||
|
||||
DocIterator const begin = doc_iterator_begin(&buffer());
|
||||
Cursor const & cur = bufferview()->cursor();
|
||||
d->progress_ = countWords(begin, cur);
|
||||
d->total_ = d->progress_ + countWords(cur, doc_iterator_end(&buffer()));
|
||||
d->progress_ = countWords(begin, cur, false);
|
||||
d->total_ = d->progress_ + countWords(cur, doc_iterator_end(&buffer()), false);
|
||||
d->count_ = 0;
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user