emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Eric Schulte <eric.schulte@gmx.com>
To: Martyn Jago <martyn.jago@btinternet.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [babel][bug] org-babel-balanced-split (with Emacs-22)
Date: Tue, 03 Jan 2012 11:46:17 -0700	[thread overview]
Message-ID: <8739bwtyiu.fsf@gmx.com> (raw)
In-Reply-To: <m21urgtz53.fsf@btinternet.com> (Martyn Jago's message of "Tue, 03 Jan 2012 18:32:56 +0000")

Martyn Jago <martyn.jago@btinternet.com> writes:

> Eric Schulte <eric.schulte@gmx.com> writes:
>
>> Martyn Jago <martyn.jago@btinternet.com> writes:
>>
>>> Martyn Jago <martyn.jago@btinternet.com> writes:
>>>
>>> [...]
>>>
>>> The problem appears to be associated with the way `member' works:
>>>
>>>  - on Emacs 23+ the following doesn't generate an error 
>>>  - on Emacs 22 it generates "Wrong type argument: listp, 58"
>>>
>>> #+begin_src emacs-lisp
>>>
>>> (member 116 58) 
>>>
>>> #+end_src
>>>
>>> `org-babel-balanced-split' appears to rely on not generating an error
>>> when the `member' LIST parameter is actually a number.
>>>
>>
>> Ah, I see where this comes in, does the included alternative definition
>> of this function fix the issue on Emacs22?  If so I'll apply this change
>> to the repository.
>>
>> Thanks,
>>
>> (defun org-babel-balanced-split (string alts)
>>   "Split STRING on instances of ALTS.
>> ALTS is a cons of two character options where each option may be
>> either the numeric code of a single character or a list of
>> character alternatives.  For example to split on balanced
>> instances of \"[ \t]:\" set ALTS to '((32 9) . 58)."
>>   (flet ((matches (ch spec) (or (and (numberp spec) (= spec ch))
>> 				(not (numberp spec) (member ch spec))))
>
> [...]
>
> Hi Eric
>
> I fixed a typo on your fix, and added a regression test, and it now
> works on Emacs 22. Thanks!
>

Great, both the test case and a fixed version of this function are now
applied to the git repository.

Thanks,

>
> Best, Martyn
>
> (defun org-babel-balanced-split (string alts)
>   "Split STRING on instances of ALTS.
> ALTS is a cons of two character options where each option may be
> either the numeric code of a single character or a list of
> character alternatives.  For example to split on balanced
> instances of \"[ \t]:\" set ALTS to '((32 9) . 58)."
>   (flet ((matches (ch spec) (or (and (numberp spec) (= spec ch))
> 				(and (not (numberp spec))
> 				     (member ch spec))))
> 	 (matched (ch last)
> 		  (if (consp alts)
> 		      (and (matches ch (cdr alts))
> 			   (matches last (car alts)))
> 		    (matches ch alts))))
>     (let ((balance 0) (quote nil) (partial nil) (lst nil) (last 0))
>       (mapc (lambda (ch)  ; split on [], (), "" balanced instances of [ \t]:
> 	      (setq balance (+ balance
> 			       (cond ((or (equal 91 ch) (equal 40 ch)) 1)
> 				     ((or (equal 93 ch) (equal 41 ch)) -1)
> 				     (t 0))))
> 	      (when (and (equal 34 ch) (not (equal 92 last)))
> 		(setq quote (not quote)))
> 	      (setq partial (cons ch partial))
> 	      (when (and (= balance 0) (not quote) (matched ch last))
> 		(setq lst (cons (apply #'string (nreverse
> 						 (if (consp alts)
> 						     (cddr partial)
> 						   (cdr partial))))
> 				lst))
> 		(setq partial nil))
> 	      (setq last ch))
> 	    (string-to-list string))
>       (nreverse (cons (apply #'string (nreverse partial)) lst)))))
>
> (ert-deftest test-ob/org-babel-balanced-split ()
>   (should (equal
> 	   '(":a 1" "b [2 3]" "c (4 :d (5 6))")
> 	   (org-babel-balanced-split ":a 1 :b [2 3] :c (4 :d (5 6))" '((32 9) . 58)))))

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

  reply	other threads:[~2012-01-03 18:46 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-02 17:41 [babel][bug] Martyn Jago
2012-01-03 17:40 ` [babel][bug] org-babel-balanced-split (with Emacs-22) Martyn Jago
2012-01-03 17:46   ` Eric Schulte
2012-01-03 18:32     ` Martyn Jago
2012-01-03 18:46       ` Eric Schulte [this message]
2012-01-03 18:49         ` Achim Gratz
2012-01-03 19:10           ` Eric Schulte
2012-01-03 19:22             ` Achim Gratz
2012-01-03 20:57               ` Eric Schulte

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=8739bwtyiu.fsf@gmx.com \
    --to=eric.schulte@gmx.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=martyn.jago@btinternet.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).