Skip to content

Commit b5fc6f2

Browse files
committed
FEAT: implemented case and no-case PARSE keywords
resolves: Oldes/Rebol-issues#1898
1 parent 6b47c24 commit b5fc6f2

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

src/boot/words.reb

+2
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ while
156156
return
157157
limit
158158
??
159+
case
160+
no-case
159161
accept
160162
break
161163
; match words:

src/core/u-parse.c

+7
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,13 @@ void Print_Parse_Index(REBCNT type, REBVAL *rules, REBSER *series, REBCNT index)
810810
case SYM_QQ:
811811
Print_Parse_Index(parse->type, rules, series, index);
812812
continue;
813+
814+
case SYM_CASE:
815+
parse->flags |= AM_FIND_CASE;
816+
continue;
817+
case SYM_NO_CASE:
818+
parse->flags &= ~AM_FIND_CASE;
819+
continue;
813820
}
814821
}
815822
// Any other cmd must be a match command, so proceed...

src/tests/units/parse-test.r3

+18
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,24 @@ Rebol [
122122
===end-group===
123123

124124

125+
===start-group=== "CASE / NO-CASE"
126+
;@@ https://github.com/Oldes/Rebol-issues/issues/1898
127+
--test-- "case/no-case 1"
128+
--assert parse "aAaBbBcccDDD" [no-case "AAA" case "BbB" "ccc" no-case "ddd"]
129+
--assert parse/case "aAaBbBcccDDD" [no-case "AAA" case "BbB" "ccc" no-case "ddd"]
130+
--test-- "case/no-case 2"
131+
--assert all [parse b: ["aAa"][case ["AAA" | change "aAa" "AAA"]] b == ["AAA"]]
132+
--assert all [parse b: ["aAa"][case "AAA" | no-case change "aaa" "AAA"] b == ["AAA"]]
133+
--test-- "case/no-case 3"
134+
--assert parse "aaaAB" [case thru #"A" #"B"]
135+
--assert parse "aaaAB" [case thru #"A" no-case #"b"]
136+
--test-- "case/no-case 4"
137+
--assert parse to binary! "aaaAB" [thru #"A" #"B"]
138+
--assert parse to binary! "aaaAB" [thru #"A" no-case #"b"]
139+
--assert not parse to binary! "aaaAB" [thru #"A" #"b"]
140+
===end-group===
141+
142+
125143
===start-group=== "CHANGE"
126144

127145
--test-- "CHANGE string"

0 commit comments

Comments
 (0)