From cf38217c1ae9644a58bb0ebf5d4e14bbc4739ce2 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sat, 12 Aug 2023 20:11:03 +0100 Subject: cgit: Render org mode README files. * guix/forge/cgit.scm: Import emacs-minimal from (gnu packages emacs). (%cgit-readme): Add README.org. (about-filter-gexp): Render org mode README files. * guix/forge/org2html.el: New file. * doc/forge.skb (Services)[Git web viewers]{cgit service}: Document support for org mode README files. --- doc/forge.skb | 4 ++-- guix/forge/cgit.scm | 7 ++++++- guix/forge/org2html.el | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 guix/forge/org2html.el diff --git a/doc/forge.skb b/doc/forge.skb index be1260c..077a449 100644 --- a/doc/forge.skb +++ b/doc/forge.skb @@ -201,8 +201,8 @@ web. Our cgit service features] (item [syntax highlighting for a wide variety of programming languages using ,(ref :url "https://pygments.org/" :text "Pygments")]) - (item [rendering markdown, reStructuredText, man page, -HTML or plain text README files in the ,(emph [About]) page]) + (item [rendering markdown, org mode, reStructuredText, man +page, HTML or plain text README files in the ,(emph [About]) page]) (item [hiding full email addresses on cgit web pages])) [Note that this service is different from the cgit service of the same name in Guix upstream.]) diff --git a/guix/forge/cgit.scm b/guix/forge/cgit.scm index 6ac7589..f652825 100644 --- a/guix/forge/cgit.scm +++ b/guix/forge/cgit.scm @@ -21,6 +21,7 @@ #:use-module (forge fcgiwrap) #:use-module (forge nginx) #:use-module (forge socket) + #:use-module ((gnu packages emacs) #:select (emacs-minimal)) #:use-module ((gnu packages mail) #:select (mailcap)) #:use-module ((gnu packages version-control) #:select (cgit git-minimal)) @@ -55,7 +56,7 @@ (define %cgit-readme (append (list "README.md" "README.markdown" "README.mdown" "README.mkd" - "README.rst") + "README.org" "README.rst") ;; man page READMEs (map (lambda (n) (string-append "README." (number->string n))) @@ -145,6 +146,10 @@ configured in @var{config}." (string-suffix-ci? ".mkd" about-file)) (invoke #$(file-append cgit "/lib/cgit/filters/html-converters/md2html") about-file)) + ((string-suffix-ci? ".org" about-file) + (invoke #$(file-append emacs-minimal "/bin/emacs") + "--script" + #$(local-file "org2html.el"))) ((string-suffix-ci? ".rst" about-file) (invoke #$(file-append cgit "/lib/cgit/filters/html-converters/rst2html") about-file)) diff --git a/guix/forge/org2html.el b/guix/forge/org2html.el new file mode 100644 index 0000000..b311331 --- /dev/null +++ b/guix/forge/org2html.el @@ -0,0 +1,35 @@ +;;; guix-forge --- Guix software forge meta-service +;;; Copyright © 2023 Arun Isaac +;;; +;;; This file is part of guix-forge. +;;; +;;; guix-forge is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published +;;; by the Free Software Foundation, either version 3 of the License, +;;; or (at your option) any later version. +;;; +;;; guix-forge is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with guix-forge. If not, see +;;; . + +(require 'ox-html) + +(setq org-export-with-section-numbers nil + org-export-with-toc nil) + +(defun pipe-stdin-into-current-buffer () + (when-let (line (ignore-errors + (read-from-minibuffer ""))) + (insert line "\n") + (pipe-stdin-into-current-buffer))) + +;; TODO: Syntax highlight src code blocks using emacs-htmlize. +(with-temp-buffer + (pipe-stdin-into-current-buffer) + (org-html-export-as-html nil nil nil t) + (princ (buffer-string))) -- cgit v1.2.3