You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

271 lines
11 KiB
EmacsLisp

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(defun fic-ao3 ()
"Format fic for posting to AO3 and export it"
(interactive)
;; (org-format)
(save-buffer)
(goto-char (point-min))
(while (re-search-forward "\\[fn:[^•]*•\\]" nil t)
(replace-match ""))
(let ((org-export-with-title 'nil)
(org-export-with-author 'nil)
(org-export-with-creator 'nil)
(org-export-with-date 'nil)
(org-export-with-section-numbers 'nil)
(org-export-time-stamp-file 'nil)
(org-export-with-toc 'nil)
(org-html-validation-link 'nil))
(org-html-export-to-html))
(revert-buffer t t)
(setq oldname (concat (file-name-base) ".org"))
(setq newname (concat (file-name-base) ".html"))
(find-file-noselect newname)
(with-current-buffer newname
(goto-char (point-min))
(setq delpoint-one (search-forward "<body>\n"))
(delete-region (point-min) delpoint-one)
(goto-char (point-max))
(setq delpoint-two (search-backward "</body>"))
(delete-region delpoint-two (point-max))
(goto-char (point-min))
(while (re-search-forward "<div.*>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "</div>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "<h2.*>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "\n\n" nil t)
(replace-match "\n"))
(write-file newname)
(kill-ring-save (point-min) (point-max)))
(kill-buffer newname)
(with-current-buffer oldname
(delete-file newname)))
(unless (string-equal system-type "android")
(defun fic-export ()
"Export fic to HTML, EPUB, PDF"
(interactive)
(shell-command "cp ~/.emacs.d/fic-export-files/FFXYevon.ttf .")
(setq asal (y-or-n-p "ASAL?"))
(if asal
(progn
(setq title t)
(setq multichapter t)
(setq chaptertitles t)
(setq ffx t))
(progn
(setq title (y-or-n-p "Use the fic title in exports?"))
(setq multichapter (y-or-n-p "Multichapter?"))
(if multichapter
(setq chaptertitles (y-or-n-p "Titled chapters?")))
(setq ffx (y-or-n-p "FFX fic?"))))
;; (setq draftmode (y-or-n-p "Edit LaTeX file manually?"))
;; (org-format)
(save-buffer)
(goto-char (point-min))
(while (re-search-forward "\\[fn:\\([0-9]*\\):\\([^•]*\\)•\\]" nil t)
(replace-match "@@html:<label for=\"\\1\" class=\"margin-toggle sidenote-number\"></label><input type=\"checkbox\" id=\"\\1\" class=\"margin-toggle\"/><span class=\"sidenote\">@@@@latex:\\\\footnote{@@\\2@@html:</span>@@@@latex:}@@"))
(let ((user-full-name "Tré")
(org-html-head "<link rel=\"stylesheet\" href=\"/fic/tufte.css\"/>\n<link rel=\"stylesheet\" href=\"/home/mdd/Documents/proj/fic-archive/build/tufte.css\"/>\n<meta name=\"theme-color\" media=\"(prefers-color-scheme: light)\" content=\"#fffff8\" />\n<meta name=\"theme-color\" media=\"(prefers-color-scheme: dark)\" content=\"#151515\" />\n<meta property=\"og:title\" content=\"Trés fanfiction\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:image\" content=\"https://tre.praze.net/ab.png\">\n<meta name=\"description\" property=\"og:description\" content=\"Fanfiction on tre.praze.net\">\n<meta property=\"og:locale\" content=\"en_GB\">\n<meta property=\"og:site_name\" content=\"tre.praze.net\">\n<meta name=\"fediverse:creator\" content=\"@tre@ple.praze.net\">")
(org-export-with-author t)
(org-latex-default-class "memoir"))
(org-html-export-to-html)
(org-latex-export-to-latex))
(revert-buffer t t)
(setq htmlfile (concat (file-name-base) ".html"))
(find-file-noselect htmlfile)
(with-current-buffer htmlfile
(goto-char (point-min))
(while (re-search-forward "<div id=\"content\"" nil t)
(replace-match "<article id=\"content\""))
(goto-char (point-min))
(while (re-search-forward "<div id=\"outline-container-" nil t)
(replace-match "<section id=\"outline-container-"))
(goto-char (point-min))
(while (re-search-forward "</div>\n</div>" nil t)
(replace-match "</div>\n</section>"))
(goto-char (point-min))
(while (re-search-forward "<hr />\n\n<p>" nil t)
(replace-match "</section>\n<section>\n<p class=\"newthought\">"))
(goto-char (point-min))
(while (re-search-forward "<hr>\n\n<p>" nil t)
(replace-match "</section>\n<section>\n<p class=\"newthought\">"))
(goto-char (point-min))
(while (re-search-forward "<hr>\n<p>" nil t)
(replace-match "</section>\n<section>\n<p class=\"newthought\">"))
(goto-char (point-min))
(while (re-search-forward "<div class=\"outline-text-2\" id=\".*\">" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "<div id=\"postamble\" class=\"status\">" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "<p class=\"validation\"><a href=.*>Validate</a></p>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "</div>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "section-number-2\">\\([0-9]*\\)<" nil t)
(replace-match "section-number-2\">\\1\.<"))
(goto-char (point-min))
(while (re-search-forward "<p class=\"author.*</p>" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "\n\n</body>" nil t)
(replace-match "\n</article>\n</body>"))
(if (not title)
(progn
(goto-char (point-min))
(while (re-search-forward "<h1.*" nil t)
(replace-match ""))))
(if multichapter
(if (not chaptertitles)
(progn
(goto-char (point-min))
(while (re-search-forward "<span class=\"section-number-.*</span>" nil t)
(replace-match ""))))
(progn
(goto-char (point-min))
(while (re-search-forward "<h2.*" nil t)
(replace-match ""))))
(save-buffer)
(kill-current-buffer))
(setq texfile (concat (file-name-base) ".tex"))
(find-file-noselect texfile)
(with-current-buffer texfile
(if asal
(progn
(goto-char (point-min))
(search-forward "\\begin{document}")
(while (re-search-forward "\n" nil t)
(replace-match "\n\n"))
(save-buffer)
(shell-command
(format "pandoc %s -o %s.epub --epub-cover-image=/home/mdd/Documents/drive/the\\ walk/cover.png"
(shell-quote-argument (buffer-file-name))
(shell-quote-argument (file-name-base)))))
(shell-command
(format "pandoc %s -o %s.epub"
(shell-quote-argument (buffer-file-name))
(shell-quote-argument (file-name-base)))))
(goto-char (point-min))
(while (re-search-forward "label{\\(.*\\)}\n\n" nil t)
(replace-match "label{\\1}\n"))
(goto-char (point-min))
(while (re-search-forward "label{\\(.*\\)}\n\\([A-Z]\\)\\([a-z]*\\)" nil t)
(replace-match "label{\\1}\n\\\\lettrine{\\2}{\\3}"))
(goto-char (point-min))
(while (re-search-forward "label{\\(.*\\)}\n\\([A-Z]\\)\\([a-z]*\\)" nil t)
(replace-match "label{\\1}\n\\\\lettrine{“\\2}{\\3}"))
(goto-char (point-min))
(while (re-search-forward "label{\\(.*\\)}\n«~\\([A-Z]\\)\\([a-z]*\\)" nil t)
(replace-match "label{\\1}\n\\\\lettrine{«~\\2}{\\3}"))
(goto-char (point-min))
(while (re-search-forward "~–”" nil t)
(replace-match "\\\\mbox{~–”}"))
(if ffx
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\noindent\\\\rule{\\\\textwidth}{0.5pt}" nil t)
(replace-match "\\sepffx" nil t)))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\noindent\\\\rule{\\\\textwidth}{0.5pt}" nil t)
(replace-match "\\sephim" nil t))))
(if multichapter
(if title
(if asal
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\maketitle" nil t)
(replace-match "\\begin{titlingpage}\n\\titleasal\n\\end{titlingpage}" nil t)))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\maketitle" nil t)
(replace-match "\\begin{titlingpage}\n\\titlegen\n\\end{titlingpage}" nil t))))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\maketitle" nil t)
(replace-match ""))))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\maketitle" nil t)
(replace-match ""))))
(if multichapter
(if (not chaptertitles)
(progn
(goto-char (point-min))
(while (re-search-forward "namechapters" nil t)
(replace-match "nonamechapters"))))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\chapter.*" nil t)
(replace-match ""))
(if title
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\\\begin{document}\n\\\\chapter\*{\\\\thetitle}"))))))
(if multichapter
(if title
(if chaptertitles
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{multititlechapters}" nil t))
(goto-char (point-min))
(while (re-search-forward "\\\\end{titlingpage}" nil t)
(replace-match "\\end{titlingpage}\n\\tableofcontents\*" nil t)))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{multititlenochapters}" nil t))))
(if chaptertitles
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{multinotitlechapters}\n\\tableofcontents\*" nil t)))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{multinotitlenochapters}" nil t)))))
(if title
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{singletitle}" nil t)))
(progn
(goto-char (point-min))
(while (re-search-forward "\\\\begin{document}" nil t)
(replace-match "\\begin{document}\n\\pagestyle{plain}" nil t)))))
(goto-char (point-max))
(save-buffer)
;; (unless draftmode
(shell-command
(format "xelatex -interaction=batchmode %s"
(shell-quote-argument (buffer-file-name))))
(shell-command
(format "xelatex -interaction=batchmode %s"
(shell-quote-argument (buffer-file-name))))
;; )
(kill-current-buffer))
;; (unless draftmode
(delete-file "FFXYevon.ttf")
(if (file-exists-p (concat (file-name-base) ".aux"))
(delete-file (concat (file-name-base) ".aux")))
(if (file-exists-p (concat (file-name-base) ".log"))
(delete-file (concat (file-name-base) ".log")))
(if (file-exists-p (concat (file-name-base) ".out"))
(delete-file (concat (file-name-base) ".out")))
(if (file-exists-p (concat (file-name-base) ".toc"))
(delete-file (concat (file-name-base) ".toc")))
(if (file-exists-p "texput.log")
(delete-file "texput.log"))
(delete-file texfile)
;; )
(message "Done")))