summaryrefslogtreecommitdiff
path: root/jakob
diff options
context:
space:
mode:
authorJakob L. Kreuze <zerodaysfordays@sdf.org>2026-02-19 13:41:42 -0500
committerJakob L. Kreuze <zerodaysfordays@sdf.org>2026-02-19 13:51:00 -0500
commitde1756d562993682c5e335d7ff86b291b7679870 (patch)
tree91f5028554c4b34572225f7a07f6fbe704b1d098 /jakob
parent0ca61a1d68e9c3ab3eb11a1be4ed9722541e4c6f (diff)
Implement source code origin links
Diffstat (limited to 'jakob')
-rw-r--r--jakob/utils/org-mode.scm29
1 files changed, 29 insertions, 0 deletions
diff --git a/jakob/utils/org-mode.scm b/jakob/utils/org-mode.scm
index 8da8b39..89e07bb 100644
--- a/jakob/utils/org-mode.scm
+++ b/jakob/utils/org-mode.scm
@@ -197,6 +197,7 @@ daemon. Assumes that FORM does not write to `standard-output'."
(define (rewrite-org-mode tree)
(define filters (list rewrite-absolute-urls-as-relative
rewrite-code-blocks-as-figures
+ rewrite-source-code-origin
rewrite-table-of-contents))
(fold (lambda (f value) (f value)) tree filters))
@@ -233,3 +234,31 @@ daemon. Assumes that FORM does not write to `standard-output'."
((xs ...)
(map rewrite-table-of-contents xs))
(elem elem)))
+
+(define (rewrite-source-code-origin tree)
+ (match tree
+ (('figure
+ ('@ ('class "code-container"))
+ ('figcaption
+ ('@ ('class "code-header"))
+ _)
+ ('pre
+ ('code
+ (('span ('@ ('class "org-comment-delimiter")) _comment-delimiter-1)
+ ('span ('@ ('class "org-comment")) origin-text)
+ "\n"
+ ('span ('@ ('class "org-comment-delimiter")) _comment-delimiter-2)
+ ('span ('@ ('class "org-comment"))
+ (and origin-href
+ (? (cut string-prefix? "http" <>) origin-href))) "\n"
+ code-rest ...))))
+ `(figure
+ (@ (class "code-container"))
+ (figcaption
+ (@ (class "code-header"))
+ (span (@ (class "code-filename"))
+ (a (@ (href ,origin-href)) ,origin-text)))
+ (pre (code ,@code-rest))))
+ ((xs ...)
+ (map rewrite-source-code-origin xs))
+ (elem elem)))