spell: spell_soundfold_sal() is dead code

This commit is contained in:
Jan Edmund Lazo 2020-01-16 00:24:26 -05:00
parent 1042338c00
commit a7aa1fc87d
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15

View File

@ -5835,10 +5835,7 @@ void spell_soundfold(slang_T *slang, char_u *inword, bool folded, char_u *res)
word = fword;
}
if (has_mbyte)
spell_soundfold_wsal(slang, word, res);
else
spell_soundfold_sal(slang, word, res);
spell_soundfold_wsal(slang, word, res);
}
}
@ -5903,243 +5900,6 @@ static void spell_soundfold_sofo(slang_T *slang, char_u *inword, char_u *res)
res[ri] = NUL;
}
static void spell_soundfold_sal(slang_T *slang, char_u *inword, char_u *res)
{
salitem_T *smp;
char_u word[MAXWLEN];
char_u *s = inword;
char_u *t;
char_u *pf;
int i, j, z;
int reslen;
int n, k = 0;
int z0;
int k0;
int n0;
int c;
int pri;
int p0 = -333;
int c0;
// Remove accents, if wanted. We actually remove all non-word characters.
// But keep white space. We need a copy, the word may be changed here.
if (slang->sl_rem_accents) {
t = word;
while (*s != NUL) {
if (ascii_iswhite(*s)) {
*t++ = ' ';
s = skipwhite(s);
} else {
if (spell_iswordp_nmw(s, curwin))
*t++ = *s;
++s;
}
}
*t = NUL;
} else
STRLCPY(word, s, MAXWLEN);
smp = (salitem_T *)slang->sl_sal.ga_data;
// This comes from Aspell phonet.cpp. Converted from C++ to C.
// Changed to keep spaces.
i = reslen = z = 0;
while ((c = word[i]) != NUL) {
// Start with the first rule that has the character in the word.
n = slang->sl_sal_first[c];
z0 = 0;
if (n >= 0) {
// check all rules for the same letter
for (; (s = smp[n].sm_lead)[0] == c; ++n) {
// Quickly skip entries that don't match the word. Most
// entries are less then three chars, optimize for that.
k = smp[n].sm_leadlen;
if (k > 1) {
if (word[i + 1] != s[1])
continue;
if (k > 2) {
for (j = 2; j < k; ++j)
if (word[i + j] != s[j])
break;
if (j < k)
continue;
}
}
if ((pf = smp[n].sm_oneof) != NULL) {
// Check for match with one of the chars in "sm_oneof".
while (*pf != NUL && *pf != word[i + k])
++pf;
if (*pf == NUL)
continue;
++k;
}
s = smp[n].sm_rules;
pri = 5; // default priority
p0 = *s;
k0 = k;
while (*s == '-' && k > 1) {
k--;
s++;
}
if (*s == '<')
s++;
if (ascii_isdigit(*s)) {
// determine priority
pri = *s - '0';
s++;
}
if (*s == '^' && *(s + 1) == '^')
s++;
if (*s == NUL
|| (*s == '^'
&& (i == 0 || !(word[i - 1] == ' '
|| spell_iswordp(word + i - 1, curwin)))
&& (*(s + 1) != '$'
|| (!spell_iswordp(word + i + k0, curwin))))
|| (*s == '$' && i > 0
&& spell_iswordp(word + i - 1, curwin)
&& (!spell_iswordp(word + i + k0, curwin)))) {
// search for followup rules, if:
// followup and k > 1 and NO '-' in searchstring
c0 = word[i + k - 1];
n0 = slang->sl_sal_first[c0];
if (slang->sl_followup && k > 1 && n0 >= 0
&& p0 != '-' && word[i + k] != NUL) {
// test follow-up rule for "word[i + k]"
for (; (s = smp[n0].sm_lead)[0] == c0; ++n0) {
// Quickly skip entries that don't match the word.
k0 = smp[n0].sm_leadlen;
if (k0 > 1) {
if (word[i + k] != s[1])
continue;
if (k0 > 2) {
pf = word + i + k + 1;
for (j = 2; j < k0; ++j)
if (*pf++ != s[j])
break;
if (j < k0)
continue;
}
}
k0 += k - 1;
if ((pf = smp[n0].sm_oneof) != NULL) {
// Check for match with one of the chars in
// "sm_oneof".
while (*pf != NUL && *pf != word[i + k0])
++pf;
if (*pf == NUL)
continue;
++k0;
}
p0 = 5;
s = smp[n0].sm_rules;
while (*s == '-') {
// "k0" gets NOT reduced because
// "if (k0 == k)"
s++;
}
if (*s == '<')
s++;
if (ascii_isdigit(*s)) {
p0 = *s - '0';
s++;
}
if (*s == NUL
// *s == '^' cuts
|| (*s == '$'
&& !spell_iswordp(word + i + k0,
curwin))) {
if (k0 == k)
// this is just a piece of the string
continue;
if (p0 < pri)
// priority too low
continue;
// rule fits; stop search
break;
}
}
if (p0 >= pri && smp[n0].sm_lead[0] == c0)
continue;
}
// replace string
s = smp[n].sm_to;
if (s == NULL)
s = (char_u *)"";
pf = smp[n].sm_rules;
p0 = (vim_strchr(pf, '<') != NULL) ? 1 : 0;
if (p0 == 1 && z == 0) {
// rule with '<' is used
if (reslen > 0 && *s != NUL && (res[reslen - 1] == c
|| res[reslen - 1] == *s))
reslen--;
z0 = 1;
z = 1;
k0 = 0;
while (*s != NUL && word[i + k0] != NUL) {
word[i + k0] = *s;
k0++;
s++;
}
if (k > k0)
STRMOVE(word + i + k0, word + i + k);
// new "actual letter"
c = word[i];
} else {
// no '<' rule used
i += k - 1;
z = 0;
while (*s != NUL && s[1] != NUL && reslen < MAXWLEN) {
if (reslen == 0 || res[reslen - 1] != *s)
res[reslen++] = *s;
s++;
}
// new "actual letter"
c = *s;
if (strstr((char *)pf, "^^") != NULL) {
if (c != NUL)
res[reslen++] = c;
STRMOVE(word, word + i + 1);
i = 0;
z0 = 1;
}
}
break;
}
}
} else if (ascii_iswhite(c)) {
c = ' ';
k = 1;
}
if (z0 == 0) {
if (k && !p0 && reslen < MAXWLEN && c != NUL
&& (!slang->sl_collapse || reslen == 0
|| res[reslen - 1] != c))
// condense only double letters
res[reslen++] = c;
i++;
z = 0;
k = 0;
}
}
res[reslen] = NUL;
}
// Turn "inword" into its sound-a-like equivalent in "res[MAXWLEN]".
// Multi-byte version of spell_soundfold().
static void spell_soundfold_wsal(slang_T *slang, char_u *inword, char_u *res)