chs - Character set module

Module Description

The chs module implements a character set. It supports the POSIX classes used in regular expressions.

Module Words

Character Set Structure

chs% ( -- n )
Get the required space for a chs variable

Set creation, initialisation and destruction

chs-init ( chs -- )
Initialise the set
chs-create ( "<spaces>name" -- ; -- chs )
Create a named character set in the dictionary
chs-new ( -- chs )
Create a new character set on the heap
chs-free ( chs -- )
Free the set from the heap

Sets words

chs^move ( chs1 chs2 -- )
Move chs1 in chs2
chs^or ( chs1 chs2 -- )
OR the sets chs1 with chs2 and store the result in chs2
chs^and ( chs1 chs2 -- )
AND the sets chs1 with chs2 and store the result in chs2
chs^xor ( chs1 chs2 -- )
XOR the sets chs1 with chs2 and store the result in chs2

Set words

chs-set ( chs -- )
Set all characters in the set
chs-reset ( chs -- )
Reset all characters in the set
chs-invert ( chs -- )
Invert all characters in the set

Char words

chs-set-char ( char chs -- )
Set the character in the set
chs-reset-char ( char chs -- )
Reset the character in the set

Character range words

chs-set-chars ( char1 char2 chs -- )
Set the character range [char2..char1] in the set
chs-reset-chars ( char1 char2 chs -- )
Reset the character range [char2..char1] in the set

String words

chs-set-string ( c-addr u chs -- )
Set the characters in the string in the set
chs-reset-string ( c-addr u chs -- )
Reset the characters in the string in the set

List words

chs-set-list ( charu .. char1 u chs -- )
Set the characters char1 till charu in the set
chs-reset-list ( charu .. char1 u chs -- )
Reset the characters char1 till charu in the set

POSIX classes

chs-set-upper ( chs -- )
Set the upper class in the set
chs-reset-upper ( chs -- )
Reset the upper class in the set
chs-set-lower ( chs -- )
Set the lower class in the set
chs-reset-lower ( chs -- )
Reset the lower class in the set
chs-set-alpha ( chs -- )
Set the alpha class in the set
chs-reset-alpha ( chs -- )
Reset the alpha class in the set
chs-set-digit ( chs -- )
Set the digit class in the set
chs-reset-digit ( chs -- )
Reset the digit class in the set
chs-set-alnum ( chs -- )
Set the alnum class in the set
chs-reset-alnum ( chs -- )
Reset the alnum class in the set
chs-set-xdigit ( chs -- )
Set the xdigit class in the set
chs-reset-xdigit ( chs -- )
Reset the xdigit class in the set
chs-set-punct ( chs -- )
Set the punct class in the set
chs-reset-punct ( chs -- )
Reset the punct class in the set
chs-set-blank ( chs -- )
Set the blank class in the set
chs-reset-blank ( chs -- )
Reset the blank class in the set
chs-set-space ( chs -- )
Set the space class in the set
chs-reset-space ( chs -- )
Reset the space class in the set
chs-set-cntrl ( chs -- )
Set the cntrl class in the set
chs-reset-cntrl ( chs -- )
Reset the cntrl class in the set
chs-set-graph ( chs -- )
Set the graph class in the set
chs-reset-graph ( chs -- )
Reset the graph class in the set
chs-set-print ( chs -- )
Set the print class in the set
chs-reset-print ( chs -- )
Reset the print class in the set
chs-set-word ( chs -- )
Set the word class in the set
chs-reset-word ( chs -- )
Reset the word class in the set

Char check word

chs-char? ( char chs -- flag )
Check if the character is in the set

Special words

chs-execute ( i*x xt chs -- j*x )
Execute xt for every character in the set

Inspection

chs-dump ( chs -- )
Dump the chs state

Examples

include ffl/chs.fs


\ Create a character set variable chs1 in the dictionary

chs-create chs1

\ Set 'a', '*', 'q', 'w' and '0'..'9' in the set

char a chs1 chs-set-char
char * chs1 chs-set-char

char 9 char 0 chs1 chs-set-chars

s" qw" chs1 chs-set-string

\ Check for characters in the set

char 7 chs1 chs-char? [IF]
  .( Character '7' is in the set ) cr
[ELSE]
  .( Character '7' is not in the set ) cr
[THEN]

char ; chs1 chs-char? [IF]
  .( Character ';' is in the set ) cr
[ELSE]
  .( Character ';' is not in the set ) cr
[THEN]

\ Create a character set on the heap

chs-new value chs2

\ Use the space and xdigit classes to fill the set 

chs1 chs-set-space
chs1 chs-set-xdigit

\ Invert the set so that the set contains no spaces and xdigits

chs1 chs-invert

\ Print the set contents by excecuting chs-emit for every character in the set

: chs-emit  ( char -- )
  dup chr-print? IF
    emit
  ELSE
    [char] < emit 0 .r [char] > emit
  THEN
;

.( Set:) ' chs-emit chs1 chs-execute cr

\ Free the set from the heap

chs2 chs-free


generated 03-Jun-2010 by ofcfrth-0.10.0