[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Orgmode] footnote export fails if footnote indented
From: |
Dan Davison |
Subject: |
Re: [Orgmode] footnote export fails if footnote indented |
Date: |
Fri, 16 Apr 2010 12:53:32 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) |
Carsten Dominik <address@hidden> writes:
> Hi Dan,
>
> have you given this patch any serious testing, and do you have
> any remarks about it?
Hi Carsten,
I hadn't forgotten about this but I have been conscious that I wasn't
giving it the testing it deserved. I don't export with footnotes that
much, and when I do it tends to be to HTML. So I haven't noticed any
problems, but perhaps some others who use footnotes more seriously than
me could test out this patch for a bit? Sorry, I know I should have sent
this email ages ago!
Dan
--8<---------------cut here---------------start------------->8---
diff --git a/lisp/org-footnote.el b/lisp/org-footnote.el
index 84cd7b3..e9a2822 100644
--- a/lisp/org-footnote.el
+++ b/lisp/org-footnote.el
@@ -62,7 +62,7 @@
"Regular expression for matching footnotes.")
(defconst org-footnote-definition-re
- (org-re "^\\(\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]\\)")
+ (org-re "^[ \t]*\\(\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]\\)")
"Regular expression matching the definition of a footnote.")
(defcustom org-footnote-section "Footnotes"
@@ -143,7 +143,12 @@ extracted will be filled again."
(defun org-footnote-at-reference-p ()
"Is the cursor at a footnote reference?
If yes, return the beginning position, the label, and the definition, if
local."
- (when (org-in-regexp org-footnote-re 15)
+ (when (and (org-in-regexp org-footnote-re 15)
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (progn (if (equal (char-after) ?\n) (forward-char 1)) t)
+ (save-match-data
+ (string-match "\\S-" (buffer-substring (point-at-bol)
(point))))))
(list (match-beginning 0)
(or (match-string 1)
(if (equal (match-string 2) "fn:") nil (match-string 2)))
@@ -167,7 +172,7 @@ with start and label of the footnote if there is a
definition at point."
(interactive "sLabel: ")
(org-mark-ring-push)
(setq label (org-footnote-normalize-label label))
- (let ((re (format "^\\[%s\\]\\|.\\[%s:" label label))
+ (let ((re (format "^[ \t]*\\[%s\\]\\|.\\[%s:" label label))
pos)
(save-excursion
(setq pos (or (re-search-forward re nil t)
@@ -385,13 +390,13 @@ referenced sequence."
(setq def (org-trim def))
(save-excursion
(goto-char (point-min))
- (if (not (re-search-forward (concat "^\\[" (regexp-quote ref)
+ (if (not (re-search-forward (concat "^[ \t]*\\[" (regexp-quote
ref)
"\\]") nil t))
(setq def nil)
(setq beg (match-beginning 0))
(setq beg1 (match-end 0))
(re-search-forward
- (org-re "^[ \t]*$\\|^\\*+
\\|^\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]")
+ (org-re "^[ \t]*$\\|^\\*+ \\|^[
\t]*\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]")
nil 'move)
(setq def (buffer-substring beg1 (or (match-beginning 0)
(point-max))))
@@ -524,14 +529,14 @@ and all references of a footnote label."
(goto-char (point-min))
(while (re-search-forward org-footnote-re nil t)
(setq l (or (match-string 1) (match-string 2)))
- (when (equal l label)
+ (when (and (equal l label) (org-footnote-at-reference-p))
(delete-region (1+ (match-beginning 0)) (match-end 0))
(incf nref)))
(goto-char (point-min))
- (setq def-re (concat "^\\[" (regexp-quote label) "\\]"))
+ (setq def-re (concat "^[ \t]*\\[" (regexp-quote label) "\\]"))
(while (re-search-forward def-re nil t)
(setq beg (match-beginning 0))
- (if (re-search-forward "^\\[\\|^[ \t]*$\\|^\\*+ " nil t)
+ (if (re-search-forward "^[ \t]*\\[\\|^[ \t]*$\\|^\\*+ " nil t)
(goto-char (match-beginning 0))
(goto-char (point-max)))
(delete-region beg (point))
@@ -567,7 +572,7 @@ and all references of a footnote label."
(org-footnote-normalize 'sort)
(when label
(goto-char (point-min))
- (and (re-search-forward (concat "^\\[" (regexp-quote label) "\\]")
+ (and (re-search-forward (concat "^[ \t]*\\[" (regexp-quote label) "\\]")
nil t)
(progn (insert " ")
(just-one-space)))))))
--8<---------------cut here---------------end--------------->8---
>
> Thanks.
>
> - Carsten
>
> On Jan 13, 2010, at 11:51 AM, Carsten Dominik wrote:
>
>>
>> On Jan 12, 2010, at 10:37 PM, Dan Davison wrote:
>>
>>> If you hit <TAB> on a footnote definition, it indents it away from
>>> column 1, to align with its heading. However, the footnote definition
>>> needs to start in column 1 in order for the footnote to be correctly
>>> exported. It would be nice if the footnote exported correctly even
>>> when
>>> indented (or if that's problematic, then a less preferable solution
>>> would be having <TAB> not indent it).
>>
>> Hi Dan,
>>
>> here is a patch that allows footnote definitions to be detached from
>> the left margin. However, I am not sure if it breaks anything else
>> - so extensive testing would be necessary...
>>
>> Also, renumbering footnotes etc will put them back at the margin
>> currently. I am not sure how that should be handled otherwise....
>>
>> - Carsten
>>
>> <footnote-detach.patch>
>
> - Carsten