Implement buffer-anonymize more efficiently

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

Move the handling of the lfun to Buffer class.

Document the new feature in release notes.

(cherry picked from commit 1dba36c7ce)
This commit is contained in:
Jean-Marc Lasgouttes 2018-02-15 12:07:33 +01:00
parent abdadcceb9
commit 9a1728c70a
5 changed files with 31 additions and 13 deletions

View File

@ -111,6 +111,10 @@
opened in editable mode. This state used to be hardcoded at compile
time.
* buffer-anonymize (2.3.2)
Replace all text n the document by streams of `a'. This is useful
for sharing private documents in a bug report.
* font-crossout
Cross out characters.

View File

@ -2612,15 +2612,16 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
flag.setOnOff(params().output_changes);
break;
case LFUN_BUFFER_TOGGLE_COMPRESSION: {
case LFUN_BUFFER_TOGGLE_COMPRESSION:
flag.setOnOff(params().compressed);
break;
}
case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC: {
case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC:
flag.setOnOff(params().output_sync);
break;
}
case LFUN_BUFFER_ANONYMIZE:
break;
default:
return false;
@ -2898,6 +2899,15 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
params().output_sync = !params().output_sync;
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:
dispatched = false;
break;

View File

@ -1112,7 +1112,6 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
case LFUN_WORD_FIND_FORWARD:
case LFUN_WORD_FIND_BACKWARD:
case LFUN_WORD_REPLACE:
case LFUN_BUFFER_ANONYMIZE:
case LFUN_MARK_OFF:
case LFUN_MARK_ON:
case LFUN_MARK_TOGGLE:
@ -1576,14 +1575,6 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
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()));
}
}
case LFUN_WORD_FINDADV: {
FindAndReplaceOptions opt;
istringstream iss(to_utf8(cmd.argument()));

View File

@ -4176,6 +4176,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(
pos_type const & first, pos_type const & last,
SpellChecker::Result result,

View File

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