docs & lint changes
This commit is contained in:
parent
4fe31afef6
commit
8586faf137
95
ox-gemini.el
95
ox-gemini.el
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user