Это простая реализация (я также буду признателен за обзор кода, я не очень хорош в программировании внешнего интерфейса):
(* This converts a sequence of expressions into boxes *)
Clear[makeManyBoxes]
SetAttributes[makeManyBoxes, HoldAllComplete];
makeManyBoxes[e__] := List@ReleaseHold[MakeBoxes /@ HoldComplete[e]]
(* Split a list at separator *)
split[list_, sep_] :=
DeleteCases[Split[list, #1 =!= sep && #2 =!= sep &], {sep}]
wr[e_] := NotebookWrite[InputNotebook[], Cell[BoxData[e], "Input"]]
CreatePalette@Button["Paste!",
Module[{clipboard},
clipboard = NotebookGet[ClipboardNotebook[]][[1, 1, 1]];
If[StringQ[clipboard],
wr /@
split[ToExpression[clipboard, InputForm, makeManyBoxes], "Null"]
]
]
]
Он разбивает ячейки на пустые строки.Для этого нам нужно сначала проанализировать выражение (что, если в середине длинной Module
? Появится пустая строка).Но один только синтаксический анализ вызовет несколько проблем.
Проблемы с этой реализацией:
- он удаляет комментарии
- он не может обрабатывать неправильные данные
- форматирование не сохраняется (новые строки)
- Я уверен, что должно быть несколько других вещей, которые могут пойти не так