aboutsummaryrefslogtreecommitdiff
path: root/old/shittyweb-html.el
diff options
context:
space:
mode:
Diffstat (limited to 'old/shittyweb-html.el')
-rw-r--r--old/shittyweb-html.el151
1 files changed, 151 insertions, 0 deletions
diff --git a/old/shittyweb-html.el b/old/shittyweb-html.el
new file mode 100644
index 0000000..c83ec50
--- /dev/null
+++ b/old/shittyweb-html.el
@@ -0,0 +1,151 @@
+(require 'ox-html)
+
+;; https://gileschamberlin.com/2020/02/25/writing-a-new-org-mode-exporter-back-end
+;; https://github.com/grc/jujutsu-website/blob/master/elisp/org-jujutsu-site.el
+;; https://orgmode.org/worg/dev/org-export-reference.html
+
+(defvar shittyweb-html-background-color "#dcd1ba")
+(defvar shittyweb-html-table-background-color "#bebebe")
+(defvar shittyweb-html-table-border 1)
+(defvar shittyweb-html-table-width "65%")
+(defvar shittyweb-html-code-background-color "white")
+(defvar shittyweb-html-code-border 1)
+
+(org-export-define-derived-backend 'shittyweb-html 'html
+ :translate-alist '((template . shittyweb-html-template)
+ (src-block . shittyweb-html-src-block))
+ :options-alist '((:background-image "BACKGROUND_IMAGE" nil nil)
+ (:shittyweb-header "SHITTYWEB_HEADER" nil nil)
+ (:shittyweb-back "SHITTYWEB_BACK" nil "")))
+
+(defun shittyweb-html-template (contents info)
+ "Return complete document string after HTML conversion.
+CONTENTS is the transcoded contents string. INFO is a plist
+holding export options."
+ (concat
+ (when (and (not (org-html-html5-p info)) (org-html-xhtml-p info))
+ (let* ((xml-declaration (plist-get info :html-xml-declaration))
+ (decl (or (and (stringp xml-declaration) xml-declaration)
+ (cdr (assoc (plist-get info :html-extension)
+ xml-declaration))
+ (cdr (assoc "html" xml-declaration))
+ "")))
+ (when (not (or (not decl) (string= "" decl)))
+ (format "%s\n"
+ (format decl
+ (or (and org-html-coding-system
+ (coding-system-get org-html-coding-system :mime-charset))
+ "iso-8859-1"))))))
+ (org-html-doctype info)
+ "\n"
+ (concat "<html"
+ (cond ((org-html-xhtml-p info)
+ (format
+ " xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"%s\" xml:lang=\"%s\""
+ (plist-get info :language) (plist-get info :language)))
+ ((org-html-html5-p info)
+ (format " lang=\"%s\"" (plist-get info :language))))
+ ">\n")
+ "<head>\n"
+ (org-html--build-meta-info info)
+ (org-html--build-head info)
+ (org-html--build-mathjax-config info)
+ "</head>\n"
+ ;; Body with background
+ (let ((background (plist-get info :background-image)))
+ (if background
+ (format "<body bgcolor=\"%s\" background=\"%s\">\n"
+ shittyweb-html-background-color
+ background)
+ (format "<body bgcolor=\"%s\">"
+ shittyweb-html-background-color)))
+ ;; I dont use link-up so byebye it goes.
+ ;; Also I give it a directory instead of file.
+ (let ((link-home (org-trim (plist-get info :html-link-home))))
+ (unless (string= link-home "")
+ (format (plist-get info :html-home/up-format) link-home link-home)))
+ ;; The back button thingy
+ (let ((back-page (org-trim (plist-get info :shittyweb-back))))
+ (unless (string= back-page "")
+ back-page))
+ ;; Preamble.
+ (org-html--build-pre/postamble 'preamble info)
+ "\n<center>\n"
+ ;; Shittyweb header. Its outside the weird table thing.
+ (let ((shittyweb-header (plist-get info :shittyweb-header)))
+ (if shittyweb-header
+ shittyweb-header))
+ ;; Document contents.
+ (let ((div (assq 'content (plist-get info :html-divs))))
+ (format "<table border=\"%d\" width=\"%s\" bgcolor=\"%s\" id=\
+\"%s\" class=\"%s\"><tr><td>\n"
+ shittyweb-html-table-border
+ shittyweb-html-table-width
+ shittyweb-html-table-background-color
+ (nth 2 div)
+ (plist-get info :html-content-class)))
+ ;; Document title.
+ (when (plist-get info :with-title)
+ (let ((title (and (plist-get info :with-title)
+ (plist-get info :title)))
+ (subtitle (plist-get info :subtitle))
+ (html5-fancy (org-html--html5-fancy-p info)))
+ (when title
+ (format
+ (if html5-fancy
+ "<header>\n<h1 class=\"title\">%s</h1>\n%s</header>"
+ "<h1 class=\"title\">%s%s</h1>\n")
+ (org-export-data title info)
+ (if subtitle
+ (format
+ (if html5-fancy
+ "<p class=\"subtitle\" role=\"doc-subtitle\">%s</p>\n"
+ (concat "\n" (org-html-close-tag "br" nil info) "\n"
+ "<span class=\"subtitle\">%s</span>\n"))
+ (org-export-data subtitle info))
+ "")))))
+ contents
+ "</td></tr></table>\n"
+ ;; Postamble.
+ (org-html--build-pre/postamble 'postamble info)
+ ;; Possibly use the Klipse library live code blocks.
+ (when (plist-get info :html-klipsify-src)
+ (concat "<script>" (plist-get info :html-klipse-selection-script)
+ "</script><script src=\""
+ org-html-klipse-js
+ "\"></script><link rel=\"stylesheet\" type=\"text/css\" href=\""
+ org-html-klipse-css "\"/>"))
+ ;; Closing document.
+ "</center>\n</body>\n</html>"))
+
+;; I don't like the way it handles src blocks. I just want <code>.
+(defun shittyweb-html-src-block (src-block _contents info)
+ (let* ((code (org-html-format-code src-block info))
+ (code-lines (string-split (string-trim code) "\n")))
+ (defun join-code-lines (lines) ;; Change \n to <br />
+ (concat (car lines)
+ (if (cdr lines)
+ (concat "<br />\n" (join-code-lines (cdr lines)))
+ "")))
+ (format "<table bgcolor=\"%s\" border=\"%d\"><tr><td>\n\
+<code>\n%s\n</code>\n</td></tr></table>"
+ shittyweb-html-code-background-color
+ shittyweb-html-code-border
+ (join-code-lines code-lines))))
+
+(defun shittyweb-publish-to-html (plist filename pub-dir)
+ "Publish an org file to HTML.
+
+FILENAME is the filename of the Org file to be published. PLIST
+is the property list for the given project. PUB-DIR is the
+publishing directory.
+
+Return output file name."
+ (org-publish-org-to 'shittyweb-html filename
+ (concat (when (> (length org-html-extension) 0) ".")
+ (or (plist-get plist :html-extension)
+ org-html-extension
+ "html"))
+ plist pub-dir))
+
+(provide 'shittyweb-html)