diff --git a/projects/re-flex/LICENSE b/projects/re-flex/LICENSE new file mode 100644 index 00000000..a39cb308 --- /dev/null +++ b/projects/re-flex/LICENSE @@ -0,0 +1 @@ +This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. \ No newline at end of file diff --git a/projects/re-flex/README.md b/projects/re-flex/README.md new file mode 100644 index 00000000..3c18c202 --- /dev/null +++ b/projects/re-flex/README.md @@ -0,0 +1,4 @@ +re-flex +------- + +Utilities for regex construction adapted from Software Design for Flexibility. \ No newline at end of file diff --git a/projects/re-flex/build.hxml b/projects/re-flex/build.hxml new file mode 100644 index 00000000..140db8a8 --- /dev/null +++ b/projects/re-flex/build.hxml @@ -0,0 +1,4 @@ +-lib kiss +-cp src +--main re_flex.Main +--interp \ No newline at end of file diff --git a/projects/re-flex/haxelib.json b/projects/re-flex/haxelib.json new file mode 100644 index 00000000..fc12c64c --- /dev/null +++ b/projects/re-flex/haxelib.json @@ -0,0 +1,16 @@ +{ + "main": "re_flex.Main", + "name": "re-flex", + "description": "", + "classPath": "src/", + "dependencies": { + "kiss": "" + }, + "url": "https://github.com/NQNStudios/kisslang", + "contributors": [ + "NQNStudios" + ], + "version": "0.0.0", + "releasenote": "", + "tags": [] +} \ No newline at end of file diff --git a/projects/re-flex/src/re_flex/Main.hx b/projects/re-flex/src/re_flex/Main.hx new file mode 100644 index 00000000..207a1563 --- /dev/null +++ b/projects/re-flex/src/re_flex/Main.hx @@ -0,0 +1,7 @@ +package re_flex; + +import kiss.Kiss; +import kiss.Prelude; + +@:build(kiss.Kiss.build()) +class Main {} diff --git a/projects/re-flex/src/re_flex/Main.kiss b/projects/re-flex/src/re_flex/Main.kiss new file mode 100644 index 00000000..d441299f --- /dev/null +++ b/projects/re-flex/src/re_flex/Main.kiss @@ -0,0 +1 @@ +(print "Hello world!") diff --git a/projects/re-flex/src/re_flex/R.hx b/projects/re-flex/src/re_flex/R.hx new file mode 100644 index 00000000..a84aba25 --- /dev/null +++ b/projects/re-flex/src/re_flex/R.hx @@ -0,0 +1,7 @@ +package re_flex; + +import kiss.Prelude; +import kiss.List; + +@:build(kiss.Kiss.build()) +class R {} diff --git a/projects/re-flex/src/re_flex/R.kiss b/projects/re-flex/src/re_flex/R.kiss new file mode 100644 index 00000000..2c9c2daf --- /dev/null +++ b/projects/re-flex/src/re_flex/R.kiss @@ -0,0 +1,29 @@ +(var anyChar ".") +(var start "^") +(var end "\$") + +(function :String _group [:Array exprs] + (+ "(" (apply + exprs) ")")) + +(var group (Reflect.makeVarArgs _group)) + +(function :String escape [:String str] + (group (EReg.escape str))) + +(function :String _oneOf [:Array 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 ""))))))) diff --git a/projects/re-flex/test.sh b/projects/re-flex/test.sh new file mode 100644 index 00000000..0ee8ae95 --- /dev/null +++ b/projects/re-flex/test.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +haxe build.hxml \ No newline at end of file