emacs-orgmode
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]