Function: org-cite-delete-citation
org-cite-delete-citation is a byte-compiled function defined in
oc.el.gz.
Signature
(org-cite-delete-citation DATUM)
Documentation
Delete citation or citation reference DATUM.
When removing the last reference, also remove the whole citation.
Source Code
;; Defined in /usr/src/emacs/lisp/org/oc.el.gz
(defun org-cite-delete-citation (datum)
"Delete citation or citation reference DATUM.
When removing the last reference, also remove the whole citation."
(pcase (org-element-type datum)
('citation
(pcase-let* ((`(,begin . ,end) (org-cite-boundaries datum))
(pos-before-blank
(org-with-point-at begin
(skip-chars-backward " \t")
(point)))
(pos-after-blank (org-element-end datum))
(first-on-line?
(= pos-before-blank (line-beginning-position)))
(last-on-line?
(= pos-after-blank (line-end-position))))
(cond
;; The citation is alone on its line. Remove the whole line.
;; Do not leave it blank as it might break a surrounding
;; paragraph.
((and first-on-line? last-on-line?)
(delete-region (line-beginning-position) (line-beginning-position 2)))
;; When the citation starts the line, preserve indentation.
(first-on-line? (delete-region begin pos-after-blank))
;; When the citation ends the line, remove any trailing space.
(last-on-line? (delete-region pos-before-blank (line-end-position)))
;; Otherwise, delete blanks before the citation.
;; Nevertheless, make sure there is at least one blank left,
;; so as to not splice unrelated surroundings.
(t
(delete-region pos-before-blank end)
(when (= pos-after-blank end)
(org-with-point-at pos-before-blank (insert " ")))))))
('citation-reference
(let* ((citation (org-element-parent datum))
(references (org-cite-get-references citation))
(begin (org-element-begin datum))
(end (org-element-end datum)))
(cond
;; Single reference.
((= 1 (length references))
(org-cite-delete-citation citation))
;; First reference, no prefix.
((and (= begin (org-element-contents-begin citation))
(not (org-element-property :prefix citation)))
(org-with-point-at (org-element-begin datum)
(skip-chars-backward " \t")
(delete-region (point) end)))
;; Last reference, no suffix.
((and (= end (org-element-contents-end citation))
(not (org-element-property :suffix citation)))
(delete-region (1- begin) (1- (cdr (org-cite-boundaries citation)))))
;; Somewhere in-between.
(t
(delete-region begin end)))))
(other
(error "Invalid object type: %S" other))))