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/
next prev parent 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).