diff options
Diffstat (limited to 'old/shittyweb-html.el')
-rw-r--r-- | old/shittyweb-html.el | 151 |
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) |