############################################################################
#
# File: word.icn
#
# Subject: Procedure to scan UNIX-style command line words
#
# Author: Robert J. Alexander
#
# Date: August 14, 1996
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# word(s) -- Produces the position past a UNIX-style command line
# word.
#
# dequote(s) -- Produces the UNIX-style command line word s with any
# quoting characters removed.
#
############################################################################
#
# Links: scanset
#
############################################################################
link scanset
#
# word(s) -- Produces the position past a UNIX-style command line
# word.
#
procedure word(s,i1,i2)
local c,d,p,e,x
x := scan_setup(s,i1,i2)
x.ss ? {
(while tab(upto(' \t"\'')) do {
if (c := move(1)) == ("\"" | "'") then {
e := c ++ "\\"
while tab(upto(e)) do {
d := move(1)
if d == c then break
move(1)
}
}
else break
}) | "" ~== tab(0) | fail
p := &pos
}
return x.offset + p
end
#
# dequote(s) -- Produces the UNIX-style command line word s with any
# quoting characters removed.
#
procedure word_dequote(s)
local c,d
s ? {
s := ""
while s ||:= tab(upto('"\'\\')) do {
c := move(1)
if c == "\\" then s ||:= move(1)
else {
if \d then (s ||:= d ~== c) | (d := &null)
else d := c
}
}
return s || tab(0)
}
end
This page produced by UniDoc on 2021/04/15 @ 23:59:44.