[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/subr.el,v [EMACS_22_BASE]
From: |
Nick Roberts |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/subr.el,v [EMACS_22_BASE] |
Date: |
Sun, 08 Jul 2007 06:47:19 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Branch: EMACS_22_BASE
Changes by: Nick Roberts <nickrob> 07/07/08 06:47:19
Index: subr.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/subr.el,v
retrieving revision 1.554
retrieving revision 1.554.2.1
diff -u -b -r1.554 -r1.554.2.1
--- subr.el 22 Apr 2007 16:56:19 -0000 1.554
+++ subr.el 8 Jul 2007 06:47:18 -0000 1.554.2.1
@@ -2760,6 +2760,36 @@
list)))
(nreverse list)))
+;; (string->strings (strings->string X)) == X
+(defun strings->string (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
+Only some SEPARATORs will work properly."
+ (let ((sep (or separator " ")))
+ (mapconcat
+ (lambda (str)
+ (if (string-match "[\\\"]" str)
+ (concat "\"" (replace-regexp-in-string "[\\\"]" "\\\\\\&" str) "\"")
+ str))
+ strings sep)))
+
+;; (string->strings (strings->string X)) == X
+(defun string->strings (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
+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
+ (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)))))))
+
+
;;;; Replacement in strings.
(defun subst-char-in-string (fromchar tochar string &optional inplace)
- [Emacs-diffs] Changes to emacs/lisp/subr.el,v [EMACS_22_BASE],
Nick Roberts <=