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 }