summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2021-12-13 17:59:03 +0530
committerArun Isaac2021-12-13 18:06:11 +0530
commit1e2c9f9893ee2af5a2aa72f512742d101da8cf6a (patch)
treed62fa7533c32fdd94b269a8f827b1f64916a951e
parent64ed9fb4581b290c6c64152e577ee166ff1d4dd7 (diff)
downloadccwl-1e2c9f9893ee2af5a2aa72f512742d101da8cf6a.tar.gz
ccwl-1e2c9f9893ee2af5a2aa72f512742d101da8cf6a.tar.lz
ccwl-1e2c9f9893ee2af5a2aa72f512742d101da8cf6a.zip
ccwl: Organize serialize into a generic function.
* ccwl/graphviz.scm (serialize): Organize into a generic function that
dispatches on input type.
-rw-r--r--ccwl/graphviz.scm35
1 files changed, 17 insertions, 18 deletions
diff --git a/ccwl/graphviz.scm b/ccwl/graphviz.scm
index a3f4036..a505530 100644
--- a/ccwl/graphviz.scm
+++ b/ccwl/graphviz.scm
@@ -121,24 +121,23 @@ language."
 (define (serialize object)
   "Serialize OBJECT according to graphviz dot syntax. OBJECT may a
 symbol, a string, or a <html-string> object."
-  (let ((str (cond
-              ((symbol? object) (symbol->string object))
-              ((string? object) object)
-              ((html-string? object) (html-string-underlying object))
-              (else (error "Unknown object type to serialize to graphviz dot:" object)))))
-    (cond
-     ;; Surround HTML strings in <>, and don't escape.
-     ((html-string? object)
-      (format "<~a>" str))
-     ;; Don't quote safe strings.
-     ((string-every (char-set-union (char-set-intersection char-set:letter+digit
-                                                           char-set:ascii)
-                                    (char-set #\_))
-                    str)
-      str)
-     ;; Quote strings with unsafe characters.
-     (else
-      (format "\"~a\"" (string-replace-substring str "\"" "\\\""))))))
+  (cond
+   ((symbol? object)
+    (serialize (symbol->string object)))
+   ;; Surround HTML strings in <>, and don't escape.
+   ((html-string? object)
+    (format "<~a>" (html-string-underlying object)))
+   ;; Don't quote safe strings.
+   ((and (string? object)
+         (string-every (char-set-union (char-set-intersection char-set:letter+digit
+                                                              char-set:ascii)
+                                       (char-set #\_))
+                       object))
+    object)
+   ;; Quote strings with unsafe characters.
+   ((string? object)
+    (format "\"~a\"" (string-replace-substring object "\"" "\\\"")))
+   (else (error "Unknown object type to serialize to graphviz dot:" object))))
 
 (define* (graph->dot graph #:optional (port (current-output-port)) (level 0))
   "Render GRAPH, a <graph> object, in the graphviz dot syntax to