* pcvs-util.el (cvs-strings->string, cvs-string->strings):
Rename and move to... * subr.el (strings->string, string->strings): ...here.
This commit is contained in:
parent
a80a334ec3
commit
d0b15d3679
2 changed files with 31 additions and 30 deletions
|
|
@ -186,35 +186,6 @@ arguments. If ARGS is not a list, no argument will be passed."
|
|||
"Tell whether STR1 is a prefix of STR2."
|
||||
(eq t (compare-strings str2 nil (length str1) str1 nil nil)))
|
||||
|
||||
;; (string->strings (strings->string X)) == X
|
||||
(defun cvs-strings->string (strings &optional separator)
|
||||
"Concatenate the STRINGS, adding the SEPARATOR (default \" \").
|
||||
This tries to quote the strings to avoid ambiguity such that
|
||||
(cvs-string->strings (cvs-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 cvs-string->strings (string &optional separator)
|
||||
"Split the STRING into a list of strings.
|
||||
It understands elisp style quoting within STRING such that
|
||||
(cvs-string->strings (cvs-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)
|
||||
(cvs-string->strings (substring string (cdr rfs))
|
||||
sep)))))))
|
||||
|
||||
;;;;
|
||||
;;;; file names
|
||||
;;;;
|
||||
|
|
@ -240,7 +211,7 @@ The SEPARATOR regexp defaults to \"\\s-+\"."
|
|||
(defconst cvs-qtypedesc-string1 (cvs-qtypedesc-create 'identity 'identity t))
|
||||
(defconst cvs-qtypedesc-string (cvs-qtypedesc-create 'identity 'identity))
|
||||
(defconst cvs-qtypedesc-strings
|
||||
(cvs-qtypedesc-create 'cvs-string->strings 'cvs-strings->string nil))
|
||||
(cvs-qtypedesc-create 'string->strings 'strings->string nil))
|
||||
|
||||
(defun cvs-query-read (default prompt qtypedesc &optional hist-sym)
|
||||
(let* ((qtypedesc (or qtypedesc cvs-qtypedesc-strings))
|
||||
|
|
|
|||
30
lisp/subr.el
30
lisp/subr.el
|
|
@ -2759,6 +2759,36 @@ Modifies the match data; use `save-match-data' if necessary."
|
|||
(cons (substring string start)
|
||||
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.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue