summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ex_docmd.c12
-rw-r--r--src/spell.c22
2 files changed, 26 insertions, 8 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index fa777b3c8..0f5360f71 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -10051,16 +10051,16 @@ ex_filetype(eap)
{
if (*arg == 'o' || !filetype_detect)
{
- cmd_runtime((char_u *)FILETYPE_FILE, TRUE);
+ source_runtime((char_u *)FILETYPE_FILE, TRUE);
filetype_detect = TRUE;
if (plugin)
{
- cmd_runtime((char_u *)FTPLUGIN_FILE, TRUE);
+ source_runtime((char_u *)FTPLUGIN_FILE, TRUE);
filetype_plugin = TRUE;
}
if (indent)
{
- cmd_runtime((char_u *)INDENT_FILE, TRUE);
+ source_runtime((char_u *)INDENT_FILE, TRUE);
filetype_indent = TRUE;
}
}
@@ -10076,18 +10076,18 @@ ex_filetype(eap)
{
if (plugin)
{
- cmd_runtime((char_u *)FTPLUGOF_FILE, TRUE);
+ source_runtime((char_u *)FTPLUGOF_FILE, TRUE);
filetype_plugin = FALSE;
}
if (indent)
{
- cmd_runtime((char_u *)INDOFF_FILE, TRUE);
+ source_runtime((char_u *)INDOFF_FILE, TRUE);
filetype_indent = FALSE;
}
}
else
{
- cmd_runtime((char_u *)FTOFF_FILE, TRUE);
+ source_runtime((char_u *)FTOFF_FILE, TRUE);
filetype_detect = FALSE;
}
}
diff --git a/src/spell.c b/src/spell.c
index 7513d0a73..10390ece6 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -474,8 +474,10 @@ typedef struct suggest_S
#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 @@ suggest_try_change(su)
+ 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 @@ suggest_try_change(su)
{
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