Я пытаюсь сделать простой текстовый редактор в clojure, чтобы познакомиться с ним. Я думал об использовании застежек-молний для структуры, навигации и обновлении редактора.
Я думал сохранить текст редактора в документе примерно так:
(def document-test {
:id "doc1"
:info {
:title "Moluctular bio"
:description "Test document"
}
:nodes [{
:type "header"
:content "This is a header"
:id "h1"
}
{
:type "p"
:content "this is a paragraph"
:id "p1"
}
{
:type "todo"
:content "Todo list"
:id "t1"
:nodes [
{
:type "todoelement"
:content "Do this"
:id "td1"
}
{
:type "todoelement"
:content "Do that"
:id "td2"
}]}]})
Поэтому я хочу сделать молнию, которая сможет легко ориентироваться в этом. Может молния для этого не подойдет? Но я думал начать с корня. Спуск вниз приведет вас к узлам этих детей. Таким образом, верхняя часть документа имеет идентификатор h1.
У меня есть следующее, но это не позволяет детям быть массивом:
(defn map-zip [m]
(zip/zipper
#(map? (second %))
#(seq (second %))
(fn [node children] [(first node) (into {} children)])
[:root m]))
Ожидается что-то вроде:
{:foo {:bar {:baz 2}}}
Есть предположения? Я открыт для полного изменения структуры, если у кого-то есть предложения.