1 ;;;; srfi-13.scm --- SRFI-13 procedures for Guile
3 ;;;; Copyright (C) 2001 Free Software Foundation, Inc.
5 ;;;; This program is free software; you can redistribute it and/or
6 ;;;; modify it under the terms of the GNU General Public License as
7 ;;;; published by the Free Software Foundation; either version 2, or
8 ;;;; (at your option) any later version.
10 ;;;; This program is distributed in the hope that it will be useful,
11 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 ;;;; General Public License for more details.
15 ;;;; You should have received a copy of the GNU General Public License
16 ;;;; along with this software; see the file COPYING. If not, write to
17 ;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 ;;;; Boston, MA 02111-1307 USA
20 ;;;; As a special exception, the Free Software Foundation gives permission
21 ;;;; for additional uses of the text contained in its release of GUILE.
23 ;;;; The exception is that, if you link the GUILE library with other files
24 ;;;; to produce an executable, this does not by itself cause the
25 ;;;; resulting executable to be covered by the GNU General Public License.
26 ;;;; Your use of that executable is in no way restricted on account of
27 ;;;; linking the GUILE library code into it.
29 ;;;; This exception does not however invalidate any other reasons why
30 ;;;; the executable file might be covered by the GNU General Public License.
32 ;;;; This exception applies only to the code released by the
33 ;;;; Free Software Foundation under the name GUILE. If you copy
34 ;;;; code from other Free Software Foundation releases into a copy of
35 ;;;; GUILE, as the General Public License permits, the exception does
36 ;;;; not apply to the code that you add in this way. To avoid misleading
37 ;;;; anyone as to the status of such modified files, you must delete
38 ;;;; this exception notice from them.
40 ;;;; If you write modifications of your own for GUILE, it is your choice
41 ;;;; whether to permit this exception to apply to your modifications.
42 ;;;; If you do not wish that, delete this exception notice.
44 (define-module (srfi srfi-13))
48 ;; string? string-null? <= in the core
49 string-any string-every
52 ;; make-string string <= in the core
55 ;;; List/string conversion
57 ;; list->string <= in the core
62 ;; string-length string-ref <= in the core
66 string-take string-take-right
67 string-drop string-drop-right
68 string-pad string-pad-right
69 string-trim string-trim-right
73 ;; string-set! <= in the core
77 string-compare string-compare-ci
81 string-ci= string-ci<>
83 string-ci<= string-ci>=
84 string-hash string-hash-ci
88 string-prefix-length-ci
90 string-suffix-length-ci
97 string-index string-index-right
98 string-skip string-skip-right
100 string-contains string-contains-ci
102 ;;; Alphabetic case mapping
104 string-upcase string-upcase!
105 string-downcase string-downcase!
106 string-titlecase string-titlecase!
109 string-reverse string-reverse!
110 ;; string-append <= in the core
113 string-concatenate-reverse
114 string-concatenate/shared
115 string-concatenate-reverse/shared
118 string-map string-map!
124 string-for-each-index
127 xsubstring string-xcopy!
133 ;;; Filtering/Deleting
138 (cond-expand-provide (current-module) '(srfi-13))
140 (load-extension "libguile-srfi-srfi-13-14" "scm_init_srfi_13")
144 (let ((bound (if (pair? rest)
148 (start (if (and (pair? rest) (pair? (cdr rest)))
151 (end (if (and (pair? rest) (pair? (cdr rest)) (pair? (cddr rest)))
154 (hash (substring/shared s start end) bound))))
156 (define string-hash-ci
158 (let ((bound (if (pair? rest)
162 (start (if (and (pair? rest) (pair? (cdr rest)))
165 (end (if (and (pair? rest) (pair? (cdr rest)) (pair? (cddr rest)))
168 (hash (string-upcase (substring/shared s start end)) bound))))