docs & lint changes

This commit is contained in:
Justin Abrahms 2020-11-11 23:35:20 -08:00
parent 4fe31afef6
commit 8586faf137

View File

@ -1,3 +1,21 @@
;;; ox-gemini.el --- Output gemini formatted documents from org-mode -*- lexical-binding: t; -*-
;; Author: Justin Abrahms <justin@abrah.ms>
;; URL: https://git.sr.ht/~abrahms/ox-gemini
;; Keywords: lisp gemini
;; Version: 0
;; Package-Requires: ((emacs "26.1"))
;;; Commentary:
;;
;; There's a web-alternative that's similar to the gopher protocol
;; named 'gemini'. You can find more about it at
;; https://gemini.circumlunar.space/ This package serves as an
;; org-mode export backend in order to build those types of
;; document-oriented sites.
(require 'ox) (require 'ox)
(require 'ox-publish) (require 'ox-publish)
(require 'ox-ascii) (require 'ox-ascii)
@ -10,6 +28,8 @@
;; If you don't have a title, it leaves a blank # in the gmi ;; If you don't have a title, it leaves a blank # in the gmi
;; If you link a file to an absolute path, the links break ;; If you link a file to an absolute path, the links break
;;; Code:
(org-export-define-derived-backend 'gemini 'ascii (org-export-define-derived-backend 'gemini 'ascii
:menu-entry :menu-entry
'(?g "Export to Gemini" '(?g "Export to Gemini"
@ -18,26 +38,17 @@
(org-gemini-export-to-buffer a s v b nil))) (org-gemini-export-to-buffer a s v b nil)))
(?f "To file" (?f "To file"
(lambda (a s v b) (lambda (a s v b)
(org-gemini-export-to-file a s v b nil))) (org-gemini-export-to-file a s v b nil)))))
)) :translate-alist '((code . org-gemini-code-inline)
:translate-alist '(
(code . org-gemini-code-inline)
(headline . org-gemini-headline) (headline . org-gemini-headline)
(link . org-gemini-link) (link . org-gemini-link)
(section . org-gemini-section) (section . org-gemini-section)
(src-block . org-gemini-code-block) (src-block . org-gemini-code-block)
(item . org-gemini-item) (item . org-gemini-item)
(template . org-gemini-template) (template . org-gemini-template)))
)
)
(defun org-gemini-paragraph (paragraph contents info) (defun org-gemini-paragraph (paragraph contents info)
(progn paragraph)
(message "we were at least called in the paragraph function")
paragraph))
(defun org-gemini-identity (input contents info)
"this is a test")
(defun org-gemini-item (input contents info) (defun org-gemini-item (input contents info)
(format "* %s" contents)) (format "* %s" contents))
@ -52,6 +63,8 @@
(org-export-format-code-default example-block info)))) (org-export-format-code-default example-block info))))
(defun org-gemini--describe-links (links width info) (defun org-gemini--describe-links (links width info)
"Describe links is the footer-portion of the link data. It's
output just before each section."
(mapconcat (mapconcat
(lambda (link) (lambda (link)
(let* ((raw-path (org-element-property :raw-link link)) (let* ((raw-path (org-element-property :raw-link link))
@ -64,13 +77,16 @@
(desc (org-element-contents link)) (desc (org-element-contents link))
(anchor (org-export-data (anchor (org-export-data
(or desc (org-element-property :raw-link link)) (or desc (org-element-property :raw-link link))
info)) info)))
)
(format "=> %s %s\n" path anchor))) (format "=> %s %s\n" path anchor)))
links "")) links ""))
(defun org-gemini-link (link desc info) (defun org-gemini-link (link desc info)
"Simple link generation.
Note: the footer with the actual links are handled in
org-gemini--describe-links"
(if (org-string-nw-p desc) (if (org-string-nw-p desc)
(format "[%s]" desc))) (format "[%s]" desc)))
@ -96,6 +112,7 @@ contextual information."
(plist-get info :ascii-inner-margin)))))) (plist-get info :ascii-inner-margin))))))
(defun org-gemini--build-title (defun org-gemini--build-title
"Simple title."
(element info text-width &optional underline notags toc) (element info text-width &optional underline notags toc)
(let ((number (org-element-property :level element)) (let ((number (org-element-property :level element))
(text (text
@ -171,21 +188,54 @@ holding export options."
(format "# %s\n" (org-export-data (format "# %s\n" (org-export-data
(when (plist-get info :with-title) (plist-get info :title)) info)) (when (plist-get info :with-title) (plist-get info :title)) info))
;; Document's body. ;; Document's body.
contents contents)))
)))
(defun org-gemini-export-as-gemini (&optional async subtreep visible-only body-only ext-plist)
(interactive)
(org-export-to-buffer 'gemini "*Org Gemini Export*" async subtreep visible-only body-only ext-plist (lambda () (text-mode))))
(defun org-gemini-export-to-buffer (&optional async subtreep visible-only body-only ext-plist) (defun org-gemini-export-to-buffer (&optional async subtreep visible-only body-only ext-plist)
"Export an org file to a new buffer.
A non-nil optional argument ASYNC means the process should happen
asynchronously. The resulting buffer should be accessible
through the `org-export-stack' interface.
When optional argument SUBTREEP is non-nil, export the sub-tree
at point, extracting information from the headline properties
first.
When optional argument VISIBLE-ONLY is non-nil, don't export
contents of hidden elements.
When optional argument BODY-ONLY is non-nil, strip title and
table of contents from output.
EXT-PLIST, when provided, is a property list with external
parameters overriding Org default settings, but still inferior to
file-local settings."
(interactive) (interactive)
(org-export-to-buffer 'gemini "*Org Gemini Export*" async subtreep visible-only body-only ext-plist (lambda () (text-mode)))) (org-export-to-buffer 'gemini "*Org Gemini Export*" async subtreep visible-only body-only ext-plist (lambda () (text-mode))))
(defun org-gemini-export-to-file (&optional async subtreep visible-only body-only ext-plist) (defun org-gemini-export-to-file (&optional async subtreep visible-only body-only ext-plist)
"Export an org file to a gemini file.
A non-nil optional argument ASYNC means the process should happen
asynchronously. The resulting buffer should be accessible
through the `org-export-stack' interface.
When optional argument SUBTREEP is non-nil, export the sub-tree
at point, extracting information from the headline properties
first.
When optional argument VISIBLE-ONLY is non-nil, don't export
contents of hidden elements.
When optional argument BODY-ONLY is non-nil, strip title and
table of contents from output.
EXT-PLIST, when provided, is a property list with external
parameters overriding Org default settings, but still inferior to
file-local settings."
(interactive) (interactive)
(let ((file (org-export-output-file-name ".gmi" subtreep))) (let ((file (org-export-output-file-name ".gmi" subtreep)))
(org-export-to-file 'gemini file (org-export-to-file 'gemini file
@ -193,7 +243,7 @@ holding export options."
(defun org-gemini-publish-to-gemini (plist filename pub-dir) (defun org-gemini-publish-to-gemini (plist filename pub-dir)
"Publish an org file to a gemini file "Publish an org file to a gemini file.
FILENAME is the filename of the Org file to be published. PLIST FILENAME is the filename of the Org file to be published. PLIST
is the property list for the given project. PUB-DIR is the is the property list for the given project. PUB-DIR is the
@ -205,3 +255,4 @@ Return output file name."
(provide 'ox-gemini) (provide 'ox-gemini)
;;; ox-gemini.el ends here