From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: footnote export fails if footnote indented Date: Fri, 16 Apr 2010 12:53:32 -0400 Message-ID: <87sk6vibjn.fsf@stats.ox.ac.uk> References: <87skabj973.fsf@stats.ox.ac.uk> <0D8AC6D2-35B9-4F0B-A47B-76A6FC28E83D@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O2onX-00044i-0S for emacs-orgmode@gnu.org; Fri, 16 Apr 2010 12:53:43 -0400 Received: from [140.186.70.92] (port=53223 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O2onV-00042H-D0 for emacs-orgmode@gnu.org; Fri, 16 Apr 2010 12:53:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O2onR-0001yJ-QQ for emacs-orgmode@gnu.org; Fri, 16 Apr 2010 12:53:40 -0400 Received: from markov.stats.ox.ac.uk ([163.1.210.1]:36210) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O2onR-0001y0-Id for emacs-orgmode@gnu.org; Fri, 16 Apr 2010 12:53:37 -0400 In-Reply-To: (Carsten Dominik's message of "Wed, 14 Apr 2010 16:50:19 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Carsten Dominik Cc: emacs org-mode mailing list Carsten Dominik 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 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 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 >> >> > > - Carsten