From: Nicolas Goaziou <n.goaziou@gmail.com> To: Eric Schulte <schulte.eric@gmail.com> Cc: Martyn Jago <martyn.jago@btinternet.com>, emacs-orgmode@gnu.org Subject: Re: [BUG] Unmatched #+end-src Date: Thu, 17 Mar 2011 13:09:04 +0100 [thread overview] Message-ID: <87mxku7xun.fsf@gmail.com> (raw) In-Reply-To: <87ipvnyvtb.fsf@gmail.com> (Eric Schulte's message of "Sun, 13 Mar 2011 07:49:36 -0600") [-- Attachment #1: Type: text/plain, Size: 976 bytes --] Hello, "Eric Schulte" <schulte.eric@gmail.com> writes: >> The real problem is: how should Org react when parsing syntactically >> erroneous buffers? I concede that freezing Emacs isn't nice, but otoh, >> code can't deal with every possible user error. >> >> So, what is the expected behavior here? Consider orphan #+end_ as >> normal text, throw an error, or both? An answer to this question would >> be more useful than code, honestly. >> > > This is just opinion and gut reaction, but my first instinct is to say > that Org just treat an orphan #+end_ as normal text (or technically as > an Org-mode comment). > > The same is true for a floating #+begin_src. Until the block is closed, > it is just a comment. As it's the only answer so far, I guess it was more trivial than I thought. Here is a patch that should fix the original problem. Martyn, as you are writing tests, would you mind running it against them, before I apply it? Many thanks in advance. Regards, [-- Attachment #2: patch infloop with erroneous constructs --] [-- Type: text/plain, Size: 2714 bytes --] From 805e11e419c58a9f3fdb470987056c5ac970817f Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Thu, 17 Mar 2011 13:01:06 +0100 Subject: [PATCH] org-list: fix infinite loop on erroneous block and drawer constructs * lisp/org-list.el (org-list-struct,org-in-item-p): don't assume end of blocks or drawers necessarily start somewhere. It it isn't the case, treat them as normal text. --- lisp/org-list.el | 24 ++++++++++++------------ 1 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lisp/org-list.el b/lisp/org-list.el index aea8634..8bfd359 100644 --- a/lisp/org-list.el +++ b/lisp/org-list.el @@ -465,10 +465,10 @@ This checks `org-list-ending-method'." (looking-at org-list-end-re)) (throw 'exit nil)) ;; Skip blocks, drawers, inline-tasks, blank lines - ((looking-at "^[ \t]*#\\+end_") - (re-search-backward "^[ \t]*#\\+begin_" nil t)) - ((looking-at "^[ \t]*:END:") - (re-search-backward org-drawer-regexp nil t) + ((and (looking-at "^[ \t]*#\\+end_") + (re-search-backward "^[ \t]*#\\+begin_" lim-up t))) + ((and (looking-at "^[ \t]*:END:") + (re-search-backward org-drawer-regexp lim-up t)) (beginning-of-line)) ((and inlinetask-re (looking-at inlinetask-re)) (org-inlinetask-goto-beginning) @@ -686,10 +686,10 @@ Assume point is at an item." (memq (assq (car beg-cell) itm-lst) itm-lst)))) ;; Skip blocks, drawers, inline tasks, blank lines ;; along the way. - ((looking-at "^[ \t]*#\\+end_") - (re-search-backward "^[ \t]*#\\+begin_" nil t)) - ((looking-at "^[ \t]*:END:") - (re-search-backward drawers-re nil t) + ((and (looking-at "^[ \t]*#\\+end_") + (re-search-backward "^[ \t]*#\\+begin_" lim-up t))) + ((and (looking-at "^[ \t]*:END:") + (re-search-backward drawers-re lim-up t)) (beginning-of-line)) ((and inlinetask-re (looking-at inlinetask-re)) (org-inlinetask-goto-beginning) @@ -753,11 +753,11 @@ Assume point is at an item." (throw 'exit (push (cons 0 (point)) end-lst-2))) ;; Skip blocks, drawers, inline tasks and blank lines ;; along the way - ((looking-at "^[ \t]*#\\+begin_") - (re-search-forward "^[ \t]*#\\+end_") + ((and (looking-at "^[ \t]*#\\+begin_") + (re-search-forward "^[ \t]*#\\+end_" lim-down t)) (forward-line 1)) - ((looking-at drawers-re) - (re-search-forward "^[ \t]*:END:" nil t) + ((and (looking-at drawers-re) + (re-search-forward "^[ \t]*:END:" lim-down t)) (forward-line 1)) ((and inlinetask-re (looking-at inlinetask-re)) (org-inlinetask-goto-end)) -- 1.7.4.1 [-- Attachment #3: Type: text/plain, Size: 21 bytes --] -- Nicolas Goaziou
next prev parent reply other threads:[~2011-03-17 12:09 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-03-12 16:56 Martyn Jago 2011-03-12 19:29 ` Aankhen 2011-03-12 20:07 ` Nicolas 2011-03-12 20:20 ` Aankhen 2011-03-12 21:05 ` Martyn Jago 2011-03-13 0:31 ` Nicolas 2011-03-13 13:49 ` Eric Schulte 2011-03-17 12:09 ` Nicolas Goaziou [this message] 2011-03-12 20:43 ` Martyn Jago 2011-03-23 17:38 ` Nicolas
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://www.orgmode.org/ * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87mxku7xun.fsf@gmail.com \ --to=n.goaziou@gmail.com \ --cc=emacs-orgmode@gnu.org \ --cc=martyn.jago@btinternet.com \ --cc=schulte.eric@gmail.com \ --subject='Re: [BUG] Unmatched #+end-src' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).