summaryrefslogtreecommitdiff
path: root/support/texaccents/grepl.inc
diff options
context:
space:
mode:
Diffstat (limited to 'support/texaccents/grepl.inc')
-rw-r--r--support/texaccents/grepl.inc63
1 files changed, 63 insertions, 0 deletions
diff --git a/support/texaccents/grepl.inc b/support/texaccents/grepl.inc
new file mode 100644
index 0000000000..76ad8bb0f0
--- /dev/null
+++ b/support/texaccents/grepl.inc
@@ -0,0 +1,63 @@
+* Function GREPL
+* replaces all the items in SET1 with all the items in SET2
+* SET1/2 must have the form "ITEM ITEM ITEM " -- space at the end
+* guido.milanese@unicatt.it
+* requires "repl.inc"
+* 31.07.2022
+#################################################################
+# MIT License - Copyright (c) 2022 Guido Milanese
+# See file LICENSE in this package
+#################################################################
+ define("grepl(Pass,Set1,Set2)datum,I,N,T1,T2,A1,A2")
+-include "repl.inc"
+ :(grepl_end)
+grepl
+grepl_bg
+ T1 = TABLE()
+ T2 = TABLE()
+ N = 0
+grepl1 N = N + 1
+ Set1 ? break(' ') . datum len(1) rem . Set1 :f(grepl1_nd)
+ T1[N] = datum :(grepl1)
+grepl1_nd
+
+ N = 0
+grepl2 N = N + 1
+ Set2 ? break(' ') . datum len(1) rem . Set2 :f(grepl2_nd)
+ T2[N] = datum :(grepl2)
+grepl2_nd
+ A1 = convert(T1,"ARRAY")
+ A2 = convert(T2,"ARRAY")
+grepl3_bg I = I + 1
+ Pass = repl(Pass,A1[I,2],A2[I,2]) :S(grepl3_bg)F(grepl3_nd)
+grepl3_nd
+grepl_rt grepl = Pass :(return)
+grepl_end
+
+*********************************************************************
+* This function, as Phil Budne's "repl", replaces string/string
+* but, as standard "replace", can replace a set with another set.
+* In this way also Unicode chars can be replaced with no limitation
+* since they are treated as strings.
+* Text = "aiuole"
+* S1 = "a e i o u "
+* S2 = "1 2 3 4 5 "
+* Text2 = grepl(Text,S1,S2)
+* will output: "1354l2"
+* But also:
+* Text = "aiuole"
+* S1 = "a e i o u "
+* S2 = "ā ē ī ō ū "
+* will output: "āīūōlē"
+* the standard REPLACE ("aeiou" / "āēīōū") will fail
+* because Unicode chars (>127 ASCII) do not have the same length of chars <127.
+* Step by step:
+* create two tables for sets: T1 and T2
+* feed the tables scanning thes two sets (items must be separeted by spaces)
+* convert from tables to arrays
+* use REPL converting string/string in PASS:
+* each item of SET1 is replaced by the corresponding item in S2
+* if SET2 is shorter the exceeding item in SET1 is left unchanged
+* if SET1 is shorter the exceeding item in SET2 is not used
+* Please notice that separating items by spaces makes it possible to substitute
+* also sets of strings, such as e.g. LaTeX accents.