From 598891af43ce1c3d06758b57842c8f5e0096cdad Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 26 Oct 2021 22:53:11 -0400 Subject: [PATCH] implementing regex system from Software Design for Flexibility --- LICENSE | 1 + README.md | 4 ++++ build.hxml | 4 ++++ haxelib.json | 16 ++++++++++++++++ src/re_flex/Main.hx | 7 +++++++ src/re_flex/Main.kiss | 1 + src/re_flex/R.hx | 7 +++++++ src/re_flex/R.kiss | 29 +++++++++++++++++++++++++++++ test.sh | 3 +++ 9 files changed, 72 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.hxml create mode 100644 haxelib.json create mode 100644 src/re_flex/Main.hx create mode 100644 src/re_flex/Main.kiss create mode 100644 src/re_flex/R.hx create mode 100644 src/re_flex/R.kiss create mode 100644 test.sh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a39cb30 --- /dev/null +++ b/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/README.md b/README.md new file mode 100644 index 0000000..3c18c20 --- /dev/null +++ b/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/build.hxml b/build.hxml new file mode 100644 index 0000000..140db8a --- /dev/null +++ b/build.hxml @@ -0,0 +1,4 @@ +-lib kiss +-cp src +--main re_flex.Main +--interp \ No newline at end of file diff --git a/haxelib.json b/haxelib.json new file mode 100644 index 0000000..fc12c64 --- /dev/null +++ b/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/src/re_flex/Main.hx b/src/re_flex/Main.hx new file mode 100644 index 0000000..207a156 --- /dev/null +++ b/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/src/re_flex/Main.kiss b/src/re_flex/Main.kiss new file mode 100644 index 0000000..d441299 --- /dev/null +++ b/src/re_flex/Main.kiss @@ -0,0 +1 @@ +(print "Hello world!") diff --git a/src/re_flex/R.hx b/src/re_flex/R.hx new file mode 100644 index 0000000..a84aba2 --- /dev/null +++ b/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/src/re_flex/R.kiss b/src/re_flex/R.kiss new file mode 100644 index 0000000..2c9c2da --- /dev/null +++ b/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/test.sh b/test.sh new file mode 100644 index 0000000..0ee8ae9 --- /dev/null +++ b/test.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +haxe build.hxml \ No newline at end of file