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))))