anchor.diff:            (twitter-widget has-tweets))
            doc)))))
   
  -(defun spans-rewriter (spans)
  +(defun dateline (doc config)
  +  (parse-iso-8601
  +   (or
  +    (second (first (extract :dateline doc)))
  +    (second (config :dateline config))
  +    (format-iso-8601-time (now) :omit-time t))))
  +
  +(defun spans-rewriter (config)
     (flet ((apply-spanner (d s) (funcall (rewriter s #'spanner) d)))
       #'(lambda (doc)
  -        (reduce #'apply-spanner spans :initial-value doc))))
  -
  -(defun section-rewriter (sections config)
  +        (reduce #'apply-spanner (config :spans config) :initial-value doc))))
  +
  +(defun preprocessors (config)
  +  (labels ((preprocess (d p) (funcall (symbol-function p) d config)))
  +    #'(lambda (doc)
  +        (reduce #'preprocess (config :preprocessors config) :initial-value doc))))
  +
  +(defun section-rewriters (config)
     (labels ((apply-section (d s)
                (destructuring-bind (tag sym) s
                  (funcall (rewriter :section (if-section-p tag (symbol-function sym))) d)))
  
positive.code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; Endnote rewriting
  
  (defun endnotes (doc)
    "Rewrite a doc with :note elements converted to endnotes."
    (if (extract :note doc)
        (funcall
         (>>>
          (rewriter :note (numberer))
  
negative.code: 
  ;; Used in config files
  (defun tweet-by-id (tree config)
    (let ((tweets (first (config :tweets config)))
          (id (just-text tree)))
      `(:noescape ,(file-text (make-pathname :name id :defaults tweets)))))
  
  ;; Used in config files
  (defun chart (tree config)
  