updated for version 7.0129
diff --git a/src/spell.c b/src/spell.c
index 7513d0a..10390ec 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -474,8 +474,10 @@
#define SCORE_REP 87 /* REP replacement */
#define SCORE_SUBST 93 /* substitute a character */
#define SCORE_SIMILAR 33 /* substitute a similar character */
+#define SCORE_SUBCOMP 33 /* substitute a composing character */
#define SCORE_DEL 94 /* delete a character */
#define SCORE_DELDUP 64 /* delete a duplicated character */
+#define SCORE_DELCOMP 28 /* delete a composing character */
#define SCORE_INS 96 /* insert a character */
#define SCORE_INSDUP 66 /* insert a duplicate character */
#define SCORE_INSCOMP 30 /* insert a composing character */
@@ -7740,9 +7742,23 @@
+ MB_BYTE2LEN(
fword[sp->ts_fcharstart]);
+ /* For changing a composing character
+ * adjust the score from SCORE_SUBST to
+ * SCORE_SUBCOMP. */
+ if (enc_utf8
+ && utf_iscomposing(
+ mb_ptr2char(tword
+ + sp->ts_twordlen
+ - sp->ts_tcharlen))
+ && utf_iscomposing(
+ mb_ptr2char(fword
+ + sp->ts_fcharstart)))
+ sp->ts_score -=
+ SCORE_SUBST - SCORE_SUBCOMP;
+
/* For a similar character adjust score
* from SCORE_SUBST to SCORE_SIMILAR. */
- if (lp->lp_slang->sl_has_map
+ else if (lp->lp_slang->sl_has_map
&& similar_chars(lp->lp_slang,
mb_ptr2char(tword
+ sp->ts_twordlen
@@ -7825,7 +7841,9 @@
{
c = mb_ptr2char(fword + sp->ts_fidx);
stack[depth].ts_fidx += MB_BYTE2LEN(fword[sp->ts_fidx]);
- if (c == mb_ptr2char(fword + stack[depth].ts_fidx))
+ if (enc_utf8 && utf_iscomposing(c))
+ stack[depth].ts_score -= SCORE_DEL - SCORE_DELCOMP;
+ else if (c == mb_ptr2char(fword + stack[depth].ts_fidx))
stack[depth].ts_score -= SCORE_DEL - SCORE_DELDUP;
}
else