summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2023-08-09 16:31:48 +0100
committerArun Isaac2023-08-09 16:43:59 +0100
commita0225f0b5492578372896d63b6ce7bd9ab041b31 (patch)
tree47c03b5ea23077f4bfaa13b5c9f775539414d362
parent1b73af1411c08f42b682b79c0d1e717c891831bd (diff)
downloadguix-forge-a0225f0b5492578372896d63b6ce7bd9ab041b31.tar.gz
guix-forge-a0225f0b5492578372896d63b6ce7bd9ab041b31.tar.lz
guix-forge-a0225f0b5492578372896d63b6ce7bd9ab041b31.zip
doc: Override description markup writer.
* doc/skribilo.scm: Import (skribilo output).
(node->html-tag): New function.
(html-engine): Override the description markup writer.
-rw-r--r--doc/skribilo.scm41
1 files changed, 40 insertions, 1 deletions
diff --git a/doc/skribilo.scm b/doc/skribilo.scm
index e65afe7..4058e62 100644
--- a/doc/skribilo.scm
+++ b/doc/skribilo.scm
@@ -31,6 +31,7 @@
   #:use-module (skribilo ast)
   #:use-module (skribilo engine)
   #:use-module (skribilo lib)
+  #:use-module (skribilo output)
   #:use-module (skribilo writer)
   #:use-module (skribilo package base)
   #:use-module (skribilo parameters)
@@ -340,6 +341,23 @@ are a list of <record-field> objects."
                 (texi-fragment->stexi
                  (function-docstring function)))))))
 
+(define (node->html-tag tag node)
+  "Output starting HTML @var{tag} of @var{node}."
+  (display
+   (format "<~a ~a>"
+           tag
+           (string-join (map (match-lambda
+                               ((key . value)
+                                (format "~a=\"~a\"" key value)))
+                             (append (if (and (markup? node)
+                                              (markup-ident node))
+                                         (list (cons "id" (markup-ident node)))
+                                         (list))
+                                     (if (and (markup? node)
+                                              (markup-class node))
+                                         (list (cons "class" (markup-class node)))
+                                         (list))))))))
+
 ;; HTML engine customizations
 (let ((html-engine (find-engine 'html)))
   (engine-custom-set! html-engine 'css "/style.css")
@@ -351,4 +369,25 @@ are a list of <record-field> objects."
                                 (markup-option markup #:long)
                                 (markup-option markup #:short)
                                 (markup-option markup #:long))
-                        (current-output-port)))))
+                        (current-output-port))))
+  ;; The skribilo HTML engine description markup writer does not print
+  ;; the id attribute. Override it so that it does. TODO: Push this
+  ;; fix to skribilo upstream.
+  (markup-writer 'description html-engine
+    #:options '(#:symbol)
+    #:before (lambda (node engine)
+               (node->html-tag "dl" node))
+    #:action (lambda (node engine)
+	       (for-each (lambda (item)
+			   (for-each (lambda (key)
+                                       (node->html-tag "dt" item)
+				       (output key engine)
+				       (display "</dt>"))
+                                     (match (markup-option item #:key)
+                                       ((keys ...) keys)
+                                       (key (list key))))
+                           (node->html-tag "dd" item)
+			   (output (markup-body item) engine)
+			   (display "</dd>\n"))
+			 (markup-body node)))
+    #:after "</dl>"))