diff --git a/autotests/folding/test.rexx.fold b/autotests/folding/test.rexx.fold
new file mode 100644
index 0000000..378f8b7
--- /dev/null
+++ b/autotests/folding/test.rexx.fold
@@ -0,0 +1,52 @@
+/* REXX */
+ASCB_PTR = C2X(STORAGE(D2X(X2D("224")),4))
+SAY X2B(ASCB_PTR)
+/* COMMENTS */
+/******************************************************************
+ END OF COMMENTS */
+SAY 'ENTER YOUR NAME'
+PULL NAME
+DO WHILE NAME \= 'QUIT'
+ SAY 'HELLO THERE' NAME
+ PULL NAME
+END
+X = OUTTRAP('LU.')
+"LU"
+X = OUTTRAP('OFF')
+SAY 'THE NUMBER OF LINES:' LU.0
+DO I = 1 TO LU.0
+ SAY LU.I /* SAYS THE OUTPUT FROM LU */
+END
+SAY 'GOOD-BYE.'
+IF DATE('D') \= "13" THEN DO
+ Y = TESTSELECT(15,'RAD')
+ SAY Y
+ SAY Y || " <-- TESTSELECT"
+END
+EXIT 1
+/* FUNCTIONS */
+TESTSELECT: PROCEDURE /* TESTING SELECT */
+ PARSE ARG NUM CAR .
+ SELECT
+ WHEN NUM < 25 THEN
+ STATUS = "25%"
+ WHEN NUM < 50 THEN
+ DO
+ IF CAR = 'RAD' THEN
+ STATUS = 'DOPE'
+ ELSE
+ STATUS = 'SICK'
+ END
+ WHEN NUM < 200 THEN DO
+ NOP
+ END
+ WHEN NUM < 75 THEN
+ STATUS = 'SEVENTY FIVE'
+ OTHERWISE
+ IF CAR = 'RAD' THEN
+ STATUS = 'COOL'
+ STATUS = 'COOL'
+ ELSE
+ STATUS = 'RADICAL'
+END
+RETURN STATUS
diff --git a/autotests/html/test.rexx.html b/autotests/html/test.rexx.html
new file mode 100644
index 0000000..d528f24
--- /dev/null
+++ b/autotests/html/test.rexx.html
@@ -0,0 +1,59 @@
+
+
+
+test.rexx
+
+
+/* REXX */
+ASCB_PTR = C2X(STORAGE(D2X(X2D("224")),4))
+SAY X2B(ASCB_PTR)
+/* COMMENTS */
+/******************************************************************
+ END OF COMMENTS */
+SAY 'ENTER YOUR NAME'
+PULL NAME
+DO WHILE NAME \= 'QUIT'
+ SAY 'HELLO THERE' NAME
+ PULL NAME
+END
+X = OUTTRAP('LU.')
+"LU"
+X = OUTTRAP('OFF')
+SAY 'THE NUMBER OF LINES:' LU.0
+DO I = 1 TO LU.0
+ SAY LU.I /* SAYS THE OUTPUT FROM LU */
+END
+SAY 'GOOD-BYE.'
+IF DATE('D') \= "13" THEN DO
+ Y = TESTSELECT(15,'RAD')
+ SAY Y
+ SAY Y || " <-- TESTSELECT"
+END
+EXIT 1
+/* FUNCTIONS */
+TESTSELECT: PROCEDURE /* TESTING SELECT */
+ PARSE ARG NUM CAR .
+ SELECT
+ WHEN NUM < 25 THEN
+ STATUS = "25%"
+ WHEN NUM < 50 THEN
+ DO
+ IF CAR = 'RAD' THEN
+ STATUS = 'DOPE'
+ ELSE
+ STATUS = 'SICK'
+ END
+ WHEN NUM < 200 THEN DO
+ NOP
+ END
+ WHEN NUM < 75 THEN
+ STATUS = 'SEVENTY FIVE'
+ OTHERWISE
+ IF CAR = 'RAD' THEN
+ STATUS = 'COOL'
+ STATUS = 'COOL'
+ ELSE
+ STATUS = 'RADICAL'
+END
+RETURN STATUS
+
diff --git a/autotests/input/test.rexx b/autotests/input/test.rexx
new file mode 100644
index 0000000..3e25125
--- /dev/null
+++ b/autotests/input/test.rexx
@@ -0,0 +1,52 @@
+/* REXX */
+ASCB_PTR = C2X(STORAGE(D2X(X2D("224")),4))
+SAY X2B(ASCB_PTR)
+/* COMMENTS */
+/******************************************************************
+ END OF COMMENTS */
+SAY 'ENTER YOUR NAME'
+PULL NAME
+DO WHILE NAME \= 'QUIT'
+ SAY 'HELLO THERE' NAME
+ PULL NAME
+END
+X = OUTTRAP('LU.')
+"LU"
+X = OUTTRAP('OFF')
+SAY 'THE NUMBER OF LINES:' LU.0
+DO I = 1 TO LU.0
+ SAY LU.I /* SAYS THE OUTPUT FROM LU */
+END
+SAY 'GOOD-BYE.'
+IF DATE('D') \= "13" THEN DO
+ Y = TESTSELECT(15,'RAD')
+ SAY Y
+ SAY Y || " <-- TESTSELECT"
+END
+EXIT 1
+/* FUNCTIONS */
+TESTSELECT: PROCEDURE /* TESTING SELECT */
+ PARSE ARG NUM CAR .
+ SELECT
+ WHEN NUM < 25 THEN
+ STATUS = "25%"
+ WHEN NUM < 50 THEN
+ DO
+ IF CAR = 'RAD' THEN
+ STATUS = 'DOPE'
+ ELSE
+ STATUS = 'SICK'
+ END
+ WHEN NUM < 200 THEN DO
+ NOP
+ END
+ WHEN NUM < 75 THEN
+ STATUS = 'SEVENTY FIVE'
+ OTHERWISE
+ IF CAR = 'RAD' THEN
+ STATUS = 'COOL'
+ STATUS = 'COOL'
+ ELSE
+ STATUS = 'RADICAL'
+END
+RETURN STATUS
diff --git a/autotests/reference/test.rexx.ref b/autotests/reference/test.rexx.ref
new file mode 100644
index 0000000..6e69ce4
--- /dev/null
+++ b/autotests/reference/test.rexx.ref
@@ -0,0 +1,52 @@
+/* REXX */
+ASCB_PTR = C2X(STORAGE(D2X(X2D("224")),4))
+SAY X2B(ASCB_PTR)
+/* COMMENTS */
+/******************************************************************
+ END OF COMMENTS */
+SAY 'ENTER YOUR NAME'
+PULL NAME
+DO WHILE NAME \= 'QUIT'
+ SAY 'HELLO THERE' NAME
+ PULL NAME
+END
+X = OUTTRAP('LU.')
+"LU"
+X = OUTTRAP('OFF')
+SAY 'THE NUMBER OF LINES:' LU.0
+DO I = 1 TO LU.0
+ SAY LU.I /* SAYS THE OUTPUT FROM LU */
+END
+SAY 'GOOD-BYE.'
+IF DATE('D') \= "13" THEN DO
+ Y = TESTSELECT(15,'RAD')
+ SAY Y
+ SAY Y || " <-- TESTSELECT"
+END
+EXIT 1
+/* FUNCTIONS */
+TESTSELECT: PROCEDURE /* TESTING SELECT */
+ PARSE ARG NUM CAR .
+ SELECT
+ WHEN NUM < 25 THEN
+ STATUS = "25%"
+ WHEN NUM < 50 THEN
+ DO
+ IF CAR = 'RAD' THEN
+ STATUS = 'DOPE'
+ ELSE
+ STATUS = 'SICK'
+ END
+ WHEN NUM < 200 THEN DO
+ NOP
+ END
+ WHEN NUM < 75 THEN
+ STATUS = 'SEVENTY FIVE'
+ OTHERWISE
+ IF CAR = 'RAD' THEN
+ STATUS = 'COOL'
+ STATUS = 'COOL'
+ ELSE
+ STATUS = 'RADICAL'
+END
+RETURN STATUS
diff --git a/data/syntax/rexx.xml b/data/syntax/rexx.xml
index 28c8062..a51eb3f 100644
--- a/data/syntax/rexx.xml
+++ b/data/syntax/rexx.xml
@@ -1,134 +1,199 @@
-
+
-
- - arg
- - drop
- - else
- - end
- - exit
- - forever
- - if
- - interpret
- - iterate
- - leave
- - nop
- - options
- - otherwise
- - pull
- - push
- - queue
- - return
- - say
- - select
- - syntax
- - then
-
-
- - abbrev
- - abs
- - address
- - bitand
- - bitor
- - bitxor
- - b2x
- - center
- - charin
- - charout
- - chars
- - c2d
- - c2x
- - compare
- - condition
- - copies
- - datatype
- - date
- - delstr
- - delword
- - digits
- - d2c
- - d2x
- - errortext
- - form
- - format
- - fuzz
- - insert
- - lastpos
- - left
- - linein
- - lineout
- - lines
- - max
- - min
- - overlay
- - pos
- - queued
- - random
- - reverse
- - right
- - sign
- - sourceline
- - space
- - stream
- - strip
- - substr
- - subword
- - symbol
- - time
- - trace
- - translate
- - trunc
- - value
- - verify
- - word
- - wordindex
- - wordlength
- - wordpos
- - words
- - xrange
- - x2b
- - x2c
- - x2d
-
+
+ - ADDRESS
+ - ARG
+ - CALL
+ - DROP
+ - EXIT
+ - INTERPRET
+ - NOP
+ - NUMERIC
+ - OPTIONS
+ - PARSE
+ - PROCEDURE
+ - PULL
+ - PUSH
+ - QUEUE
+ - RETURN
+ - SAY
+ - SYNTAX
+ - TRACE
+ - UPPER
+ - RC
+ - RESULT
+ - SIGL
+
+
+ - VALUE
+ - WITH
+ - RESULT
+ - DIGITS
+ - SCIENTIFIC
+ - ENGINEERING
+ - FORM
+ - FUZZ
+ - ALL
+ - COMMANDS
+ - ERROR
+ - FAILURE
+ - Intermediates
+ - LABELS
+ - NORMAL
+ - OFF
+ - RESULTS
+
+
+ - do
+ - to
+ - by
+ - for
+ - while
+ - until
+ - leave
+ - iterate
+ - forever
+
+
+ - select
+ - when
+ - then
+ - otherwise
+ - do
+ - if
+ - else
+ - end
+
+
+ - ABBREV
+ - ABS
+ - ADDRESS
+ - ARG
+ - B2X
+ - BITAND
+ - BITOR
+ - BITXOR
+ - C2D
+ - C2X
+ - CHARS
+ - CHARIN
+ - CHARSIN
+ - CENTER
+ - CENTRE
+ - COMPARE
+ - CONDITION
+ - COPIES
+ - D2C
+ - D2X
+ - DATATYPE
+ - DATE
+ - DBCS
+ - DELSTR
+ - DELWORD
+ - DIGITS
+ - ERRORTEXT
+ - EXTERNALS
+ - FIND
+ - FORM
+ - FORMAT
+ - FUZZ
+ - GETMSG
+ - INDEX
+ - INSERT
+ - JUSTIFY
+ - LASTPOS
+ - LEFT
+ - LENGTH
+ - LINEIN
+ - LINEOUT
+ - LINESIZE
+ - LISTDSI
+ - MAX
+ - MIN
+ - MSG
+ - MVSVAR
+ - OUTTRAP
+ - OVERLAY
+ - POS
+ - PROMPT
+ - QUEUED
+ - RANDOM
+ - REVERSE
+ - RIGHT
+ - SETLANG
+ - SIGN
+ - SOURCELINE
+ - SPACE
+ - STORAGE
+ - STRIP
+ - STREAM
+ - SUBSTR
+ - SUBWORD
+ - SYMBOL
+ - SYSCPUS
+ - SYSDSN
+ - SYSVAR
+ - TIME
+ - TRACE
+ - TRANSLATE
+ - TRUNC
+ - USERID
+ - VALUE
+ - VERIFY
+ - WORD
+ - WORDINDEX
+ - WORDLENGTH
+ - WORDPOS
+ - WORDS
+ - X2B
+ - X2C
+ - X2D
+ - XRANGE
+
-
+
+
+
+
-
+
+
-
+