anchor.diff:                   (cons (mapcar #'walk x)))))
         (walk sexp))))
   
  -
  -
   (defun formatted-code-section (expr)
     (and
      (consp expr)
  
positive.code: (defun generate-html (file)
    "Generate HTML for the markup file in the same location except with an .html
  extension."
    (with-output-to-file (out (make-pathname :type "html" :defaults file))
      (monkeylib-text-output:with-text-output (out)
        (monkeylib-html:emit-html
         (markup-html
          (markup (file-text file))))))
    t)
  
  (defun markup-html (doc &key title (style "style.css") script)
    (funcall
     (>>>
      #'links
      #'endnotes
      (rewriter :img #'image)
      (rewriter-if #'formatted-code-section #'formatted-code)
      #'htmlize
      (entitle title)
      (stylize style)
      (enscript script)
      (rewriter :section-marker #'divver)
      (rewriter :section #'section-to-div)
      )
     doc))
  
  (defun links (doc)
    "Rewrite the doc so :link elements are expanded into :a tags with the
  
negative.code:   (destructuring-bind (section (formattedcode (pre text))) expr
      (declare (ignore section formattedcode pre))
      `(:pre ,@(nth-value 1 (markup-lite (cons text 0))))))
  
  (defun embedded-tweet (tree)
    (let ((text (tag-text :text tree))
          (screenname (tag-text :screenname tree))
          (handle (tag-text :handle tree))
          (id (tag-text :id tree))
          (date (tag-text :date tree)))
      `(:progn
         ((:blockquote :class "twitter-tweet" :lang "en")
          (:p "“" ,text "”")
          (:noescape "&mdash;")
          ,screenname "(@" ,handle ") "
          ((:a :href (:format "https://twitter.com/~a/status/~a" ,handle ,id)) ,date))
         (:script :async "async" :src "https://platform.twitter.com/widgets.js" :charset "utf-8"))))
  
  (defun tweet-by-id (tree)
    (let ((filename (make-pathname :defaults (merge-pathnames "tweets/") :name (just-text tree))))
      `(:noescape ,(file-text filename))))
  
  (defun chart (tree)
    `(:div :class "chart" :id (:format "chart~a" ,(just-text tree))))
  
  (defun tag-text (tag tree)
    (mapcan #'just-text (extract tag tree)))
  
  (defun include-from-file (tree)
    (let* ((text (string-trim " " (just-text tree)))
           (spc (position #\Space text))
           (file (subseq text 0 spc))
           (name (subseq text (1+ spc)))
           (contents (file-text file))
           (lines (split-sequence #\Newline contents)))
      (flet ((start (line) (search (format nil "8<--- ~a" name) line))
             (end (line) (search "8<----" line)))
        (let* ((start (cdr (member-if #'start lines)))
               (end (member-if #'end start)))
          (if end
              `(:pre ,(format nil "~{~&~a~}" (ldiff start end)))
              (error "Coludn't find include section ~a in ~a" name file))))))
  