Function: majutsu-op--parse-diff-output

majutsu-op--parse-diff-output is a natively compiled function defined in majutsu-op.el.

Signature

(majutsu-op--parse-diff-output OUTPUT)

Documentation

Parse colored jj op diff OUTPUT into renderable nodes.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-op.el
(defun majutsu-op--parse-diff-output (output)
  "Parse colored jj op diff OUTPUT into renderable nodes."
  (let (nodes group-title group-text group-kind group-children ref-name ref-text ref-children)
    (cl-labels
        ((finish-ref
           ()
           (when ref-name
             (push (list :type 'ref
                         :name ref-name
                         :text ref-text
                         :children (nreverse ref-children))
                   group-children)
             (setq ref-name nil
                   ref-text nil
                   ref-children nil)))
         (finish-group
           ()
           (finish-ref)
           (when group-title
             (push (list :type 'group
                         :title group-title
                         :text group-text
                         :kind group-kind
                         :children (nreverse group-children))
                   nodes)
             (setq group-title nil
                   group-text nil
                   group-kind nil
                   group-children nil)))
         (add-node
           (node)
           (cond
            (ref-name (push node ref-children))
            (group-title (push node group-children))
            (t (push node nodes)))))
      (dolist (colored-line (split-string (or output "") "\n"))
        (let* ((plain-line (substring-no-properties colored-line))
               (trimmed (string-trim plain-line)))
          (cond
           ((string-empty-p trimmed))
           ((majutsu-op--diff-operation-header-p plain-line))
           ((majutsu-op--diff-group-kind plain-line)
            (finish-group)
            (setq group-title trimmed
                  group-text colored-line
                  group-kind (majutsu-op--diff-group-kind plain-line)))
           ((majutsu-op--diff-warning-line-p plain-line)
            (add-node (list :type 'warning :text colored-line)))
           ((majutsu-op--diff-elision-line-p plain-line)
            (add-node (list :type 'elision :text colored-line)))
           ((majutsu-op--diff-ref-header-p plain-line group-kind)
            (finish-ref)
            (setq ref-name (string-remove-suffix ":" trimmed)
                  ref-text colored-line))
           ((majutsu-op--parse-diff-marker-line
             plain-line colored-line group-kind ref-name)
            (add-node (majutsu-op--parse-diff-marker-line
                       plain-line colored-line group-kind ref-name)))
           (t
            (add-node (list :type 'raw-line :text colored-line))))))
      (finish-group)
      (nreverse nodes))))