anchor.diff:    (defvar *identifier* 0)
     (defvar *matches* (array))
     (defvar *nodes* (ps:new (-Object)))
  +  (defvar *node-replacements* (array))
   
     (defun qs (context selector)
       "Alias of document.querySelector"
  
positive.code:         (setf (ps:@ new-node class-name) "next-search-node")
          (setf (ps:@ new-node id) node-identifier)
          (setf (aref *nodes* node-identifier) node)
          (loop for index in substring-indices
                with last-index = 0
                do (incf *identifier*)
                   (ps:chain new-node (append-child (ps:chain document (create-text-node (ps:chain node-text (substring last-index index))))))
                   (ps:chain new-node (append-child (create-match-span query *identifier*)))
                   (setf last-index (+ (length query) index))
                   (ps:chain *matches* (push (create-match-object (get-substring node-text query index) *identifier*)))
                finally (progn
                          (ps:chain new-node (append-child (ps:chain document (create-text-node (ps:chain node-text (substring (+ (length query) index)))))))
                          ;; TODO: Replace new nodes at END
                          ;; (ps:chain node (replace-with new-node))
                          )))))
  
    (defun walk-document (node process-node)
      (when (and node (not (ps:chain node first-child)))
  
negative.code:       (ps:chain node (replace-with (aref *nodes* (ps:@ node id))))))
  
    (let ((*matches* (array))
          (*node-replacements* (array))
          (*identifier* 0))
      (add-stylesheet)
      (remove-search-nodes)
      (setf (ps:chain *nodes* identifier) 0)
      (walk-document (ps:chain document body) matches-from-node)
      (replace-original-nodes)
      (ps:chain |json| (stringify *matches*))))
  
  (defclass match ()
  