implementing regex system from Software Design for Flexibility
This commit is contained in:
7
src/re_flex/Main.hx
Normal file
7
src/re_flex/Main.hx
Normal file
@@ -0,0 +1,7 @@
|
||||
package re_flex;
|
||||
|
||||
import kiss.Kiss;
|
||||
import kiss.Prelude;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class Main {}
|
1
src/re_flex/Main.kiss
Normal file
1
src/re_flex/Main.kiss
Normal file
@@ -0,0 +1 @@
|
||||
(print "Hello world!")
|
7
src/re_flex/R.hx
Normal file
7
src/re_flex/R.hx
Normal file
@@ -0,0 +1,7 @@
|
||||
package re_flex;
|
||||
|
||||
import kiss.Prelude;
|
||||
import kiss.List;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class R {}
|
29
src/re_flex/R.kiss
Normal file
29
src/re_flex/R.kiss
Normal file
@@ -0,0 +1,29 @@
|
||||
(var anyChar ".")
|
||||
(var start "^")
|
||||
(var end "\$")
|
||||
|
||||
(function :String _group [:Array<Dynamic> exprs]
|
||||
(+ "(" (apply + exprs) ")"))
|
||||
|
||||
(var group (Reflect.makeVarArgs _group))
|
||||
|
||||
(function :String escape [:String str]
|
||||
(group (EReg.escape str)))
|
||||
|
||||
(function :String _oneOf [:Array<Dynamic> exprs]
|
||||
(group (exprs.join "|")))
|
||||
|
||||
(var oneOf (Reflect.makeVarArgs _oneOf))
|
||||
|
||||
(function :String repeat [:String expr &opt :Int min :Int max]
|
||||
(apply group
|
||||
(concat
|
||||
(for _ (range min) expr)
|
||||
(cond
|
||||
// unlimited repetitions after minimum if max is null:
|
||||
(!max
|
||||
[(group expr) "*"])
|
||||
((= max min)
|
||||
[])
|
||||
(true
|
||||
(for _ (range (- max min)) (oneOf expr "")))))))
|
Reference in New Issue
Block a user