summaryrefslogtreecommitdiff
path: root/srfi/srfi-13.scm
diff options
context:
space:
mode:
Diffstat (limited to 'srfi/srfi-13.scm')
-rw-r--r--srfi/srfi-13.scm141
1 files changed, 141 insertions, 0 deletions
diff --git a/srfi/srfi-13.scm b/srfi/srfi-13.scm
new file mode 100644
index 000000000..9b28b65ee
--- /dev/null
+++ b/srfi/srfi-13.scm
@@ -0,0 +1,141 @@
+;;;; srfi-13.scm --- SRFI-13 procedures for Guile
+;;;;
+;;;; Copyright (C) 2001 Free Software Foundation, Inc.
+;;;;
+;;;; This program is free software; you can redistribute it and/or
+;;;; modify it under the terms of the GNU General Public License as
+;;;; published by the Free Software Foundation; either version 2, or
+;;;; (at your option) any later version.
+;;;;
+;;;; This program is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;;;; General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with this software; see the file COPYING. If not, write to
+;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+;;;; Boston, MA 02111-1307 USA
+
+(define-module (srfi srfi-13))
+
+(export
+;;; Predicates
+ ;; string? string-null? <= in the core
+ string-any string-every
+
+;;; Constructors
+ ;; make-string string <= in the core
+ string-tabulate
+
+;;; List/string conversion
+ string->list
+ ;; list->string <= in the core
+ reverse-list->string
+ string-join
+
+;;; Selection
+ ;; string-length string-ref <= in the core
+ string-copy
+ substring/shared
+ string-copy!
+ string-take string-take-right
+ string-drop string-drop-right
+ string-pad string-pad-right
+ string-trim string-trim-right
+ string-trim-both
+
+;;; Modification
+ ;; string-set! <= in the core
+ string-fill!
+
+;;; Comparison
+ string-compare string-compare-ci
+ string= string<>
+ string< string>
+ string<= string>=
+ string-ci= string-ci<>
+ string-ci< string-ci>
+ string-ci<= string-ci>=
+ string-hash string-hash-ci ; FIXME::martin: rewrite in C?
+
+;;; Prefixes/Suffixes
+ string-prefix-length
+ string-prefix-length-ci
+ string-suffix-length
+ string-suffix-length-ci
+ string-prefix?
+ string-prefix-ci?
+ string-suffix?
+ string-suffix-ci?
+
+;;; Searching
+ string-index string-index-right
+ string-skip string-skip-right
+ string-count
+ string-contains string-contains-ci
+
+;;; Alphabetic case mapping
+
+ string-upcase string-upcase!
+ string-downcase string-downcase!
+ string-titlecase string-titlecase!
+
+;;; Reverse/Append
+ string-reverse string-reverse!
+ ;; string-append <= in the core
+ string-append/shared
+ string-concatenate
+ reverse-string-concatenate
+ string-concatenate/shared
+ reverse-string-concatenate/shared
+
+;;; Fold/Unfold/Map
+ string-map string-map!
+ string-fold
+ string-fold-right
+ string-unfold
+ string-unfold-right
+ string-for-each
+
+;;; Replicate/Rotate
+ xsubstring string-xcopy!
+
+;;; Miscellaneous
+ string-replace
+ string-tokenize
+
+;;; Filtering/Deleting
+ string-filter
+ string-delete
+ )
+
+(dynamic-call "scm_init_srfi_13_14" (dynamic-link "libguile-srfi-srfi-13-14"))
+
+(define string-hash
+ (lambda (s . rest)
+ (let ((bound (if (pair? rest)
+ (or (car rest)
+ 871)
+ 871))
+ (start (if (and (pair? rest) (pair? (cdr rest)))
+ (cadr rest)
+ 0))
+ (end (if (and (pair? rest) (pair? (cdr rest)) (pair? (cddr rest)))
+ (caddr rest)
+ (string-length s))))
+ (hash (substring/shared s start end) bound))))
+
+(define string-hash-ci
+ (lambda (s . rest)
+ (let ((bound (if (pair? rest)
+ (or (car rest)
+ 871)
+ 871))
+ (start (if (and (pair? rest) (pair? (cdr rest)))
+ (cadr rest)
+ 0))
+ (end (if (and (pair? rest) (pair? (cdr rest)) (pair? (cddr rest)))
+ (caddr rest)
+ (string-length s))))
+ (hash (string-upcase (substring/shared s start end)) bound))))