Just moved the blog from coleslaw to zora. Here are a couple scripts I used to convert things along the way!

Converting the tags from comma-separated to toml

tags.lisp:

#!/usr/bin/sbcl --script

(require 'uiop)

(defun string-split (separator string)
  (unless (zerop (length string))
    (loop for start = 0 then end
          for end = (position separator string :start (1+ start) :test #'char=)

          collecting (subseq string
                             (if (zerop start)
                                 0
                                 (1+ start))
                             end)
          while end)))


(defun tags-line-p (line)
  (and (>= (length line) 5)
       (string= "tags:" line :end2 5)))


(defun mangle-tags-line (line stream)
  (flet ((trim-space (string)
           (string-trim '(#\Space) string)))

    (let* ((rest-of-line (trim-space (subseq line (length "tags:"))))
           (tags (mapcar #'trim-space (string-split #\, rest-of-line))))

      (format stream "tags = [~%~{  ~S,~%~}]~%" tags))))


(defun mangle-file (filename &key (dry-run-p t))
  (uiop:with-temporary-file (:stream out-stream
                             :pathname temp-file
                             :keep dry-run-p)
    (format t "~&Processing ~a into ~a.~%" filename temp-file)

    (with-open-file (in-stream filename)
      (loop for line = (read-line in-stream nil nil)
            while line

            if (tags-line-p line)
              do (mangle-tags-line line out-stream)
            else
              do (write-line line out-stream)))

    :close-stream
    (unless dry-run-p
      (format t "~&Finished magling.  Copying ~a to ~a.~%" temp-file filename)
      (uiop:copy-file temp-file filename)
      #+nil(uiop:rename-file-overwriting-target temp-file filename))))

(if (>= (length *posix-argv*) 2)
    (mangle-file (merge-pathnames (second *posix-argv*))
                 :dry-run-p nil)
    (progn
      (format t "~&No file specified~%")
      (uiop:quit 1)))

Converting from --- to +++.

gawk -i inplace '{if ($0 == "---") { print "+++" } else { print $0 }}' *.md

Adding the taxonomies tag before tags:

gawk -i inplace '{if ($1 == "tags" && a != "[taxonomies]") { print "[taxonomies]"; print $0} else { print $0 }} { a =$0 }' *.md