srfi.130
- Cursor-based string library ¶This is an reduced version of srfi.13
that supports cursors in
addition to indexes. The consistency with R7RS and recent srfis are
also considered.
Gauche supports string cursors natively (see String cursors), so all built-in and SRFI-13 string procedures that takes string indexes can als otake string cursors as well. You want to use this module explicitly, though, if you’re writing a portable code.
The following are built-in. See String cursors, for the details.
string-cursor? string-cursor-start string-cursor-end string-cursor-next strig-cursor-prev string-cursor-forward string-cursor-back string-cursor=? string-cursor<? string-cursor<=? string-cursor>? string-cursor>=? string-cursor-diff string-cursor->index string-index->cursor
The following procedures are simply aliases of the builtin version
without the /cursor
or /cursors
suffix.
string->list/cursors string->vector/cursors string-copy/cursors string-ref/cursor substring/cursors
The following procedures are defined in SRFI-13. See srfi.13
- String library,
for the details. Note: Some of those procedures in SRFI-13 accept
only indexes. In SRFI-130, both indexes
and cursors are accepted. Our SRFI-13 implementation shares the same
procedure with SRFI-130, so they accept both indexes and cursors but
such code won’t be portable as SRFI-13.
string-null? string-any string-every string-tabulate string-unfold string-unfold-right reverse-list->string string-take string-drop string-take-right string-drop-right string-pad string-pad-right string-trim string-trim-right string-trim-both string-replace string-prefix-length string-suffix-length string-prefix? string-suffix string-concatenate string-concatenate-reverse string-count string-filter string-reverse
The following procedures are the same as SRFI-152, except that
the arguments that takes integer indexes can also accept string cursors
(see srfi.152
- String library (reduced)):
string-replicate string-remove string-split
The following procedures are also defined in SRFI-13, but SRFI-130 redefines them to return a string cursor instead of an integer index. They are described below.
string-index string-index-right string-skip string-skip-right string-contains string-contains-right
[SRFI-130]{srfi.130
}
Find the position of a character that satisfies pred
(string-index
/string-index-right
), or
does not satisfy pred
(string-skip
/string-skip-right
), in a string.
The chacter is searched from left to right in
string-index
/string-skip
, and
right to left in string-index-right
/string-skip-right
.
While SRFI-13’s procedures of the same names returns integer index, these returns a string cursor instead.
The returned cursor from string-index
/string-skip
points the leftmost character that satisfies/does not satsify pred,
while the returned cursor from
string-index-right
points the next (right) character of the rightmost
one that satisfies/does not satisfy pred.
If there’re no characters that satisfy pred,
string-index
returns a cursor at the end
of the string, while string-index-right
returns a cursor at the beginning of the string.
(The *-skip
variation reverses the condition).
(This is easier to understand if you think the cursor is between characters; if we scan a string from left to right, the cursor looks at the character on its right; if we scan from right to left, the cursor looks at the character on its left.)
Be aware that they still return a cursor even no characters satisfy the
condition, while SRFI-13 versions return #f
in such cases.
The optional start/end can be string cursors or integer indexes to limit the region of string to search.
(define *s* "abc def ghi") (string-cursor->index *s* (string-index *s* char-whitespace?)) ⇒ 3 (string-cursor->index *s* (string-index *s* char-whitespace? 4)) ⇒ 7 (string-cursor->index *s* (string-index-right *s* char-whitespace?)) ⇒ 8 (string-cursor->index *s* (string-index-right *s* char-whitespace? 0 7)) ⇒ 4
[SRFI-130]{srfi.130
}
Search for a substring needle in a string haystack.
The substring is searched from left to right (string-contains
)
or right to left (string-contains-right
).
While SRFI-13’s procedures of the same names returns an integer index of the beginning of the substring if found, these procedures returns a string cursor of the beginning of haystack.
If haystack doesn’t countain needle, they return #f
.
[SRFI-130]{srfi.130
}
Calls proc with each cursor of string, from left to right,
excluding the post-end cursor. This is the cursor version of
string-for-each-index
in SRFI-13 (see String mapping).
(define s "abc")
(string-for-each-cursor (^c (display (string-ref/cursor s c))) s)
⇒ displays abc