"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))