org-footnote: Remove code for footnotes outside Org documents

* lisp/org-footnote.el (org-footnote-tag-for-non-org-mode-files): Remove
  variable.
(org-footnote-create-definition): Remove code for footnotes outside Org
documents. Small refactoring.
This commit is contained in:
Nicolas Goaziou 2015-12-20 11:37:28 +01:00
parent f229ee8e34
commit 6de8c94d8d
1 changed files with 17 additions and 85 deletions

View File

@ -117,20 +117,6 @@ you will need to run the following command after the change:
(string :tag "Collect footnotes under heading")
(const :tag "Define footnotes locally" nil)))
(defcustom org-footnote-tag-for-non-org-mode-files "Footnotes:"
"Tag marking the beginning of footnote section.
The Org footnote engine can be used in arbitrary text files as well
as in Org-mode. Outside Org mode, new footnotes are always placed at
the end of the file. When you normalize the notes, any line containing
only this tag will be removed, a new one will be inserted at the end
of the file, followed by the collected and normalized footnotes.
If you don't want any tag in such buffers, set this variable to nil."
:group 'org-footnote
:type '(choice
(string :tag "Collect footnotes under tag")
(const :tag "Don't use a tag" nil)))
(defcustom org-footnote-define-inline nil
"Non-nil means define footnotes inline, at reference location.
When nil, footnotes will be defined in a special section near
@ -697,79 +683,25 @@ or new, let the user edit the definition of the footnote."
(defun org-footnote-create-definition (label)
"Start the definition of a footnote with label LABEL.
Return buffer position at the beginning of the definition. In an
Org buffer, this function doesn't move point."
Return buffer position at the beginning of the definition. This
function doesn't move point."
(let ((label (org-footnote-normalize-label label))
electric-indent-mode) ; Prevent wrong indentation.
(cond
;; In an Org document.
((derived-mode-p 'org-mode)
;; If `org-footnote-section' is defined, find it, or create it
;; at the end of the buffer.
(org-with-wide-buffer
(cond
((not org-footnote-section)
(org-footnote--goto-local-insertion-point))
((save-excursion
(goto-char (point-min))
(re-search-forward
(concat "^\\*+[ \t]+" (regexp-quote org-footnote-section) "[ \t]*$")
nil t))
(goto-char (match-end 0))
(forward-line)
(unless (bolp) (insert "\n")))
(t
(goto-char (point-max))
(unless (bolp) (insert "\n"))
;; Insert new section. Separate it from the previous one
;; with a blank line, unless `org-blank-before-new-entry'
;; explicitly says no.
(when (and (cdr (assq 'heading org-blank-before-new-entry))
(zerop (save-excursion (org-back-over-empty-lines))))
(insert "\n"))
(insert "* " org-footnote-section "\n")))
(when (zerop (org-back-over-empty-lines)) (insert "\n"))
(insert "[fn:" label "] \n")
(line-beginning-position 0)))
(t
;; In a non-Org file. Search for footnote tag, or create it if
;; specified (at the end of buffer, or before signature if in
;; Message mode). Set point after any definition already there.
(let ((tag (and org-footnote-tag-for-non-org-mode-files
(concat "^" (regexp-quote
org-footnote-tag-for-non-org-mode-files)
"[ \t]*$")))
(max (if (and (derived-mode-p 'message-mode)
(goto-char (point-max))
(re-search-backward
message-signature-separator nil t))
(progn
;; Ensure one blank line separates last
;; footnote from signature.
(beginning-of-line)
(open-line 2)
(point-marker))
(point-max-marker))))
(set-marker-insertion-type max t)
(goto-char max)
;; Check if the footnote tag is defined but missing. In this
;; case, insert it, before any footnote or one blank line
;; after any previous text.
(when (and tag (not (re-search-backward tag nil t)))
(skip-chars-backward " \t\r\n")
(while (re-search-backward org-footnote-definition-re nil t))
(unless (bolp) (newline 2))
(insert org-footnote-tag-for-non-org-mode-files "\n\n"))
;; Remove superfluous white space and clear marker.
(goto-char max)
(skip-chars-backward " \t\r\n")
(delete-region (point) max)
(unless (bolp) (newline))
(set-marker max nil))
(when (zerop (org-back-over-empty-lines)) (insert "\n"))
(insert "[fn:" label "] \n")
(backward-char)
(line-beginning-position)))))
(org-with-wide-buffer
(cond
((not org-footnote-section) (org-footnote--goto-local-insertion-point))
((save-excursion
(goto-char (point-min))
(re-search-forward
(concat "^\\*+[ \t]+" (regexp-quote org-footnote-section) "[ \t]*$")
nil t))
(goto-char (match-end 0))
(forward-line)
(unless (bolp) (insert "\n")))
(t (org-footnote--clear-footnote-section)))
(when (zerop (org-back-over-empty-lines)) (insert "\n"))
(insert "[fn:" label "] \n")
(line-beginning-position 0))))
(defun org-footnote-delete-references (label)
"Delete every reference to footnote LABEL.