Add web ui module to imports
[mudsync.git] / mudsync / scrubl.scm
index a3daa26b882bf258353ebb7696ca8e59d1cd199d..917b3a935a31b57751547aefb5055fa9ecccc616 100644 (file)
@@ -33,6 +33,7 @@
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 hash-table)
+  #:use-module (web uri)
   #:export (make-scrubl
             scrubl? scrubl-extend-fields
             scrubl-write
@@ -119,7 +120,6 @@ Pass in optional extra ARGS to the main META-WRITE"
     (lambda (p)
       (sxml->xml
        (scrubl-write-obj scrubl obj)
-       ;; (list 'pre (scrubl-write-obj scrubl obj))
        p))))
 
 
@@ -131,6 +131,22 @@ Pass in optional extra ARGS to the main META-WRITE"
                      (scrubl-write-obj scrubl arg))
                    args))))
 
+(define (scrubl-sxml-pre scrubl args)
+  `(span (@ (class "pre-ish"))
+         ,args))
+
+;; @@: For a text-only interface, we could put links at end of rendered
+;;  text, similar to how orgmode does.
+(define (scrubl-sxml-anchor scrubl args)
+  (define (maybe-uri->string obj)
+    (if (uri? obj)
+        (uri->string obj)
+        obj))
+  (match args
+    (((= maybe-uri->string href) body1 body ...)
+     `(a (@ (href ,href))
+         ,body1 ,@body))))
+
 (define scrubl-sxml
   (make-scrubl `((p . ,(scrubl-sxml-simple-field 'p))
                  (strong . ,(scrubl-sxml-simple-field 'strong))
@@ -138,7 +154,10 @@ Pass in optional extra ARGS to the main META-WRITE"
                  (b . ,(scrubl-sxml-simple-field 'strong))
                  (em . ,(scrubl-sxml-simple-field 'em))
                  (i . ,(scrubl-sxml-simple-field 'em))
-                 (br . ,(scrubl-sxml-simple-field 'br))  ;; is this useful?
+                 (br . ,(scrubl-sxml-simple-field 'br))
+                 (anchor . ,scrubl-sxml-anchor)
+                 (a . ,scrubl-sxml-anchor)
+                 (pre . ,scrubl-sxml-pre)  ;; "pre" style whitespace handling.
                  (ul . ,(scrubl-sxml-simple-field 'ul))
                  (li . ,(scrubl-sxml-simple-field 'li)))
                scrubl-sxml-write))