home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
procs
/
caseless.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
3KB
|
133 lines
############################################################################
#
# File: caseless.icn
#
# Subject: Procedures to perform caseless scanning
#
# Author: Nevin J. Liber
#
# Date: August 19, 1996
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# These procedures are analogous to the standard string-analysis
# functions except that uppercase letters are considered equivalent to
# lowercase letters.
#
# anycl(c, s, i1, i2) succeeds and produces i1 + 1, provided
# map(s[i1]) is in cset(map(c)) and i2 is
# greater than i1. It fails otherwise.
#
# balcl(c1, c2, c3, s, i1, i2) generates the sequence of integer
# positions in s preceding a
# character of cset(map(c1)) in
# map(s[i1:i2]) that is balanced with
# respect to characters in cset(map(c2))
# and cset(map(c3)), but fails if there
# is no such position.
#
# findcl(s1, s2, i1, i2) generates the sequence of integer positions in
# s2 at which map(s1) occurs as a substring
# in map(s2[i1:i2]), but fails if there is no
# such position.
#
# manycl(c, s, i1, i2) succeeds and produces the position in s
# after the longest initial sequence of
# characters in cset(map(c)) within
# map(s[i1:i2]). It fails if map(s[i1]) is not
# in cset(map(c)).
#
# matchcl(s1, s2, i1, i2) produces i1 + *s1 if
# map(s1) == map(s2[i1+:=*s1]) but fails
# otherwise.
#
# uptocl(c, s, i1, i2) generates the sequence of integer positions in
# s preceding a character of cset(map(c)) in
# map(s[i1:i2]). It fails if there is no such
# position.
#
# Defaults: s, s2 &subject
# i1 &pos if s or s2 is defaulted; otherwise 1
# i2 0
# c1 &cset
# c2 '('
# c3 ')'
#
# Errors: 101 i1 or i2 not integer
# 103 s or s1 or s2 not string
# 104 c or c1 or c2 or c3 not cset
#
################################################################################
procedure anycl(c, s, i1, i2) #: Caseless version of any()
c := cset(map(cset(c)))
/i1 := (/s & &pos)
s := map(string(s) | (/s & &subject))
return any(c, s, i1, i2)
end
procedure balcl(c1, c2, c3, s, i1, i2) #: Caseless version of bal()
c1 := cset(map(cset(c1)))
c2 := cset(map(cset(c2)))
c3 := cset(map(cset(c3)))
/i1 := (/s & &pos)
s := map(string(s) | (/s & &subject))
suspend bal(c1, c2, c3, s, i1, i2)
end
procedure findcl(s1, s2, i1, i2) #: Caseless version of find()
s1 := map(string(s1))
/i1 := (/s2 & &pos)
s2 := map(string(s2) | (/s2 & &subject))
suspend find(s1, s2, i1, i2)
end
procedure manycl(c, s, i1, i2) #: Caseless version of many()
c := cset(map(cset(c)))
/i1 := (/s & &pos)
s := map(string(s) | (/s & &subject))
return many(c, s, i1, i2)
end
procedure matchcl(s1, s2, i1, i2) #: Caseless version of match()
s1 := map(string(s1))
/i1 := (/s2 & &pos)
s2 := map(string(s2) | (/s2 & &subject))
return match(s1, s2, i1, i2)
end
procedure uptocl(c, s, i1, i2) #: Caseless version of upto()
c := cset(map(cset(c)))
/i1 := (/s & &pos)
s := map(string(s) | (/s & &subject))
suspend upto(c, s, i1, i2)
end