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.
243 lines
9.2 KiB
EmacsLisp
243 lines
9.2 KiB
EmacsLisp
(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)))
|
|
|
|
(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 nil)
|
|
(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\">\\2</span>@@@@latex:\\\\footnote{\\2}@@"))
|
|
(let ((user-full-name "ovely")
|
|
(org-html-head "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin/><link href=\"https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,700;1,400;1,700&display=swap\" rel=\"stylesheet\"/><link rel=\"stylesheet\" href=\"/fic/tufte.css\"/>"))
|
|
(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 "<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
|
|
(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\\([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}"))
|
|
(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"))
|