Function: org-num--update

org-num--update is a byte-compiled function defined in org-num.el.gz.

Signature

(org-num--update)

Documentation

Update buffer's numbering.

This function removes invalid overlays and refreshes numbering for the valid ones in the numbering overlays list. It also adds missing overlays to that list.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-num.el.gz
(defun org-num--update ()
  "Update buffer's numbering.
This function removes invalid overlays and refreshes numbering
for the valid ones in the numbering overlays list.  It also adds
missing overlays to that list."
  (setq org-num--skip-level nil)
  (setq org-num--numbering nil)
  (let ((new-overlays nil)
        (overlay nil))
    (while (setq overlay (pop org-num--overlays))
      (cond
       ;; Valid overlay.
       ;;
       ;; First handle possible missing overlays OVERLAY.  If missing
       ;; overlay marker is pointing before next overlay and after the
       ;; last known overlay, make sure to parse the buffer between
       ;; these two overlays.
       ((org-num--valid-overlay-p overlay)
        (let ((next (overlay-start overlay))
              (last (and new-overlays (overlay-start (car new-overlays)))))
          (cond
           ((null org-num--missing-overlay))
           ((> org-num--missing-overlay next))
           ((or (null last) (> org-num--missing-overlay last))
            (setq org-num--missing-overlay nil)
            (setq new-overlays (nconc (org-num--number-region last next)
                                      new-overlays)))
           ;; If it is already after the last known overlay, reset it:
           ;; some previous invalid overlay already triggered the
           ;; necessary parsing.
           (t
            (setq org-num--missing-overlay nil))))
        ;; Update OVERLAY's numbering.
        (let* ((level (overlay-get overlay 'level))
               (skip (overlay-get overlay 'skip))
               (numbering (org-num--current-numbering level skip)))
          (org-num--refresh-display overlay numbering)
          (push overlay new-overlays)))
       ;; Invalid overlay.  It indicates that the buffer needs to be
       ;; parsed again between the two surrounding valid overlays or
       ;; buffer boundaries.
       (t
        ;; Delete all consecutive invalid overlays: we re-create all
        ;; overlays between last valid overlay and the next one.
        (delete-overlay overlay)
        (while (and org-num--overlays
                    (not (org-num--valid-overlay-p (car org-num--overlays))))
          (delete-overlay (pop org-num--overlays)))
        ;; Create and register new overlays.
        (let ((last (and new-overlays (overlay-start (car new-overlays))))
              (next (and org-num--overlays
                         (overlay-start (car org-num--overlays)))))
          (setq new-overlays (nconc (org-num--number-region last next)
                                    new-overlays))))))
    ;; If invalid position hasn't been handled yet, it must be located
    ;; between last valid overlay and end of the buffer.  Parse that
    ;; area before returning.
    (when org-num--missing-overlay
      (let ((last (and new-overlays (overlay-start (car new-overlays)))))
        (setq new-overlays (nconc (org-num--number-region last nil)
                                  new-overlays))))
    ;; Numbering is now up-to-date.  Reset invalid flag.  Also return
    ;; `org-num--overlays' in a sorted fashion.
    (setq org-num--invalid-flag nil)
    (setq org-num--overlays (nreverse new-overlays))))