4223
|
1 #!../ploki
|
|
2 REM regular expression tester
|
|
3 NEXT main:
|
|
4
|
|
5 FOR trymatch
|
|
6 LEET txt \@ . 0
|
|
7 LEET pat \@ . 1
|
|
8 LEET ms txt ~ pat
|
|
9 IF ms
|
|
10 LET me \_
|
|
11 "matched at pos \Vms [\V(txt ] ms)\033[1m\V(txt [ ms ] (me - ms))\033[m\V(txt [ me ] 255)]
|
|
12 IF @DEF-P \0
|
|
13 WUNT "\\0<\V@-0, \V@+0>: \V\0
|
|
14 FI
|
|
15 IF @DEF-P \1
|
|
16 WUNT "\\1<\V@-1, \V@+1>: \V\1
|
|
17 FI
|
|
18 IF @DEF-P \2
|
|
19 WUNT "\\2<\V@-2, \V@+2>: \V\2
|
|
20 FI
|
|
21 ELSE
|
|
22 WUNT "no match
|
|
23 FI
|
|
24 KTHX
|
|
25
|
|
26 FOR main:
|
|
27 IF \ARG < 2
|
|
28 WUNT "Usage: \V\ARG:0 PATTERN [FILE]
|
|
29 END @NEG1
|
|
30 FI
|
|
31 LET pat \ARG:1
|
|
32 IF \ARG > 2
|
|
33 LET fh @LAPERS \ARG:2
|
|
34 IF @NOT fh
|
|
35 WUNT \AUSG \ARG:0_": "_\ARG:2_": "_\!_"
|
|
36 END @NEG1
|
|
37 FI
|
|
38 FOR buf LET s fh . 4096
|
|
39 IF s ; ""
|
|
40 #! "appending [\V@TYPE OFs:\V@LENGTHs]\Vs to \Vtxt
|
|
41 LET txt _= s
|
|
42 NEXT buf
|
|
43 FI
|
|
44 #! "matching /\Vpat/ against \Vtxt
|
|
45 trymatch #<txt pat#>
|
|
46 ELSE
|
|
47 "pattern: /\Vpat/
|
|
48 FOR line LET line @LEGS \EING
|
|
49 IF line ; ""
|
|
50 IF line [ -1 : "
|
|
51 LET line line ] -1
|
|
52 FI
|
|
53 trymatch #<line pat#>
|
|
54 NEXT line
|
|
55 FI
|
|
56 FI
|