This Engineering Notebook post summarizes PR #3473 
<https://github.com/leo-editor/leo-editor/pull/3473>: use flat json for 
cut/copy/paste nodes. This PR is full of unexpected complications and edge 
cases.


*I plan to delay this PR until after Félix releases leoJS*. I don't want to 
distract him, and Leo works well enough without the PR.


*Overview of the PR*


The PR uses "flat" json when cutting, coping, and pasting nodes.


*c.archive* creates the json from a node and its descendants when Leo 
copies or cuts a node.


*c.unarchive* "patches" a given *root vnode* so that the root contains the 
result of the paste operation. A *command_name* argument tells c.unarchive 
whether the paste was paste-node, paste-retaining-clones, or 
paste-as-template.


The PR defines various helper functions and methods. See the PR for 
details. The PR also creates unit tests for all new and changed code.


This overview seems straightforward, but the unit tests revealed many 
unexpected complications. The PR contains over 100 commits pushed over a 
period of three weeks.


*What body text wins?*


When using paste-retaining-clones, should pasted body text override 
existing body text? Leo's existing code doesn't do this. 


Issue #3485 <https://github.com/leo-editor/leo-editor/issues/3485> suggests 
(for paste-retaining-clones) that pasted body text should override existing 
body text. But I have my doubts. Why prefer potentially older body text?


*Server compatibility*


As I write this, I see that the PR has changed (broken) *server.copy_node* 
and *server.copy_node_as_json*. See the PR's first comments for details. It 
would be straightforward to restore legacy operation. I'll do that soon. 


*Json as a file format*


A new kwarg will tell c.archive whether to write "marks" and "was_cloned" 
keys. Those keys should not appear in a file format: they would create 
unnecessary diffs. A new "kind" key will tell checker methods what archive 
keys to expect.


*Summary*


I have omitted all mention of the details that have bedeviled me for the 
past three weeks. Little work remains.


Imo, Leo should always use the c.archive format when cutting, copying, and 
pasting nodes. Others may disagree.


#3505 <https://github.com/leo-editor/leo-editor/issues/3505> suggests that 
Leo should *optionally* write .leo files in c.archive format.


Issues #3485 <https://github.com/leo-editor/leo-editor/issues/3485>,  #3505 
<https://github.com/leo-editor/leo-editor/issues/3505>, and PR #3473 
<https://github.com/leo-editor/leo-editor/pull/3473> have 6.7.5 milestones. 
However, I'll merge no related code until Félix finishes his work on leoJS.


All questions and comments are welcome.


Edward

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/99d4a01e-fecd-4af1-8a5a-ffa0c210c372n%40googlegroups.com.

Reply via email to