"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
;;;;
(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))
(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)))))))
+
\f
;;;; Replacement in strings.