# HG changeset patch # User Richard M. Stallman # Date 1186941580 0 # Node ID 1532be3afc8a3a65b72b4a91d8f698d72250abf7 # Parent 83c69e5ccfd2f0ab51bd1455a0934bddc0efafd1 (combine-and-quote-strings): Renamed from strings->string. (split-string-and-unquote): Renamed from string->strings. diff -r 83c69e5ccfd2 -r 1532be3afc8a lisp/subr.el --- a/lisp/subr.el Sun Aug 12 17:57:34 2007 +0000 +++ b/lisp/subr.el Sun Aug 12 17:59:40 2007 +0000 @@ -2760,11 +2760,10 @@ list))) (nreverse list))) -;; (string->strings (strings->string X)) == X -(defun strings->string (strings &optional separator) +(defun combine-and-quote-strings (strings &optional separator) "Concatenate the STRINGS, adding the SEPARATOR (default \" \"). This tries to quote the strings to avoid ambiguity such that - (string->strings (strings->string strs)) == strs + (split-string-and-unquote (combine-and-quote-strings strs)) == strs Only some SEPARATORs will work properly." (let ((sep (or separator " "))) (mapconcat @@ -2774,20 +2773,20 @@ str)) strings sep))) -;; (string->strings (strings->string X)) == X -(defun string->strings (string &optional separator) +(defun split-string-and-unquote (string &optional separator) "Split the STRING into a list of strings. -It understands elisp style quoting within STRING such that - (string->strings (strings->string strs)) == strs +It understands Emacs Lisp quoting within STRING, such that + (split-string-and-unquote (combine-and-quote-strings strs)) == strs The SEPARATOR regexp defaults to \"\\s-+\"." (let ((sep (or separator "\\s-+")) (i (string-match "[\"]" string))) - (if (null i) (split-string string sep t) ; no quoting: easy + (if (null i) + (split-string string sep t) ; no quoting: easy (append (unless (eq i 0) (split-string (substring string 0 i) sep t)) (let ((rfs (read-from-string string i))) (cons (car rfs) - (string->strings (substring string (cdr rfs)) - sep))))))) + (split-string-and-unquote (substring string (cdr rfs)) + sep))))))) ;;;; Replacement in strings.