Implement buffer-anonymize more efficiently

The work is done now in Paragraph::anonymize().

Move the handling of the lfun to Buffer class.
This commit is contained in:
Jean-Marc Lasgouttes 2018-02-07 15:35:46 +01:00
parent 86e42848fe
commit 1dba36c7ce
4 changed files with 27 additions and 14 deletions

View File

@ -2569,15 +2569,16 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
flag.setOnOff(params().output_changes); flag.setOnOff(params().output_changes);
break; break;
case LFUN_BUFFER_TOGGLE_COMPRESSION: { case LFUN_BUFFER_TOGGLE_COMPRESSION:
flag.setOnOff(params().compressed); flag.setOnOff(params().compressed);
break; break;
}
case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC: { case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC:
flag.setOnOff(params().output_sync); flag.setOnOff(params().output_sync);
break; break;
}
case LFUN_BUFFER_ANONYMIZE:
break;
default: default:
return false; return false;
@ -2849,6 +2850,15 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
params().output_sync = !params().output_sync; params().output_sync = !params().output_sync;
break; break;
case LFUN_BUFFER_ANONYMIZE: {
undo().recordUndoFullBuffer(CursorData());
CursorData cur(doc_iterator_begin(this));
for ( ; cur ; cur.forwardPar())
cur.paragraph().anonymize();
dr.forceBufferUpdate();
break;
}
default: default:
dispatched = false; dispatched = false;
break; break;

View File

@ -1134,7 +1134,6 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
case LFUN_WORD_FIND_FORWARD: case LFUN_WORD_FIND_FORWARD:
case LFUN_WORD_FIND_BACKWARD: case LFUN_WORD_FIND_BACKWARD:
case LFUN_WORD_REPLACE: case LFUN_WORD_REPLACE:
case LFUN_BUFFER_ANONYMIZE:
case LFUN_MARK_OFF: case LFUN_MARK_OFF:
case LFUN_MARK_ON: case LFUN_MARK_ON:
case LFUN_MARK_TOGGLE: case LFUN_MARK_TOGGLE:
@ -1622,15 +1621,6 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
break; break;
} }
case LFUN_BUFFER_ANONYMIZE: {
for (char c = '0'; c <= 'Z'; c++) {
odocstringstream ss;
ss << "a\n" << c << "\n0 0 1 1 0";
lyx::dispatch(FuncRequest(LFUN_WORD_REPLACE, ss.str()));
}
break;
}
case LFUN_WORD_FINDADV: { case LFUN_WORD_FINDADV: {
FindAndReplaceOptions opt; FindAndReplaceOptions opt;
istringstream iss(to_utf8(cmd.argument())); istringstream iss(to_utf8(cmd.argument()));

View File

@ -4148,6 +4148,15 @@ SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to,
} }
void Paragraph::anonymize()
{
// This is a very crude anonymization for now
for (char_type & c : d->text_)
if (isLetterChar(c) || isNumber(c))
c = 'a';
}
void Paragraph::Private::markMisspelledWords( void Paragraph::Private::markMisspelledWords(
pos_type const & first, pos_type const & last, pos_type const & first, pos_type const & last,
SpellChecker::Result result, SpellChecker::Result result,

View File

@ -505,6 +505,10 @@ public:
/// presently used only in the XHTML output routines. /// presently used only in the XHTML output routines.
std::string magicLabel() const; std::string magicLabel() const;
/// anonymizes the paragraph contents (but not the paragraphs
/// contained inside it. Does not handle undo.
void anonymize();
private: private:
/// Expand the counters for the labelstring of \c layout /// Expand the counters for the labelstring of \c layout
docstring expandParagraphLabel(Layout const &, BufferParams const &, docstring expandParagraphLabel(Layout const &, BufferParams const &,