aboutsummaryrefslogtreecommitdiffstats
path: root/awklib/eg/prog/translate.awk
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2010-07-16 14:52:31 +0300
committerArnold D. Robbins <arnold@skeeve.com>2010-07-16 14:52:31 +0300
commit3ba50a15ebd976f7a88393e2e45dc14b6478b9a9 (patch)
tree6a6bbe6bed1141051fefe94b2d39eacd4854235a /awklib/eg/prog/translate.awk
parent6a2caf2157d87b4b582b2494bdd7d6a688dd0b1f (diff)
downloadegawk-3ba50a15ebd976f7a88393e2e45dc14b6478b9a9.tar.gz
egawk-3ba50a15ebd976f7a88393e2e45dc14b6478b9a9.tar.bz2
egawk-3ba50a15ebd976f7a88393e2e45dc14b6478b9a9.zip
Move to gawk-3.1.7.
Diffstat (limited to 'awklib/eg/prog/translate.awk')
-rw-r--r--awklib/eg/prog/translate.awk16
1 files changed, 10 insertions, 6 deletions
diff --git a/awklib/eg/prog/translate.awk b/awklib/eg/prog/translate.awk
index 0db239ad..cf7f3897 100644
--- a/awklib/eg/prog/translate.awk
+++ b/awklib/eg/prog/translate.awk
@@ -2,26 +2,30 @@
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# August 1989
+# February 2009 - bug fix
# Bugs: does not handle things like: tr A-Z a-z, it has
# to be spelled out. However, if `to' is shorter than `from',
# the last character in `to' is used for the rest of `from'.
-function stranslate(from, to, target, lf, lt, t_ar, i, c)
+function stranslate(from, to, target, lf, lt, ltarget, t_ar, i, c,
+ result)
{
lf = length(from)
lt = length(to)
+ ltarget = length(target)
for (i = 1; i <= lt; i++)
t_ar[substr(from, i, 1)] = substr(to, i, 1)
if (lt < lf)
for (; i <= lf; i++)
t_ar[substr(from, i, 1)] = substr(to, lt, 1)
- for (i = 1; i <= lf; i++) {
- c = substr(from, i, 1)
- if (index(target, c) > 0)
- gsub(c, t_ar[c], target)
+ for (i = 1; i <= ltarget; i++) {
+ c = substr(target, i, 1)
+ if (c in t_ar)
+ c = t_ar[c]
+ result = result c
}
- return target
+ return result
}
function translate(from, to)