mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 20:00:19 +02:00
155 lines
3.8 KiB
Scheme
155 lines
3.8 KiB
Scheme
;;; srfi-13.scm --- String Library
|
|
|
|
;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
|
;;
|
|
;; This library is free software; you can redistribute it and/or
|
|
;; modify it under the terms of the GNU Lesser General Public
|
|
;; License as published by the Free Software Foundation; either
|
|
;; version 2.1 of the License, or (at your option) any later version.
|
|
;;
|
|
;; This library 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
|
|
;; Lesser General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU Lesser General Public
|
|
;; License along with this library; if not, write to the Free Software
|
|
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
;;; Commentary:
|
|
|
|
;; This module is fully documented in the Guile Reference Manual.
|
|
|
|
;;; Code:
|
|
|
|
(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 extended
|
|
;; list->string <= in the core
|
|
reverse-list->string
|
|
string-join
|
|
|
|
;;; Selection
|
|
;; string-length string-ref <= in the core
|
|
;; string-copy extended
|
|
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! extended
|
|
|
|
;;; 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
|
|
|
|
;;; 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 extended
|
|
string-index-right
|
|
string-skip string-skip-right
|
|
string-count
|
|
string-contains string-contains-ci
|
|
|
|
;;; Alphabetic case mapping
|
|
|
|
;; string-upcase string-upcase! extended
|
|
;; string-downcase string-downcase! extended
|
|
string-titlecase string-titlecase!
|
|
|
|
;;; Reverse/Append
|
|
string-reverse string-reverse!
|
|
;; string-append <= in the core
|
|
string-append/shared
|
|
string-concatenate
|
|
string-concatenate-reverse
|
|
string-concatenate/shared
|
|
string-concatenate-reverse/shared
|
|
|
|
;;; Fold/Unfold/Map
|
|
string-map string-map!
|
|
string-fold
|
|
string-fold-right
|
|
string-unfold
|
|
string-unfold-right
|
|
string-for-each
|
|
string-for-each-index
|
|
|
|
;;; Replicate/Rotate
|
|
xsubstring string-xcopy!
|
|
|
|
;;; Miscellaneous
|
|
string-replace
|
|
string-tokenize
|
|
|
|
;;; Filtering/Deleting
|
|
string-filter
|
|
string-delete
|
|
)
|
|
:replace (string->list string-copy string-fill!
|
|
string-upcase! string-upcase string-downcase! string-downcase
|
|
string-index)
|
|
)
|
|
|
|
(cond-expand-provide (current-module) '(srfi-13))
|
|
|
|
(load-extension "libguile-srfi-srfi-13-14" "scm_init_srfi_13")
|
|
|
|
(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))))
|
|
|
|
;;; srfi-13.scm ends here
|