Touching up RegexConversion

This commit is contained in:
2021-10-29 21:43:55 -04:00
parent ee1b5e99bb
commit 0413ac1f06
4 changed files with 20 additions and 7 deletions

View File

@@ -4,5 +4,7 @@ import kiss.Prelude;
import kiss.List; import kiss.List;
import re_flex.R; import re_flex.R;
using StringTools;
@:build(kiss.Kiss.build()) @:build(kiss.Kiss.build())
class RegexConversion {} class RegexConversion {}

View File

@@ -2,8 +2,13 @@
&prop &mut :String sourceType &prop &mut :String sourceType
&prop &mut :String outputType &prop &mut :String outputType
:String regex :String regex
:String blockTemplate] :String blockTemplate
&opt :String flags]
[ [
&mut :String->Bool canConvert ->block ?(R.match regex block) &mut :String->Bool canConvert ->block ?(R.match regex block /*TODO use or for this */(if flags flags ""))
&mut :String->String convert ->_ "\$(let [groups .namedGroups (R.match \"${regex}\" source) group ->g (dictGet groups g)] \"${blockTemplate}\")" &mut :String->String convert ->_ "\$(let [groups .namedGroups (R.match #\"$(escapeRegex regex)\"# source \"$(if flags flags "")\") group ->g (dictGet groups g)] \"${blockTemplate}\")"
]) ])
// This may turn out to be an unsolvable rabbit hole...
(function escapeRegex [:String regex]
(regex.replace "\\" "\\\\"))

View File

@@ -1,5 +1,6 @@
package re_flex; package re_flex;
import haxe.Constraints.Function;
import kiss.Prelude; import kiss.Prelude;
import kiss.List; import kiss.List;
#if hxnodejs #if hxnodejs

View File

@@ -2,17 +2,22 @@
(var start "^") (var start "^")
(var end "\$") (var end "\$")
// TODO these are very anglocentric:
(var capitalLetter "[A-Z]")
(var smallLetter "[a-z]")
(var anyLetter "[A-Za-z]")
(function :String _group [:Array<Dynamic> exprs] (function :String _group [:Array<Dynamic> exprs]
(+ "(" (apply + (assert exprs)) ")")) (+ "(" (apply + (assert exprs)) ")"))
(var group (Reflect.makeVarArgs _group)) (var :Function group (Reflect.makeVarArgs _group))
(#when hxnodejs (#when hxnodejs
(function :String _namedGroup [:Array<Dynamic> exprs] (function :String _namedGroup [:Array<Dynamic> exprs]
(let [groupName (assert (exprs.shift))] (let [groupName (assert (exprs.shift))]
(_group (concat ["?<${groupName}>"] exprs)))) (_group (concat ["?<${groupName}>"] exprs))))
(var namedGroup (Reflect.makeVarArgs _namedGroup))) (var :Function namedGroup (Reflect.makeVarArgs _namedGroup)))
(function :String escape [:String str] (function :String escape [:String str]
(group (EReg.escape str))) (group (EReg.escape str)))
@@ -20,7 +25,7 @@
(function :String _oneOf [:Array<Dynamic> exprs] (function :String _oneOf [:Array<Dynamic> exprs]
(group (exprs.join "|"))) (group (exprs.join "|")))
(var oneOf (Reflect.makeVarArgs _oneOf)) (var :Function oneOf (Reflect.makeVarArgs _oneOf))
(function :String repeat [:String expr &opt :Int min :Int max] (function :String repeat [:String expr &opt :Int min :Int max]
(apply group (apply group