mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
spell: spell_soundfold_sal() is dead code
This commit is contained in:
parent
1042338c00
commit
a7aa1fc87d
242
src/nvim/spell.c
242
src/nvim/spell.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user