Commit | Line | Data |
---|---|---|
6be07c52 TTN |
1 | ;;; srfi-14.scm --- Character-set Library |
2 | ||
3 | ;; Copyright (C) 2001, 2002 Free Software Foundation, Inc. | |
4 | ;; | |
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. | |
9 | ;; | |
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. | |
14 | ;; | |
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 | |
19 | ;; | |
20 | ;; As a special exception, the Free Software Foundation gives permission | |
21 | ;; for additional uses of the text contained in its release of GUILE. | |
22 | ;; | |
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. | |
28 | ;; | |
29 | ;; This exception does not however invalidate any other reasons why | |
30 | ;; the executable file might be covered by the GNU General Public License. | |
31 | ;; | |
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. | |
39 | ;; | |
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. | |
ead45146 TTN |
43 | |
44 | ;;; Commentary: | |
45 | ||
46 | ;; This module is fully documented in the Guile Reference Manual. | |
47 | ||
48 | ;;; Code: | |
ca003b26 | 49 | |
1a179b03 MD |
50 | (define-module (srfi srfi-14) |
51 | :export ( | |
ca003b26 MG |
52 | ;;; General procedures |
53 | char-set? | |
54 | char-set= | |
55 | char-set<= | |
56 | char-set-hash | |
57 | ||
58 | ;;; Iterating over character sets | |
59 | char-set-cursor | |
60 | char-set-ref | |
61 | char-set-cursor-next | |
62 | end-of-char-set? | |
63 | char-set-fold | |
64 | char-set-unfold char-set-unfold! | |
65 | char-set-for-each | |
66 | char-set-map | |
67 | ||
68 | ;;; Creating character sets | |
69 | char-set-copy | |
70 | char-set | |
71 | list->char-set list->char-set! | |
8b19021c | 72 | string->char-set string->char-set! |
ca003b26 MG |
73 | char-set-filter char-set-filter! |
74 | ucs-range->char-set ucs-range->char-set! | |
75 | ->char-set | |
76 | ||
77 | ;;; Querying character sets | |
78 | char-set-size | |
79 | char-set-count | |
80 | char-set->list | |
81 | char-set->string | |
82 | char-set-contains? | |
83 | char-set-every | |
84 | char-set-any | |
85 | ||
86 | ;;; Character set algebra | |
87 | char-set-adjoin char-set-adjoin! | |
88 | char-set-delete char-set-delete! | |
89 | char-set-complement | |
90 | char-set-union | |
91 | char-set-intersection | |
92 | char-set-difference | |
93 | char-set-xor | |
94 | char-set-diff+intersection | |
95 | char-set-complement! | |
96 | char-set-union! | |
97 | char-set-intersection! | |
98 | char-set-difference! | |
99 | char-set-xor! | |
100 | char-set-diff+intersection! | |
101 | ||
102 | ;;; Standard character sets | |
103 | char-set:lower-case | |
104 | char-set:upper-case | |
105 | char-set:title-case | |
106 | char-set:letter | |
107 | char-set:digit | |
108 | char-set:letter+digit | |
109 | char-set:graphic | |
110 | char-set:printing | |
111 | char-set:whitespace | |
112 | char-set:iso-control | |
113 | char-set:punctuation | |
114 | char-set:symbol | |
115 | char-set:hex-digit | |
116 | char-set:blank | |
117 | char-set:ascii | |
118 | char-set:empty | |
119 | char-set:full | |
1a179b03 | 120 | )) |
ca003b26 | 121 | |
1b2f40b9 MG |
122 | (cond-expand-provide (current-module) '(srfi-14)) |
123 | ||
dd22a80a | 124 | (load-extension "libguile-srfi-srfi-13-14" "scm_init_srfi_14") |
ca003b26 MG |
125 | |
126 | (define (->char-set x) | |
127 | (cond | |
128 | ((string? x) (string->char-set x)) | |
129 | ((char? x) (char-set x)) | |
130 | ((char-set? x) x) | |
131 | (else (error "invalid argument to `->char-set'")))) | |
132 | ||
133 | (define char-set:full (ucs-range->char-set 0 256)) | |
134 | ||
135 | (define char-set:lower-case (char-set-filter char-lower-case? char-set:full)) | |
136 | ||
137 | (define char-set:upper-case (char-set-filter char-upper-case? char-set:full)) | |
138 | ||
139 | (define char-set:title-case (char-set)) | |
140 | ||
141 | (define char-set:letter (char-set-union char-set:lower-case | |
142 | char-set:upper-case)) | |
143 | ||
144 | (define char-set:digit (string->char-set "0123456789")) | |
145 | ||
146 | (define char-set:letter+digit | |
147 | (char-set-union char-set:letter char-set:digit)) | |
148 | ||
149 | (define char-set:punctuation (string->char-set "!\"#%&'()*,-./:;?@[\\]_{}")) | |
150 | ||
151 | (define char-set:symbol (string->char-set "$+<=>^`|~")) | |
152 | ||
153 | (define char-set:whitespace (char-set #\space #\newline #\tab #\cr #\vt #\np)) | |
154 | ||
155 | (define char-set:blank (char-set #\space #\tab)) | |
156 | ||
157 | (define char-set:graphic | |
158 | (char-set-union char-set:letter+digit char-set:punctuation char-set:symbol)) | |
159 | ||
160 | (define char-set:printing | |
161 | (char-set-union char-set:graphic char-set:whitespace)) | |
162 | ||
163 | (define char-set:iso-control | |
164 | (char-set-adjoin | |
165 | (char-set-filter (lambda (ch) (< (char->integer ch) 31)) char-set:full) | |
166 | (integer->char 127))) | |
167 | ||
168 | (define char-set:hex-digit (string->char-set "0123456789abcdefABCDEF")) | |
169 | ||
170 | (define char-set:ascii | |
171 | (char-set-filter (lambda (ch) (< (char->integer ch) 128)) char-set:full)) | |
172 | ||
173 | (define char-set:empty (char-set)) | |
ead45146 TTN |
174 | |
175 | ;;; srfi-14.scm ends here |