const char *my_gettext(const char *s) { if (gettext_ht) { const char *r = (const char *)htfind(gettext_ht, s); if (r) s = r; } if (s[0] == '|') return ignore_prefix(s); else return s; }
unsigned char *my_gettext(unsigned char *s) { if (gettext_ht) { unsigned char *r = htfind(gettext_ht, s); if (r) s = r; } if (s[0] == '|') return ignore_prefix(s); else return s; }
static int do_comp_vars(int test, int na, char *sa, int nb, char *sb, int mod) { switch (test) { case CVT_RANGENUM: { int l = arrlen(compwords); if (na < 0) na += l; else na--; if (nb < 0) nb += l; else nb--; if (compcurrent - 1 < na || compcurrent - 1 > nb) return 0; if (mod) restrict_range(na, nb); return 1; } case CVT_RANGEPAT: { char **p; int i, l = arrlen(compwords), t = 0, b = 0, e = l - 1; Patprog pp; i = compcurrent - 1; if (i < 0 || i >= l) return 0; singsub(&sa); pp = patcompile(sa, PAT_STATIC, NULL); for (i--, p = compwords + i; i >= 0; p--, i--) { if (pattry(pp, *p)) { b = i + 1; t = 1; break; } } if (t && sb) { int tt = 0; singsub(&sb); pp = patcompile(sb, PAT_STATIC, NULL); for (i++, p = compwords + i; i < l; p++, i++) { if (pattry(pp, *p)) { e = i - 1; tt = 1; break; } } if (tt && i < compcurrent) t = 0; } if (e < b) t = 0; if (t && mod) restrict_range(b, e); return t; } case CVT_PRENUM: case CVT_SUFNUM: if (!na) return 1; if (na > 0 && (int)strlen(test == CVT_PRENUM ? compprefix : compsuffix) >= na) { if (mod) { if (test == CVT_PRENUM) ignore_prefix(na); else ignore_suffix(na); return 1; } return 0; } case CVT_PREPAT: case CVT_SUFPAT: { Patprog pp; if (!na) return 0; if (!(pp = patcompile(sa, PAT_STATIC, 0))) return 0; if (test == CVT_PREPAT) { int l, add; char *p, sav; if (!(l = strlen(compprefix))) return ((na == 1 || na == -1) && pattry(pp, compprefix)); if (na < 0) { p = compprefix + l; na = -na; add = -1; } else { p = compprefix + 1 + (*compprefix == Meta); if (p > compprefix + l) p = compprefix + l; add = 1; } for (;;) { sav = *p; *p = '\0'; test = pattry(pp, compprefix); *p = sav; if (test && !--na) break; if (add > 0) { if (p == compprefix + l) return 0; p = p + 1 + (*p == Meta); if (p > compprefix + l) p = compprefix + l; } else { if (p == compprefix) return 0; p--; if (p > compprefix && p[-1] == Meta) p--; } } if (mod) ignore_prefix(p - compprefix); } else { int l, ol, add; char *p; if (!(ol = l = strlen(compsuffix))) return ((na == 1 || na == -1) && pattry(pp, compsuffix)); if (na < 0) { p = compsuffix; na = -na; add = 1; } else { p = compsuffix + l - 1; if (p > compsuffix && p[-1] == Meta) p--; add = -1; } for (;;) { if (pattry(pp, p) && !--na) break; if (add > 0) { if (p == compsuffix + l) return 0; if (*p == Meta) p += 2; else p++; } else { if (p == compsuffix) return 0; p--; if (p > compsuffix && p[-1] == Meta) p--; } } if (mod) ignore_suffix(ol - (p - compsuffix)); } return 1; } } return 0; }