inherit "/std/math"; /* * NAME: $string_utils:space() * DESCRIPTION: return a string consisting of copies of a string */ varargs string space(mixed len, string fill) { int n, m, f; if (stringp(len)) n = strlen(len); else n = len; if (n > 100000) error("Argument too large"); if (! fill) fill = " "; else if (fill != " ") { fill = fill + fill; fill = fill + fill; fill = fill + fill; } else if ((n = abs(n)) < 70) return (" " + " ")[.. n - 1]; else fill = " " + " "; m = (n - 1) / strlen(fill); while (m) { fill = fill + fill; m = m / 2; } return n > 0 ? fill[.. n - 1] : fill[(f = strlen(fill)) + n .. f]; } /* * NAME: $string_utils:left * DESCRIPTION: left-align a string */ varargs string left(string text, int len, string fill) { int abslen; string out; if (! fill) fill = " "; abslen = abs(len); out = text; if (strlen(out) < abslen) return out + space(strlen(out) - abslen, fill); else return len > 0 ? out : out[.. abslen - 1]; } /* * NAME: $string_utils:right * DESCRIPTION: right-align a string */ varargs string right(string text, int len, string fill) { int abslen; string out; if (! fill) fill = " "; abslen = abs(len); out = text; if (strlen(out) < abslen) return space(abslen - strlen(out), fill) + out; else return len > 0 ? out : out[.. abslen - 1]; }