aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-24 13:34:10 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-24 13:34:10 +0100
commite3ea9032f6e3105d9c0a720db8bc413b4a3e016f (patch)
tree8959b4c197a16f034756574501e75bf5450e17c5 /lib
parentf5253185aa55a46cb3da80f66e7127a45c82052f (diff)
downloadsciteco-e3ea9032f6e3105d9c0a720db8bc413b4a3e016f.tar.gz
moved QuickSort macros from symbols-extract script into own string.tes macro library
* therefore for bootstrapping to work, the SCITECOPATH is always set explicitly
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am1
-rw-r--r--lib/string.tes45
2 files changed, 46 insertions, 0 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 6bfb55a..5ac3d33 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,2 +1,3 @@
dist_scitecolib_DATA = lexer.tes fnkeys.tes
+dist_scitecolib_DATA += string.tes
diff --git a/lib/string.tes b/lib/string.tes
new file mode 100644
index 0000000..274873b
--- /dev/null
+++ b/lib/string.tes
@@ -0,0 +1,45 @@
+! String utility macros !
+
+! <pos1,pos2>M{symcasecmp} - Compare symbol at pos1 with symbol at pos2 (caseless) !
+@{symcasecmp}{
+ U.2U.1 -.%.1 -.%.2
+ @.#lo{
+ U.v Q.v"W a-A%.v | Q.v"CQ.v|0' '
+ }
+ <Q.1A:M.#loU.a Q.2A:M.#loU.b
+ Q.a-Q.bU.c Q.c"N;' -Q.a;
+ %.1%.2>
+ Q.c
+}
+
+! <i,j>M{exchange} - Exchange line at I with line at J (I < J), returning new J !
+@{exchange}{
+ U.jU.i
+ Q.jJ X.xK
+ Q.iJ G.x .-Q.i%.j .-(X.xL.)%.j -K
+ Q.jJ G.x
+ Q.j
+}
+
+! <i,j>M{qsort} - Sort lines beginning at I until J using Quicksort algorithm !
+@{qsort}{
+ U.rU.l
+
+ Q.l-Q.r"<
+ Q.lU.i Q.rJB .U.j
+
+ <
+ Q.iJ <.,Q.rM{symcasecmp}-1; .-Q.r; L> .U.i
+ Q.jJ <.,Q.rM{symcasecmp}:; .-Q.l-1:; B> .U.j
+
+ Q.i-Q.j;
+
+ Q.i,Q.jM{exchange}U.j
+ >
+
+ Q.i,Q.rM{symcasecmp}"> Q.i,Q.rM{exchange}U.r '
+
+ Q.l-Q.i"< Q.iJB Q.l,.M{qsort} '
+ Q.i-Q.r"< Q.iJL .,Q.rM{qsort} '
+ '
+}