From c1ee222337cef48dba058b42e79ae911f0b57ff1 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Thu, 25 Nov 2021 18:54:33 +0100 Subject: [PATCH] Add function for generating graphviz trees from Org lists --- conlanging.el | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/conlanging.el b/conlanging.el index d561025..1885847 100644 --- a/conlanging.el +++ b/conlanging.el @@ -55,6 +55,38 @@ bear the label `T-NODE-TEXT'." t-node-generation t-node-text)) +(defun conlanging--declare-node-for-list (t-name t-label) + (format "\"%s\"[label=\"%s\"];" + t-name + t-label)) + +;;;###autoload +(defun conlanging-list-to-graphviz (t-list &optional t-previous-node) + (cond + ((null t-previous-node) + (let* ((list (car t-list)) + (label (car list)) + (label-name (concat label "-" (org-id-time-to-b36)))) + (concat "graph{graph[dpi=300,bgcolor=\"transparent\"];node[shape=plaintext];" + (conlanging--declare-node-for-list label-name label) + (conlanging-list-to-graphviz (cdadr list) label-name) + "}"))) + ((null t-list) "") + ((listp t-list) + (let* ((graph-str "")) + (dolist (elem t-list graph-str) + (let* ((label (car elem)) + (label-name (concat label "-" (org-id-time-to-b36)))) + (setf graph-str + (format "%s%s\"%s\"--\"%s\";%s" + graph-str + (conlanging--declare-node-for-list label-name label) + t-previous-node + label-name + (conlanging-list-to-graphviz (cdadr elem) + label-name))))))))) + + ;;;###autoload (defun conlanging-tree-to-dot (t-tree &optional t-current-generation t-previous-generation) "Translate an Elisp tree into a graphviz tree.