1 module orelang.operator.RegexClass;
2 import orelang.expression.ClassType,
3        orelang.operator.IOperator,
4        orelang.Engine,
5        orelang.Value;
6 
7 import std.stdio,
8        std.conv;
9 import std.regex;
10 class RegexClass : ClassType {
11   Regex!char rgx;
12 
13   this (Engine _engine) {
14     _engine = _engine.clone;
15     super(_engine);
16 
17     _engine.defineVariable("constructor", new Value(cast(IOperator)(
18       new class () IOperator {
19         public Value call(Engine engine, Value[] args) {
20           string pattern = engine.eval(args[0]).getString;
21 
22           rgx = regex(pattern);
23 
24           return new Value;
25         }
26       })));
27 
28     _engine.defineVariable("reset", new Value(cast(IOperator)(
29       new class () IOperator {
30         public Value call(Engine engine, Value[] args) {
31           string pattern = engine.eval(args[0]).getString;
32 
33           rgx = regex(pattern);
34 
35           return new Value;
36         }})));
37 
38     _engine.defineVariable("match", new Value(cast(IOperator)(
39       new class () IOperator {
40         public Value call(Engine engine, Value[] args) {
41           return new Value(cast(bool)(engine.eval(args[0]).getString.match(rgx)));
42         }})));
43 
44     _engine.defineVariable("match-all", new Value(cast(IOperator)(
45       new class () IOperator {
46         public Value call(Engine engine, Value[] args) {
47           writeln(engine.eval(args[0]).getString.matchAll(rgx));
48           return new Value;
49         }})));
50 
51     _engine.defineVariable("show-ptn", new Value(cast(IOperator)(
52       new class () IOperator {
53         public Value call(Engine engine, Value[] args) {
54           import std.stdio;
55           writeln(rgx);
56           return new Value;
57         }})));
58   }
59 }