annotate src/mbyte.c @ 16150:b23048205589 v8.1.1080

patch 8.1.1080: when a screendump test fails, moving the file is a hassle commit https://github.com/vim/vim/commit/ef7f0e367eeaf6fb31b1caa0e3de1a4b07e86af3 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 30 15:59:51 2019 +0100 patch 8.1.1080: when a screendump test fails, moving the file is a hassle Problem: When a screendump test fails, moving the file is a hassle. Solution: Instead of appending ".failed" to the file name, keep the same file name but put the screendump in the "failed" directory. Then the file name only needs to be typed once when moving a screendump.
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Mar 2019 16:00:06 +0100
parents 473fbdb2717c
children 304283d2a772
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9495
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 * Multibyte extensions partly by Sung-Hoon Baek
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * mbyte.c: Code specifically for handling multi-byte characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 * The encoding used in the core is set with 'encoding'. When 'encoding' is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 * changed, the following four variables are set (for speed).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 * Currently these types of character encodings are supported:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 * "enc_dbcs" When non-zero it tells the type of double byte character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 * encoding (Chinese, Korean, Japanese, etc.).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 * The cell width on the display is equal to the number of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 * bytes. (exception: DBCS_JPNU with first byte 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 * Recognizing the first or second byte is difficult, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 * requires checking a byte sequence from the start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 * "enc_utf8" When TRUE use Unicode characters in UTF-8 encoding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 * The cell width on the display needs to be determined from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 * the character value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 * Recognizing bytes is easy: 0xxx.xxxx is a single-byte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 * char, 10xx.xxxx is a trailing byte, 11xx.xxxx is a leading
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 * byte of a multi-byte character.
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
29 * To make things complicated, up to six composing characters
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 * are allowed. These are drawn on top of the first char.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 * For most editing the sequence of bytes with composing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 * characters included is considered to be one character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 * "enc_unicode" When 2 use 16-bit Unicode characters (or UTF-16).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 * When 4 use 32-but Unicode characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 * Internally characters are stored in UTF-8 encoding to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 * avoid NUL bytes. Conversion happens when doing I/O.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 * "enc_utf8" will also be TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 * "has_mbyte" is set when "enc_dbcs" or "enc_utf8" is non-zero.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 * If none of these is TRUE, 8-bit bytes are used for a character. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 * encoding isn't currently specified (TODO).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 * 'encoding' specifies the encoding used in the core. This is in registers,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 * text manipulation, buffers, etc. Conversion has to be done when characters
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 * in another encoding are received or send:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 * clipboard
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 * ^
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 * | (2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 * V
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 * +---------------+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 * (1) | | (3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 * keyboard ----->| core |-----> display
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 * | |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 * +---------------+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 * ^
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 * | (4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 * V
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 * file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 * (1) Typed characters arrive in the current locale. Conversion is to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 * done when 'encoding' is different from 'termencoding'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 * (2) Text will be made available with the encoding specified with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 * 'encoding'. If this is not sufficient, system-specific conversion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 * might be required.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 * (3) For the GUI the correct font must be selected, no conversion done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 * Otherwise, conversion is to be done when 'encoding' differs from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 * 'termencoding'. (Different in the GTK+ 2 port -- 'termencoding'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * is always used for both input and output and must always be set to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 * "utf-8". gui_mch_init() does this automatically.)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * (4) The encoding of the file is specified with 'fileencoding'. Conversion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 * is to be done when it's different from 'encoding'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 * The viminfo file is a special case: Only text is converted, not file names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 * Vim scripts may contain an ":encoding" command. This has an effect for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 * some commands, like ":menutrans"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 #ifdef WIN32UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 # ifndef WIN32_LEAN_AND_MEAN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 # define WIN32_LEAN_AND_MEAN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 # endif
5602
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
86 # if defined(FEAT_GUI) || defined(FEAT_XCLIPBOARD)
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
87 # include <X11/Xwindows.h>
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
88 # define WINBYTE wBYTE
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
89 # else
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
90 # include <windows.h>
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
91 # define WINBYTE BYTE
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
92 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 # ifdef WIN32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 # undef WIN32 /* Some windows.h define WIN32, we don't want that here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 # endif
5602
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
96 #else
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
97 # define WINBYTE BYTE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
100 #if (defined(MSWIN) || defined(WIN32UNIX)) && !defined(__MINGW32__)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 # include <winnls.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 #ifdef FEAT_GUI_X11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 # include <X11/Intrinsic.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 #ifdef X_LOCALE
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
108 # include <X11/Xlocale.h>
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
109 # if !defined(HAVE_MBLEN) && !defined(mblen)
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
110 # define mblen _Xmblen
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
111 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
114 #if defined(FEAT_GUI_GTK) && defined(FEAT_XIM)
8218
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
115 # if GTK_CHECK_VERSION(3,0,0)
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
116 # include <gdk/gdkkeysyms-compat.h>
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
117 # else
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
118 # include <gdk/gdkkeysyms.h>
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
119 # endif
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
120 # ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 # include <gdk/gdkwin32.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 # include <gdk/gdkx.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 #ifdef HAVE_WCHAR_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 # include <wchar.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 #if 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 /* This has been disabled, because several people reported problems with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 * wcwidth() and iswprint() library functions, esp. for Hebrew. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 # ifdef __STDC_ISO_10646__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 # define USE_WCHAR_FUNCTIONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
139 static int dbcs_char2len(int c);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
140 static int dbcs_char2bytes(int c, char_u *buf);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
141 static int dbcs_ptr2len(char_u *p);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
142 static int dbcs_ptr2len_len(char_u *p, int size);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
143 static int utf_ptr2cells_len(char_u *p, int size);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
144 static int dbcs_char2cells(int c);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
145 static int dbcs_ptr2cells_len(char_u *p, int size);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
146 static int dbcs_ptr2char(char_u *p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
148 /*
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
149 * Lookup table to quickly get the length in bytes of a UTF-8 character from
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
150 * the first byte of a UTF-8 string.
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
151 * Bytes which are illegal when used as the first byte have a 1.
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
152 * The NUL byte has length 1.
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
153 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 static char utf8len_tab[256] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
160 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
161 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 /*
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
167 * Like utf8len_tab above, but using a zero for illegal lead bytes.
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
168 */
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
169 static char utf8len_tab_zero[256] =
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
170 {
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
171 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
172 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
173 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
174 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
175 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
176 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
177 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
178 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,0,0,
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
179 };
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
180
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
181 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 * XIM often causes trouble. Define XIM_DEBUG to get a log of XIM callbacks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 * in the "xim.log" file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 /* #define XIM_DEBUG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 xim_log(char *s, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 va_list arglist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 static FILE *fd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 if (fd == (FILE *)-1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 if (fd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 {
531
da9142bd190a updated for version 7.0149
vimboss
parents: 502
diff changeset
197 fd = mch_fopen("xim.log", "w");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 if (fd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
200 emsg("Cannot open xim.log");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 fd = (FILE *)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 va_start(arglist, s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 vfprintf(fd, s, arglist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 va_end(arglist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
212
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 * Canonical encoding names and their properties.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 * "iso-8859-n" is handled by enc_canonize() directly.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 static struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 { char *name; int prop; int codepage;}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 enc_canon_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 #define IDX_LATIN_1 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 {"latin1", ENC_8BIT + ENC_LATIN1, 1252},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 #define IDX_ISO_2 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 {"iso-8859-2", ENC_8BIT, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 #define IDX_ISO_3 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 {"iso-8859-3", ENC_8BIT, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 #define IDX_ISO_4 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 {"iso-8859-4", ENC_8BIT, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 #define IDX_ISO_5 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 {"iso-8859-5", ENC_8BIT, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 #define IDX_ISO_6 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 {"iso-8859-6", ENC_8BIT, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 #define IDX_ISO_7 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 {"iso-8859-7", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
235 #define IDX_ISO_8 7
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 {"iso-8859-8", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
237 #define IDX_ISO_9 8
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 {"iso-8859-9", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
239 #define IDX_ISO_10 9
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 {"iso-8859-10", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
241 #define IDX_ISO_11 10
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 {"iso-8859-11", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
243 #define IDX_ISO_13 11
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 {"iso-8859-13", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
245 #define IDX_ISO_14 12
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 {"iso-8859-14", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
247 #define IDX_ISO_15 13
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
248 {"iso-8859-15", ENC_8BIT + ENC_LATIN9, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
249 #define IDX_KOI8_R 14
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 {"koi8-r", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
251 #define IDX_KOI8_U 15
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 {"koi8-u", ENC_8BIT, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
253 #define IDX_UTF8 16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 {"utf-8", ENC_UNICODE, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
255 #define IDX_UCS2 17
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 {"ucs-2", ENC_UNICODE + ENC_ENDIAN_B + ENC_2BYTE, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
257 #define IDX_UCS2LE 18
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 {"ucs-2le", ENC_UNICODE + ENC_ENDIAN_L + ENC_2BYTE, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
259 #define IDX_UTF16 19
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 {"utf-16", ENC_UNICODE + ENC_ENDIAN_B + ENC_2WORD, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
261 #define IDX_UTF16LE 20
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 {"utf-16le", ENC_UNICODE + ENC_ENDIAN_L + ENC_2WORD, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
263 #define IDX_UCS4 21
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 {"ucs-4", ENC_UNICODE + ENC_ENDIAN_B + ENC_4BYTE, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
265 #define IDX_UCS4LE 22
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 {"ucs-4le", ENC_UNICODE + ENC_ENDIAN_L + ENC_4BYTE, 0},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
267
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
268 /* For debugging DBCS encoding on Unix. */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
269 #define IDX_DEBUG 23
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 {"debug", ENC_DBCS, DBCS_DEBUG},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
271 #define IDX_EUC_JP 24
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 {"euc-jp", ENC_DBCS, DBCS_JPNU},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
273 #define IDX_SJIS 25
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 {"sjis", ENC_DBCS, DBCS_JPN},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
275 #define IDX_EUC_KR 26
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 {"euc-kr", ENC_DBCS, DBCS_KORU},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
277 #define IDX_EUC_CN 27
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 {"euc-cn", ENC_DBCS, DBCS_CHSU},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
279 #define IDX_EUC_TW 28
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 {"euc-tw", ENC_DBCS, DBCS_CHTU},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
281 #define IDX_BIG5 29
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 {"big5", ENC_DBCS, DBCS_CHT},
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
283
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
284 /* MS-DOS and MS-Windows codepages are included here, so that they can be
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
285 * used on Unix too. Most of them are similar to ISO-8859 encodings, but
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
286 * not exactly the same. */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
287 #define IDX_CP437 30
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
288 {"cp437", ENC_8BIT, 437}, /* like iso-8859-1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
289 #define IDX_CP737 31
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
290 {"cp737", ENC_8BIT, 737}, /* like iso-8859-7 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
291 #define IDX_CP775 32
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
292 {"cp775", ENC_8BIT, 775}, /* Baltic */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
293 #define IDX_CP850 33
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
294 {"cp850", ENC_8BIT, 850}, /* like iso-8859-4 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
295 #define IDX_CP852 34
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
296 {"cp852", ENC_8BIT, 852}, /* like iso-8859-1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
297 #define IDX_CP855 35
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
298 {"cp855", ENC_8BIT, 855}, /* like iso-8859-2 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
299 #define IDX_CP857 36
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
300 {"cp857", ENC_8BIT, 857}, /* like iso-8859-5 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
301 #define IDX_CP860 37
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
302 {"cp860", ENC_8BIT, 860}, /* like iso-8859-9 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
303 #define IDX_CP861 38
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
304 {"cp861", ENC_8BIT, 861}, /* like iso-8859-1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
305 #define IDX_CP862 39
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
306 {"cp862", ENC_8BIT, 862}, /* like iso-8859-1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
307 #define IDX_CP863 40
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
308 {"cp863", ENC_8BIT, 863}, /* like iso-8859-8 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
309 #define IDX_CP865 41
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
310 {"cp865", ENC_8BIT, 865}, /* like iso-8859-1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
311 #define IDX_CP866 42
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
312 {"cp866", ENC_8BIT, 866}, /* like iso-8859-5 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
313 #define IDX_CP869 43
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
314 {"cp869", ENC_8BIT, 869}, /* like iso-8859-7 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
315 #define IDX_CP874 44
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
316 {"cp874", ENC_8BIT, 874}, /* Thai */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
317 #define IDX_CP932 45
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
318 {"cp932", ENC_DBCS, DBCS_JPN},
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
319 #define IDX_CP936 46
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
320 {"cp936", ENC_DBCS, DBCS_CHS},
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
321 #define IDX_CP949 47
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
322 {"cp949", ENC_DBCS, DBCS_KOR},
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
323 #define IDX_CP950 48
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
324 {"cp950", ENC_DBCS, DBCS_CHT},
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
325 #define IDX_CP1250 49
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
326 {"cp1250", ENC_8BIT, 1250}, /* Czech, Polish, etc. */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
327 #define IDX_CP1251 50
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
328 {"cp1251", ENC_8BIT, 1251}, /* Cyrillic */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
329 /* cp1252 is considered to be equal to latin1 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
330 #define IDX_CP1253 51
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
331 {"cp1253", ENC_8BIT, 1253}, /* Greek */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
332 #define IDX_CP1254 52
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
333 {"cp1254", ENC_8BIT, 1254}, /* Turkish */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
334 #define IDX_CP1255 53
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
335 {"cp1255", ENC_8BIT, 1255}, /* Hebrew */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
336 #define IDX_CP1256 54
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
337 {"cp1256", ENC_8BIT, 1256}, /* Arabic */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
338 #define IDX_CP1257 55
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
339 {"cp1257", ENC_8BIT, 1257}, /* Baltic */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
340 #define IDX_CP1258 56
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
341 {"cp1258", ENC_8BIT, 1258}, /* Vietnamese */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
342
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
343 #define IDX_MACROMAN 57
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 344
diff changeset
344 {"macroman", ENC_8BIT + ENC_MACROMAN, 0}, /* Mac OS */
890
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
345 #define IDX_DECMCS 58
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
346 {"dec-mcs", ENC_8BIT, 0}, /* DEC MCS */
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
347 #define IDX_HPROMAN8 59
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
348 {"hp-roman8", ENC_8BIT, 0}, /* HP Roman8 */
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
349 #define IDX_COUNT 60
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 * Aliases for encoding names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 static struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 { char *name; int canon;}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 enc_alias_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 {"ansi", IDX_LATIN_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 {"iso-8859-1", IDX_LATIN_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 {"latin2", IDX_ISO_2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 {"latin3", IDX_ISO_3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 {"latin4", IDX_ISO_4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 {"cyrillic", IDX_ISO_5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 {"arabic", IDX_ISO_6},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 {"greek", IDX_ISO_7},
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
367 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 {"hebrew", IDX_CP1255},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 {"hebrew", IDX_ISO_8},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 {"latin5", IDX_ISO_9},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 {"turkish", IDX_ISO_9}, /* ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 {"latin6", IDX_ISO_10},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 {"nordic", IDX_ISO_10}, /* ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 {"thai", IDX_ISO_11}, /* ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 {"latin7", IDX_ISO_13},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 {"latin8", IDX_ISO_14},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 {"latin9", IDX_ISO_15},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 {"utf8", IDX_UTF8},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 {"unicode", IDX_UCS2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 {"ucs2", IDX_UCS2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 {"ucs2be", IDX_UCS2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 {"ucs-2be", IDX_UCS2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 {"ucs2le", IDX_UCS2LE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 {"utf16", IDX_UTF16},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 {"utf16be", IDX_UTF16},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 {"utf-16be", IDX_UTF16},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 {"utf16le", IDX_UTF16LE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 {"ucs4", IDX_UCS4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 {"ucs4be", IDX_UCS4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 {"ucs-4be", IDX_UCS4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 {"ucs4le", IDX_UCS4LE},
1540
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
394 {"utf32", IDX_UCS4},
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
395 {"utf-32", IDX_UCS4},
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
396 {"utf32be", IDX_UCS4},
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
397 {"utf-32be", IDX_UCS4},
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
398 {"utf32le", IDX_UCS4LE},
ca5b52e99385 updated for version 7.1-255
vimboss
parents: 1495
diff changeset
399 {"utf-32le", IDX_UCS4LE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 {"932", IDX_CP932},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 {"949", IDX_CP949},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 {"936", IDX_CP936},
932
c9ddc2338f41 updated for version 7.0-058
vimboss
parents: 890
diff changeset
403 {"gbk", IDX_CP936},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 {"950", IDX_CP950},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 {"eucjp", IDX_EUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 {"unix-jis", IDX_EUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 {"ujis", IDX_EUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 {"shift-jis", IDX_SJIS},
6377
392dad030b8d updated for version 7.4.520
Bram Moolenaar <bram@vim.org>
parents: 6218
diff changeset
409 {"pck", IDX_SJIS}, /* Sun: PCK */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 {"euckr", IDX_EUC_KR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 {"5601", IDX_EUC_KR}, /* Sun: KS C 5601 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 {"euccn", IDX_EUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 {"gb2312", IDX_EUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 {"euctw", IDX_EUC_TW},
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
415 #if defined(MSWIN) || defined(WIN32UNIX) || defined(MACOS_X)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 {"japan", IDX_CP932},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 {"korea", IDX_CP949},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 {"prc", IDX_CP936},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 {"chinese", IDX_CP936},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 {"taiwan", IDX_CP950},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 {"big5", IDX_CP950},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 {"japan", IDX_EUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 {"korea", IDX_EUC_KR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 {"prc", IDX_EUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 {"chinese", IDX_EUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 {"taiwan", IDX_EUC_TW},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 {"cp950", IDX_BIG5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 {"950", IDX_BIG5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 {"mac", IDX_MACROMAN},
890
ffa17de19445 updated for version 7.0-016
vimboss
parents: 856
diff changeset
432 {"mac-roman", IDX_MACROMAN},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 {NULL, 0}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 #ifndef CP_UTF8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 # define CP_UTF8 65001 /* magic number from winnls.h */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 * Find encoding "name" in the list of canonical encoding names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 * Returns -1 if not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
445 enc_canon_search(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 for (i = 0; i < IDX_COUNT; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 if (STRCMP(name, enc_canon_table[i].name) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 * Find canonical encoding "name" in the list and return its properties.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 * Returns 0 if not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
461 enc_canon_props(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 i = enc_canon_search(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 if (i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 return enc_canon_table[i].prop;
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
468 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 if (name[0] == 'c' && name[1] == 'p' && VIM_ISDIGIT(name[2]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 CPINFO cpinfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 /* Get info on this codepage to find out what it is. */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
474 if (GetCPInfo(atoi((char *)name + 2), &cpinfo) != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 if (cpinfo.MaxCharSize == 1) /* some single-byte encoding */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 return ENC_8BIT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 if (cpinfo.MaxCharSize == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 && (cpinfo.LeadByte[0] != 0 || cpinfo.LeadByte[1] != 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 /* must be a DBCS encoding */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 return ENC_DBCS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 if (STRNCMP(name, "2byte-", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 return ENC_DBCS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 if (STRNCMP(name, "8bit-", 5) == 0 || STRNCMP(name, "iso-8859-", 9) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 return ENC_8BIT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 * Set up for using multi-byte characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 * Called in three cases:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 * - by main() to initialize (p_enc == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 * - by set_init_1() after 'encoding' was set to its default.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 * - by do_set() when 'encoding' has been set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 * p_enc must have been passed through enc_canonize() already.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 * Sets the "enc_unicode", "enc_utf8", "enc_dbcs" and "has_mbyte" flags.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 * Fills mb_bytelen_tab[] and returns NULL when there are no problems.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 * When there is something wrong: Returns an error message and doesn't change
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 * anything.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
505 char *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
506 mb_init(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 int enc_dbcs_new = 0;
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
512 #if defined(USE_ICONV) && !defined(MSWIN) && !defined(WIN32UNIX) \
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
513 && !defined(MACOS_CONVERT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 # define LEN_FROM_CONV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 vimconv_T vimconv;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 if (p_enc == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 /* Just starting up: set the whole table to one's. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 for (i = 0; i < 256; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 mb_bytelen_tab[i] = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 input_conv.vc_type = CONV_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 input_conv.vc_factor = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 output_conv.vc_type = CONV_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
530 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 if (p_enc[0] == 'c' && p_enc[1] == 'p' && VIM_ISDIGIT(p_enc[2]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 CPINFO cpinfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 /* Get info on this codepage to find out what it is. */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
536 if (GetCPInfo(atoi((char *)p_enc + 2), &cpinfo) != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 if (cpinfo.MaxCharSize == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 /* some single-byte encoding */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 enc_unicode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 enc_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 else if (cpinfo.MaxCharSize == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 && (cpinfo.LeadByte[0] != 0 || cpinfo.LeadByte[1] != 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 /* must be a DBCS encoding, check below */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
548 enc_dbcs_new = atoi((char *)p_enc + 2);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 goto codepage_invalid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 else if (GetLastError() == ERROR_INVALID_PARAMETER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 codepage_invalid:
15474
79e3dcc5aa50 patch 8.1.0745: compiler warnings for signed/unsigned string
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
556 return N_("E543: Not a valid codepage");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 else if (STRNCMP(p_enc, "8bit-", 5) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 || STRNCMP(p_enc, "iso-8859-", 9) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 /* Accept any "8bit-" or "iso-8859-" name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 enc_unicode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 enc_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 else if (STRNCMP(p_enc, "2byte-", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
569 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 /* Windows: accept only valid codepage numbers, check below. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 if (p_enc[6] != 'c' || p_enc[7] != 'p'
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
572 || (enc_dbcs_new = atoi((char *)p_enc + 8)) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 return e_invarg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 /* Unix: accept any "2byte-" name, assume current locale. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 enc_dbcs_new = DBCS_2BYTE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 else if ((idx = enc_canon_search(p_enc)) >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 i = enc_canon_table[idx].prop;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 if (i & ENC_UNICODE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 /* Unicode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 enc_utf8 = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 if (i & (ENC_2BYTE | ENC_2WORD))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 enc_unicode = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 else if (i & ENC_4BYTE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 enc_unicode = 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 enc_unicode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 else if (i & ENC_DBCS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 /* 2byte, handle below */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 enc_dbcs_new = enc_canon_table[idx].codepage;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 /* Must be 8-bit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 enc_unicode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 enc_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 else /* Don't know what encoding this is, reject it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 return e_invarg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 if (enc_dbcs_new != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
610 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 /* Check if the DBCS code page is OK. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 if (!IsValidCodePage(enc_dbcs_new))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 goto codepage_invalid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 enc_unicode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 enc_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 enc_dbcs = enc_dbcs_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 has_mbyte = (enc_dbcs != 0 || enc_utf8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
621 #if defined(MSWIN) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 enc_codepage = encname2codepage(p_enc);
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
623 enc_latin9 = (STRCMP(p_enc, "iso-8859-15") == 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625
492
81c06952fb1d updated for version 7.0135
vimboss
parents: 481
diff changeset
626 /* Detect an encoding that uses latin1 characters. */
81c06952fb1d updated for version 7.0135
vimboss
parents: 481
diff changeset
627 enc_latin1like = (enc_utf8 || STRCMP(p_enc, "latin1") == 0
81c06952fb1d updated for version 7.0135
vimboss
parents: 481
diff changeset
628 || STRCMP(p_enc, "iso-8859-15") == 0);
81c06952fb1d updated for version 7.0135
vimboss
parents: 481
diff changeset
629
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 * Set the function pointers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
635 mb_ptr2len = utfc_ptr2len;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
636 mb_ptr2len_len = utfc_ptr2len_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 mb_char2len = utf_char2len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 mb_char2bytes = utf_char2bytes;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 mb_ptr2cells = utf_ptr2cells;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
640 mb_ptr2cells_len = utf_ptr2cells_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 mb_char2cells = utf_char2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 mb_off2cells = utf_off2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 mb_ptr2char = utf_ptr2char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 mb_head_off = utf_head_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 else if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
648 mb_ptr2len = dbcs_ptr2len;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
649 mb_ptr2len_len = dbcs_ptr2len_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 mb_char2len = dbcs_char2len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 mb_char2bytes = dbcs_char2bytes;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 mb_ptr2cells = dbcs_ptr2cells;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
653 mb_ptr2cells_len = dbcs_ptr2cells_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 mb_char2cells = dbcs_char2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 mb_off2cells = dbcs_off2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 mb_ptr2char = dbcs_ptr2char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 mb_head_off = dbcs_head_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
661 mb_ptr2len = latin_ptr2len;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
662 mb_ptr2len_len = latin_ptr2len_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 mb_char2len = latin_char2len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 mb_char2bytes = latin_char2bytes;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 mb_ptr2cells = latin_ptr2cells;
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
666 mb_ptr2cells_len = latin_ptr2cells_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 mb_char2cells = latin_char2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 mb_off2cells = latin_off2cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 mb_ptr2char = latin_ptr2char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 mb_head_off = latin_head_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 * Fill the mb_bytelen_tab[] for MB_BYTE2LEN().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 #ifdef LEN_FROM_CONV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 /* When 'encoding' is different from the current locale mblen() won't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 * work. Use conversion to "utf-8" instead. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 vimconv.vc_type = CONV_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 if (enc_dbcs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 p = enc_locale();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 if (p == NULL || STRCMP(p, p_enc) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 convert_setup(&vimconv, p_enc, (char_u *)"utf-8");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 vimconv.vc_fail = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 for (i = 0; i < 256; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 /* Our own function to reliably check the length of UTF-8 characters,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 * independent of mblen(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 n = utf8len_tab[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 else if (enc_dbcs == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
702 #if defined(MSWIN) || defined(WIN32UNIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 /* enc_dbcs is set by setting 'fileencoding'. It becomes a Windows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 * CodePage identifier, which we can pass directly in to Windows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 * API */
5602
8507bf8874d8 updated for version 7.4.148
Bram Moolenaar <bram@vim.org>
parents: 5477
diff changeset
706 n = IsDBCSLeadByteEx(enc_dbcs, (WINBYTE)i) ? 2 : 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 #else
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
708 # if defined(__amigaos4__) || defined(__ANDROID__) || \
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
709 !(defined(HAVE_MBLEN) || defined(X_LOCALE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 * if mblen() is not available, character which MSB is turned on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 * are treated as leading byte character. (note : This assumption
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 * is not always true.)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 n = (i & 0x80) ? 2 : 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 # else
3549
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3402
diff changeset
717 char buf[MB_MAXBYTES + 1];
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
718
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 if (i == NUL) /* just in case mblen() can't handle "" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 buf[0] = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 buf[1] = 0;
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
725 # ifdef LEN_FROM_CONV
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 if (vimconv.vc_type != CONV_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 * string_convert() should fail when converting the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 * byte of a double-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 p = string_convert(&vimconv, (char_u *)buf, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 n = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 else
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
742 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 * mblen() should return -1 for invalid (means the leading
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 * multibyte) character. However there are some platforms
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 * where mblen() returns 0 for invalid character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 * Therefore, following condition includes 0.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 */
14730
193471015e1a patch 8.1.0377: xdiff doesn't use the Vim memory allocation functions
Christian Brabandt <cb@256bit.org>
parents: 14712
diff changeset
750 vim_ignored = mblen(NULL, 0); // First reset the state.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 if (mblen(buf, (size_t)1) <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 n = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 mb_bytelen_tab[i] = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 #ifdef LEN_FROM_CONV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 convert_setup(&vimconv, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 /* The cell width depends on the type of multi-byte characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 (void)init_chartab();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 /* When enc_utf8 is set or reset, (de)allocate ScreenLinesUC[] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 screenalloc(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 /* When using Unicode, set default for 'fileencodings'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 if (enc_utf8 && !option_was_set((char_u *)"fencs"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 set_string_option_direct((char_u *)"fencs", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 681
diff changeset
777 (char_u *)"ucs-bom,utf-8,default,latin1", OPT_FREE, 0);
07d199fe02ed updated for version 7.0209
vimboss
parents: 681
diff changeset
778
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 #if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && defined(FEAT_GETTEXT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 /* GNU gettext 0.10.37 supports this feature: set the codeset used for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 * translated messages independently from the current locale. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 (void)bind_textdomain_codeset(VIMPACKAGE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 enc_utf8 ? "utf-8" : (char *)p_enc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
786 #ifdef MSWIN
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
787 /* When changing 'encoding' while starting up, then convert the command
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
788 * line arguments from the active codepage to 'encoding'. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
789 if (starting != 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
790 fix_arg_enc();
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
791 #endif
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 18
diff changeset
792
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 /* Fire an autocommand to let people do custom font setup. This must be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 * after Vim has been setup for the new encoding. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 apply_autocmds(EVENT_ENCODINGCHANGED, NULL, (char_u *)"", FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796
740
614e9af68eaa updated for version 7.0222
vimboss
parents: 714
diff changeset
797 #ifdef FEAT_SPELL
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 227
diff changeset
798 /* Need to reload spell dictionaries */
4707450c2b33 updated for version 7.0066
vimboss
parents: 227
diff changeset
799 spell_reload();
4707450c2b33 updated for version 7.0066
vimboss
parents: 227
diff changeset
800 #endif
4707450c2b33 updated for version 7.0066
vimboss
parents: 227
diff changeset
801
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 * Return the size of the BOM for the current buffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 * 0 - no BOM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 * 2 - UCS-2 or UTF-16 BOM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 * 4 - UCS-4 BOM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 * 3 - UTF-8 BOM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
813 bomb_size(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 if (curbuf->b_p_bomb && !curbuf->b_p_bin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 if (*curbuf->b_p_fenc == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 if (enc_unicode != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 n = enc_unicode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 n = 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 else if (STRCMP(curbuf->b_p_fenc, "utf-8") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 n = 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 else if (STRNCMP(curbuf->b_p_fenc, "ucs-2", 5) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 || STRNCMP(curbuf->b_p_fenc, "utf-16", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 n = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 else if (STRNCMP(curbuf->b_p_fenc, "ucs-4", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 n = 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 return n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839
15555
d89c5b339c2a patch 8.1.0785: depending on the configuration some functions are unused
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
840 #if defined(FEAT_QUICKFIX) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 /*
3002
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
842 * Remove all BOM from "s" by moving remaining text.
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
843 */
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
844 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
845 remove_bom(char_u *s)
3002
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
846 {
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
847 if (enc_utf8)
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
848 {
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
849 char_u *p = s;
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
850
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
851 while ((p = vim_strbyte(p, 0xef)) != NULL)
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
852 {
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
853 if (p[1] == 0xbb && p[2] == 0xbf)
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
854 STRMOVE(p, p + 3);
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
855 else
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
856 ++p;
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
857 }
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
858 }
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
859 }
15555
d89c5b339c2a patch 8.1.0785: depending on the configuration some functions are unused
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
860 #endif
3002
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
861
7d4e5e31d8c1 updated for version 7.3.273
Bram Moolenaar <bram@vim.org>
parents: 2988
diff changeset
862 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 * Get class of pointer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 * 0 for blank or NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 * 1 for punctuation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 * 2 for an (ASCII) word character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 * >2 for other word characters
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
870 mb_get_class(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 {
4069
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
872 return mb_get_class_buf(p, curbuf);
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
873 }
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
874
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
875 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
876 mb_get_class_buf(char_u *p, buf_T *buf)
4069
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
877 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 if (MB_BYTE2LEN(p[0]) == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 {
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
880 if (p[0] == NUL || VIM_ISWHITE(p[0]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 return 0;
4069
43c15135926f updated for version 7.3.789
Bram Moolenaar <bram@vim.org>
parents: 4047
diff changeset
882 if (vim_iswordc_buf(p[0], buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 if (enc_dbcs != 0 && p[0] != NUL && p[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 return dbcs_class(p[0], p[1]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 if (enc_utf8)
10724
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
889 return utf_class_buf(utf_ptr2char(p), buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 * Get class of a double-byte character. This always returns 3 or bigger.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 * TODO: Should return 1 for punctuation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
898 dbcs_class(unsigned lead, unsigned trail)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 switch (enc_dbcs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 {
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4168
diff changeset
902 /* please add classify routine for your language in here */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 case DBCS_JPNU: /* ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 case DBCS_JPN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 /* JIS code classification */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 unsigned char lb = lead;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 unsigned char tb = trail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 /* convert process code to JIS */
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
912 # if defined(MSWIN) || defined(WIN32UNIX) || defined(MACOS_X)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 /* process code is SJIS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 if (lb <= 0x9f)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 lb = (lb - 0x81) * 2 + 0x21;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 lb = (lb - 0xc1) * 2 + 0x21;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 if (tb <= 0x7e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 tb -= 0x1f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 else if (tb <= 0x9e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 tb -= 0x20;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 tb -= 0x7e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 lb += 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 * XXX: Code page identification can not use with all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 * system! So, some other encoding information
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 * will be needed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 * In japanese: SJIS,EUC,UNICODE,(JIS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 * Note that JIS-code system don't use as
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 * process code in most system because it uses
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 * escape sequences(JIS is context depend encoding).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 /* assume process code is JAPANESE-EUC */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 lb &= 0x7f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 tb &= 0x7f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 /* exceptions */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 switch (lb << 8 | tb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 case 0x2121: /* ZENKAKU space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 return 0;
5477
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
946 case 0x2122: /* TOU-TEN (Japanese comma) */
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
947 case 0x2123: /* KU-TEN (Japanese period) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 case 0x2124: /* ZENKAKU comma */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 case 0x2125: /* ZENKAKU period */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 case 0x213c: /* prolongedsound handled as KATAKANA */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 return 13;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 /* sieved by KU code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 switch (lb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 case 0x21:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 case 0x22:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 /* special symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 return 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 case 0x23:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 /* alpha-numeric */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 return 11;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 case 0x24:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 /* hiragana */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 return 12;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 case 0x25:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 /* katakana */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 return 13;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 case 0x26:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 /* greek */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 return 14;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 case 0x27:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 /* russian */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 return 15;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 case 0x28:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 /* lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 return 16;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 /* kanji */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 return 17;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 case DBCS_KORU: /* ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 case DBCS_KOR:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 /* KS code classification */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 unsigned char c1 = lead;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 unsigned char c2 = trail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 * 20 : Hangul
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 * 21 : Hanja
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 * 22 : Symbols
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 * 23 : Alpha-numeric/Roman Letter (Full width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 * 24 : Hangul Letter(Alphabet)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 * 25 : Roman Numeral/Greek Letter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 * 26 : Box Drawings
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 * 27 : Unit Symbols
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 * 28 : Circled/Parenthesized Letter
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4168
diff changeset
1002 * 29 : Hiragana/Katakana
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 * 30 : Cyrillic Letter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 if (c1 >= 0xB0 && c1 <= 0xC8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 /* Hangul */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 return 20;
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
1009 #if defined(MSWIN) || defined(WIN32UNIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 else if (c1 <= 0xA0 || c2 <= 0xA0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 /* Extended Hangul Region : MS UHC(Unified Hangul Code) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 /* c1: 0x81-0xA0 with c2: 0x41-0x5A, 0x61-0x7A, 0x81-0xFE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 * c1: 0xA1-0xC6 with c2: 0x41-0x5A, 0x61-0x7A, 0x81-0xA0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 return 20;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 else if (c1 >= 0xCA && c1 <= 0xFD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 /* Hanja */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 return 21;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 else switch (c1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 case 0xA1:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 case 0xA2:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 /* Symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 return 22;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 case 0xA3:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 /* Alpha-numeric */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 return 23;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 case 0xA4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 /* Hangul Letter(Alphabet) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 return 24;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 case 0xA5:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 /* Roman Numeral/Greek Letter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 return 25;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 case 0xA6:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 /* Box Drawings */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 return 26;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 case 0xA7:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 /* Unit Symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 return 27;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 case 0xA8:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 case 0xA9:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 if (c2 <= 0xAF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 return 25; /* Roman Letter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 else if (c2 >= 0xF6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 return 22; /* Symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 /* Circled/Parenthesized Letter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 return 28;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 case 0xAA:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 case 0xAB:
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4168
diff changeset
1053 /* Hiragana/Katakana */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 return 29;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 case 0xAC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 /* Cyrillic Letter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 return 30;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 return 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 * mb_char2len() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 * Return length in bytes of character "c".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 * Returns 1 for a single-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1072 latin_char2len(int c UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1078 dbcs_char2len(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1079 int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 if (c >= 0x100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 * mb_char2bytes() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 * Convert a character to its bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 * Returns the length in bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1092 latin_char2bytes(int c, char_u *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1099 dbcs_char2bytes(int c, char_u *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 if (c >= 0x100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 buf[0] = (unsigned)c >> 8;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 buf[1] = c;
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
1105 /* Never use a NUL byte, it causes lots of trouble. It's an invalid
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
1106 * character anyway. */
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
1107 if (buf[1] == NUL)
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
1108 buf[1] = '\n';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 /*
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1116 * mb_ptr2len() function pointer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 * Get byte length of character at "*p" but stop at a NUL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 * For UTF-8 this includes following composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 * Returns 0 when *p is NUL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1122 latin_ptr2len(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 {
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1124 return MB_BYTE2LEN(*p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1128 dbcs_ptr2len(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1129 char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 /* Check if second byte is not missing. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 len = MB_BYTE2LEN(*p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 if (len == 2 && p[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1140 /*
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1141 * mb_ptr2len_len() function pointer.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1142 * Like mb_ptr2len(), but limit to read "size" bytes.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1143 * Returns 0 for an empty string.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1144 * Returns 1 for an illegal char or an incomplete byte sequence.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1145 */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1146 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1147 latin_ptr2len_len(char_u *p, int size)
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1148 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1149 if (size < 1 || *p == NUL)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1150 return 0;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1151 return 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1152 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1153
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1154 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1155 dbcs_ptr2len_len(char_u *p, int size)
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1156 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1157 int len;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1158
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1159 if (size < 1 || *p == NUL)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1160 return 0;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1161 if (size == 1)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1162 return 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1163 /* Check that second byte is not missing. */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1164 len = MB_BYTE2LEN(*p);
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1165 if (len == 2 && p[1] == NUL)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1166 len = 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1167 return len;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1168 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1169
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 struct interval
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
1172 long first;
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
1173 long last;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 * Return TRUE if "c" is in "table[size / sizeof(struct interval)]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1180 intable(struct interval *table, size_t size, int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 int mid, bot, top;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 /* first quick check for Latin1 etc. characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 if (c < table[0].first)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 /* binary search in table */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 bot = 0;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
1190 top = (int)(size / sizeof(struct interval) - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 while (top >= bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 mid = (bot + top) / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 if (table[mid].last < c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 bot = mid + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 else if (table[mid].first > c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 top = mid - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1204 /* Sorted list of non-overlapping intervals of East Asian Ambiguous
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1205 * characters, generated with ../runtime/tools/unicode.vim. */
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1206 static struct interval ambiguous[] =
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1207 {
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1208 {0x00a1, 0x00a1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1209 {0x00a4, 0x00a4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1210 {0x00a7, 0x00a8},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1211 {0x00aa, 0x00aa},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1212 {0x00ad, 0x00ae},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1213 {0x00b0, 0x00b4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1214 {0x00b6, 0x00ba},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1215 {0x00bc, 0x00bf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1216 {0x00c6, 0x00c6},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1217 {0x00d0, 0x00d0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1218 {0x00d7, 0x00d8},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1219 {0x00de, 0x00e1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1220 {0x00e6, 0x00e6},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1221 {0x00e8, 0x00ea},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1222 {0x00ec, 0x00ed},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1223 {0x00f0, 0x00f0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1224 {0x00f2, 0x00f3},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1225 {0x00f7, 0x00fa},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1226 {0x00fc, 0x00fc},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1227 {0x00fe, 0x00fe},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1228 {0x0101, 0x0101},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1229 {0x0111, 0x0111},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1230 {0x0113, 0x0113},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1231 {0x011b, 0x011b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1232 {0x0126, 0x0127},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1233 {0x012b, 0x012b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1234 {0x0131, 0x0133},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1235 {0x0138, 0x0138},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1236 {0x013f, 0x0142},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1237 {0x0144, 0x0144},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1238 {0x0148, 0x014b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1239 {0x014d, 0x014d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1240 {0x0152, 0x0153},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1241 {0x0166, 0x0167},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1242 {0x016b, 0x016b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1243 {0x01ce, 0x01ce},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1244 {0x01d0, 0x01d0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1245 {0x01d2, 0x01d2},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1246 {0x01d4, 0x01d4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1247 {0x01d6, 0x01d6},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1248 {0x01d8, 0x01d8},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1249 {0x01da, 0x01da},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1250 {0x01dc, 0x01dc},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1251 {0x0251, 0x0251},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1252 {0x0261, 0x0261},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1253 {0x02c4, 0x02c4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1254 {0x02c7, 0x02c7},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1255 {0x02c9, 0x02cb},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1256 {0x02cd, 0x02cd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1257 {0x02d0, 0x02d0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1258 {0x02d8, 0x02db},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1259 {0x02dd, 0x02dd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1260 {0x02df, 0x02df},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1261 {0x0300, 0x036f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1262 {0x0391, 0x03a1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1263 {0x03a3, 0x03a9},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1264 {0x03b1, 0x03c1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1265 {0x03c3, 0x03c9},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1266 {0x0401, 0x0401},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1267 {0x0410, 0x044f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1268 {0x0451, 0x0451},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1269 {0x2010, 0x2010},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1270 {0x2013, 0x2016},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1271 {0x2018, 0x2019},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1272 {0x201c, 0x201d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1273 {0x2020, 0x2022},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1274 {0x2024, 0x2027},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1275 {0x2030, 0x2030},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1276 {0x2032, 0x2033},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1277 {0x2035, 0x2035},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1278 {0x203b, 0x203b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1279 {0x203e, 0x203e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1280 {0x2074, 0x2074},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1281 {0x207f, 0x207f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1282 {0x2081, 0x2084},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1283 {0x20ac, 0x20ac},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1284 {0x2103, 0x2103},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1285 {0x2105, 0x2105},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1286 {0x2109, 0x2109},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1287 {0x2113, 0x2113},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1288 {0x2116, 0x2116},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1289 {0x2121, 0x2122},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1290 {0x2126, 0x2126},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1291 {0x212b, 0x212b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1292 {0x2153, 0x2154},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1293 {0x215b, 0x215e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1294 {0x2160, 0x216b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1295 {0x2170, 0x2179},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1296 {0x2189, 0x2189},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1297 {0x2190, 0x2199},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1298 {0x21b8, 0x21b9},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1299 {0x21d2, 0x21d2},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1300 {0x21d4, 0x21d4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1301 {0x21e7, 0x21e7},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1302 {0x2200, 0x2200},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1303 {0x2202, 0x2203},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1304 {0x2207, 0x2208},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1305 {0x220b, 0x220b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1306 {0x220f, 0x220f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1307 {0x2211, 0x2211},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1308 {0x2215, 0x2215},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1309 {0x221a, 0x221a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1310 {0x221d, 0x2220},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1311 {0x2223, 0x2223},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1312 {0x2225, 0x2225},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1313 {0x2227, 0x222c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1314 {0x222e, 0x222e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1315 {0x2234, 0x2237},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1316 {0x223c, 0x223d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1317 {0x2248, 0x2248},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1318 {0x224c, 0x224c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1319 {0x2252, 0x2252},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1320 {0x2260, 0x2261},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1321 {0x2264, 0x2267},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1322 {0x226a, 0x226b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1323 {0x226e, 0x226f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1324 {0x2282, 0x2283},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1325 {0x2286, 0x2287},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1326 {0x2295, 0x2295},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1327 {0x2299, 0x2299},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1328 {0x22a5, 0x22a5},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1329 {0x22bf, 0x22bf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1330 {0x2312, 0x2312},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1331 {0x2460, 0x24e9},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1332 {0x24eb, 0x254b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1333 {0x2550, 0x2573},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1334 {0x2580, 0x258f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1335 {0x2592, 0x2595},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1336 {0x25a0, 0x25a1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1337 {0x25a3, 0x25a9},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1338 {0x25b2, 0x25b3},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1339 {0x25b6, 0x25b7},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1340 {0x25bc, 0x25bd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1341 {0x25c0, 0x25c1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1342 {0x25c6, 0x25c8},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1343 {0x25cb, 0x25cb},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1344 {0x25ce, 0x25d1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1345 {0x25e2, 0x25e5},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1346 {0x25ef, 0x25ef},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1347 {0x2605, 0x2606},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1348 {0x2609, 0x2609},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1349 {0x260e, 0x260f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1350 {0x261c, 0x261c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1351 {0x261e, 0x261e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1352 {0x2640, 0x2640},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1353 {0x2642, 0x2642},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1354 {0x2660, 0x2661},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1355 {0x2663, 0x2665},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1356 {0x2667, 0x266a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1357 {0x266c, 0x266d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1358 {0x266f, 0x266f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1359 {0x269e, 0x269f},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1360 {0x26bf, 0x26bf},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1361 {0x26c6, 0x26cd},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1362 {0x26cf, 0x26d3},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1363 {0x26d5, 0x26e1},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1364 {0x26e3, 0x26e3},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1365 {0x26e8, 0x26e9},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1366 {0x26eb, 0x26f1},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1367 {0x26f4, 0x26f4},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1368 {0x26f6, 0x26f9},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1369 {0x26fb, 0x26fc},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1370 {0x26fe, 0x26ff},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1371 {0x273d, 0x273d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1372 {0x2776, 0x277f},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1373 {0x2b56, 0x2b59},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1374 {0x3248, 0x324f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1375 {0xe000, 0xf8ff},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1376 {0xfe00, 0xfe0f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1377 {0xfffd, 0xfffd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1378 {0x1f100, 0x1f10a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1379 {0x1f110, 0x1f12d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1380 {0x1f130, 0x1f169},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1381 {0x1f170, 0x1f18d},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1382 {0x1f18f, 0x1f190},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1383 {0x1f19b, 0x1f1ac},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1384 {0xe0100, 0xe01ef},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1385 {0xf0000, 0xffffd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1386 {0x100000, 0x10fffd}
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1387 };
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
1388
12210
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1389 #if defined(FEAT_TERMINAL) || defined(PROTO)
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1390 /*
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1391 * utf_char2cells() with different argument type for libvterm.
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1392 */
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1393 int
12269
d2373927d76d patch 8.0.1014: old compiler doesn't know uint32_t
Christian Brabandt <cb@256bit.org>
parents: 12210
diff changeset
1394 utf_uint2cells(UINT32_T c)
12210
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1395 {
12650
f58755eb453e patch 8.0.1203: terminal window mistreats composing characters
Christian Brabandt <cb@256bit.org>
parents: 12547
diff changeset
1396 if (c >= 0x100 && utf_iscomposing((int)c))
f58755eb453e patch 8.0.1203: terminal window mistreats composing characters
Christian Brabandt <cb@256bit.org>
parents: 12547
diff changeset
1397 return 0;
12210
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1398 return utf_char2cells((int)c);
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1399 }
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1400 #endif
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
1401
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 * For UTF-8 character "c" return 2 for a double-width character, 1 for others.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 * Returns 4 or 6 for an unprintable character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 * Is only correct for characters >= 0x80.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 * When p_ambw is "double", return 2 for a character with East Asian Width
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 * class 'A'(mbiguous).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1410 utf_char2cells(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 {
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1412 /* Sorted list of non-overlapping intervals of East Asian double width
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1413 * characters, generated with ../runtime/tools/unicode.vim. */
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1414 static struct interval doublewidth[] =
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1415 {
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1416 {0x1100, 0x115f},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1417 {0x231a, 0x231b},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1418 {0x2329, 0x232a},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1419 {0x23e9, 0x23ec},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1420 {0x23f0, 0x23f0},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1421 {0x23f3, 0x23f3},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1422 {0x25fd, 0x25fe},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1423 {0x2614, 0x2615},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1424 {0x2648, 0x2653},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1425 {0x267f, 0x267f},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1426 {0x2693, 0x2693},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1427 {0x26a1, 0x26a1},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1428 {0x26aa, 0x26ab},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1429 {0x26bd, 0x26be},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1430 {0x26c4, 0x26c5},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1431 {0x26ce, 0x26ce},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1432 {0x26d4, 0x26d4},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1433 {0x26ea, 0x26ea},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1434 {0x26f2, 0x26f3},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1435 {0x26f5, 0x26f5},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1436 {0x26fa, 0x26fa},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1437 {0x26fd, 0x26fd},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1438 {0x2705, 0x2705},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1439 {0x270a, 0x270b},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1440 {0x2728, 0x2728},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1441 {0x274c, 0x274c},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1442 {0x274e, 0x274e},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1443 {0x2753, 0x2755},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1444 {0x2757, 0x2757},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1445 {0x2795, 0x2797},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1446 {0x27b0, 0x27b0},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1447 {0x27bf, 0x27bf},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1448 {0x2b1b, 0x2b1c},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1449 {0x2b50, 0x2b50},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1450 {0x2b55, 0x2b55},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1451 {0x2e80, 0x2e99},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1452 {0x2e9b, 0x2ef3},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1453 {0x2f00, 0x2fd5},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1454 {0x2ff0, 0x2ffb},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
1455 {0x3000, 0x303e},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1456 {0x3041, 0x3096},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
1457 {0x3099, 0x30ff},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1458 {0x3105, 0x312f},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1459 {0x3131, 0x318e},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
1460 {0x3190, 0x31ba},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1461 {0x31c0, 0x31e3},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1462 {0x31f0, 0x321e},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1463 {0x3220, 0x3247},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1464 {0x3250, 0x32fe},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1465 {0x3300, 0x4dbf},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1466 {0x4e00, 0xa48c},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1467 {0xa490, 0xa4c6},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1468 {0xa960, 0xa97c},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1469 {0xac00, 0xd7a3},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1470 {0xf900, 0xfaff},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1471 {0xfe10, 0xfe19},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1472 {0xfe30, 0xfe52},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1473 {0xfe54, 0xfe66},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1474 {0xfe68, 0xfe6b},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1475 {0xff01, 0xff60},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1476 {0xffe0, 0xffe6},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1477 {0x16fe0, 0x16fe1},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1478 {0x17000, 0x187f1},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1479 {0x18800, 0x18af2},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1480 {0x1b000, 0x1b11e},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1481 {0x1b170, 0x1b2fb},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1482 {0x1f004, 0x1f004},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1483 {0x1f0cf, 0x1f0cf},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1484 {0x1f18e, 0x1f18e},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1485 {0x1f191, 0x1f19a},
8682
4ce551bd5024 commit https://github.com/vim/vim/commit/d63aff0a65b955447de2fd8bfdaee29b61ce2843
Christian Brabandt <cb@256bit.org>
parents: 8680
diff changeset
1486 {0x1f200, 0x1f202},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1487 {0x1f210, 0x1f23b},
8682
4ce551bd5024 commit https://github.com/vim/vim/commit/d63aff0a65b955447de2fd8bfdaee29b61ce2843
Christian Brabandt <cb@256bit.org>
parents: 8680
diff changeset
1488 {0x1f240, 0x1f248},
4ce551bd5024 commit https://github.com/vim/vim/commit/d63aff0a65b955447de2fd8bfdaee29b61ce2843
Christian Brabandt <cb@256bit.org>
parents: 8680
diff changeset
1489 {0x1f250, 0x1f251},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1490 {0x1f260, 0x1f265},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1491 {0x1f300, 0x1f320},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1492 {0x1f32d, 0x1f335},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1493 {0x1f337, 0x1f37c},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1494 {0x1f37e, 0x1f393},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1495 {0x1f3a0, 0x1f3ca},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1496 {0x1f3cf, 0x1f3d3},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1497 {0x1f3e0, 0x1f3f0},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1498 {0x1f3f4, 0x1f3f4},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1499 {0x1f3f8, 0x1f43e},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1500 {0x1f440, 0x1f440},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1501 {0x1f442, 0x1f4fc},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1502 {0x1f4ff, 0x1f53d},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1503 {0x1f54b, 0x1f54e},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1504 {0x1f550, 0x1f567},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1505 {0x1f57a, 0x1f57a},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1506 {0x1f595, 0x1f596},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1507 {0x1f5a4, 0x1f5a4},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1508 {0x1f5fb, 0x1f64f},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1509 {0x1f680, 0x1f6c5},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1510 {0x1f6cc, 0x1f6cc},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1511 {0x1f6d0, 0x1f6d2},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
1512 {0x1f6eb, 0x1f6ec},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1513 {0x1f6f4, 0x1f6f9},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1514 {0x1f910, 0x1f93e},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1515 {0x1f940, 0x1f970},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1516 {0x1f973, 0x1f976},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1517 {0x1f97a, 0x1f97a},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1518 {0x1f97c, 0x1f9a2},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1519 {0x1f9b0, 0x1f9b9},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1520 {0x1f9c0, 0x1f9c2},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
1521 {0x1f9d0, 0x1f9ff},
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1522 {0x20000, 0x2fffd},
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1523 {0x30000, 0x3fffd}
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1524 };
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
1525
8680
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1526 /* Sorted list of non-overlapping intervals of Emoji characters that don't
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1527 * have ambiguous or double width,
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1528 * based on http://unicode.org/emoji/charts/emoji-list.html */
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1529 static struct interval emoji_width[] =
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1530 {
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1531 {0x1f1e6, 0x1f1ff},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1532 {0x1f321, 0x1f321},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1533 {0x1f324, 0x1f32c},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1534 {0x1f336, 0x1f336},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1535 {0x1f37d, 0x1f37d},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1536 {0x1f396, 0x1f397},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1537 {0x1f399, 0x1f39b},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1538 {0x1f39e, 0x1f39f},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1539 {0x1f3cb, 0x1f3ce},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1540 {0x1f3d4, 0x1f3df},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1541 {0x1f3f3, 0x1f3f5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1542 {0x1f3f7, 0x1f3f7},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1543 {0x1f43f, 0x1f43f},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1544 {0x1f441, 0x1f441},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1545 {0x1f4fd, 0x1f4fd},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1546 {0x1f549, 0x1f54a},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1547 {0x1f56f, 0x1f570},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1548 {0x1f573, 0x1f579},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1549 {0x1f587, 0x1f587},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1550 {0x1f58a, 0x1f58d},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1551 {0x1f590, 0x1f590},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1552 {0x1f5a5, 0x1f5a5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1553 {0x1f5a8, 0x1f5a8},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1554 {0x1f5b1, 0x1f5b2},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1555 {0x1f5bc, 0x1f5bc},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1556 {0x1f5c2, 0x1f5c4},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1557 {0x1f5d1, 0x1f5d3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1558 {0x1f5dc, 0x1f5de},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1559 {0x1f5e1, 0x1f5e1},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1560 {0x1f5e3, 0x1f5e3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1561 {0x1f5e8, 0x1f5e8},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1562 {0x1f5ef, 0x1f5ef},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1563 {0x1f5f3, 0x1f5f3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1564 {0x1f5fa, 0x1f5fa},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1565 {0x1f6cb, 0x1f6cf},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1566 {0x1f6e0, 0x1f6e5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1567 {0x1f6e9, 0x1f6e9},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1568 {0x1f6f0, 0x1f6f0},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
1569 {0x1f6f3, 0x1f6f3}
8680
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1570 };
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1571
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 if (c >= 0x100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 #ifdef USE_WCHAR_FUNCTIONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 * Assume the library function wcwidth() works better than our own
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 * stuff. It should return 1 for ambiguous width chars!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 int n = wcwidth(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 if (n < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 return 6; /* unprintable, displays <xxxx> */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 if (n > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 return n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 if (!utf_printable(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 return 6; /* unprintable, displays <xxxx> */
2063
1378bc45ebe5 updated for version 7.2.348
Bram Moolenaar <bram@zimbu.org>
parents: 2041
diff changeset
1588 if (intable(doublewidth, sizeof(doublewidth), c))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 #endif
8680
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
1591 if (p_emoji && intable(emoji_width, sizeof(emoji_width), c))
8629
54ac275e3fc4 commit https://github.com/vim/vim/commit/3848e00e0177abdb31bc600234967863ec487233
Christian Brabandt <cb@256bit.org>
parents: 8218
diff changeset
1592 return 2;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 /* Characters below 0x100 are influenced by 'isprint' option */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 else if (c >= 0x80 && !vim_isprintc(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 return 4; /* unprintable, displays <xx> */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 if (c >= 0x80 && *p_ambw == 'd' && intable(ambiguous, sizeof(ambiguous), c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 * mb_ptr2cells() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 * Return the number of display cells character at "*p" occupies.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 * This doesn't take care of unprintable characters, use ptr2cells() for that.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1611 latin_ptr2cells(char_u *p UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1617 utf_ptr2cells(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1618 char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 /* Need to convert to a wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 if (*p >= 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 c = utf_ptr2char(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 /* An illegal byte is displayed as <xx>. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1627 if (utf_ptr2len(p) == 1 || c == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 return 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 /* If the char is ASCII it must be an overlong sequence. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 if (c < 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 return char2cells(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 return utf_char2cells(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1638 dbcs_ptr2cells(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 /* Number of cells is equal to number of bytes, except for euc-jp when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 * the first byte is 0x8e. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 if (enc_dbcs == DBCS_JPNU && *p == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 return MB_BYTE2LEN(*p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 /*
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1648 * mb_ptr2cells_len() function pointer.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1649 * Like mb_ptr2cells(), but limit string length to "size".
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1650 * For an empty string or truncated character returns 1.
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1651 */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1652 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1653 latin_ptr2cells_len(char_u *p UNUSED, int size UNUSED)
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1654 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1655 return 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1656 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1657
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1658 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1659 utf_ptr2cells_len(char_u *p, int size)
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1660 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1661 int c;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1662
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1663 /* Need to convert to a wide character. */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1664 if (size > 0 && *p >= 0x80)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1665 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1666 if (utf_ptr2len_len(p, size) < utf8len_tab[*p])
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
1667 return 1; /* truncated */
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1668 c = utf_ptr2char(p);
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1669 /* An illegal byte is displayed as <xx>. */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1670 if (utf_ptr2len(p) == 1 || c == NUL)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1671 return 4;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1672 /* If the char is ASCII it must be an overlong sequence. */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1673 if (c < 0x80)
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1674 return char2cells(c);
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1675 return utf_char2cells(c);
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1676 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1677 return 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1678 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1679
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1680 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1681 dbcs_ptr2cells_len(char_u *p, int size)
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1682 {
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1683 /* Number of cells is equal to number of bytes, except for euc-jp when
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1684 * the first byte is 0x8e. */
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1685 if (size <= 1 || (enc_dbcs == DBCS_JPNU && *p == 0x8e))
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1686 return 1;
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1687 return MB_BYTE2LEN(*p);
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1688 }
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1689
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
1690 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 * mb_char2cells() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 * Return the number of display cells character "c" occupies.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 * Only takes care of multi-byte chars, not "^C" and such.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1696 latin_char2cells(int c UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1702 dbcs_char2cells(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 /* Number of cells is equal to number of bytes, except for euc-jp when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 * the first byte is 0x8e. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 if (enc_dbcs == DBCS_JPNU && ((unsigned)c >> 8) == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 /* use the first byte */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 return MB_BYTE2LEN((unsigned)c >> 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 /*
2338
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1713 * Return the number of cells occupied by string "p".
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1714 * Stop at a NUL character. When "len" >= 0 stop at character "p[len]".
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1715 */
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1716 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1717 mb_string2cells(char_u *p, int len)
2338
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1718 {
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1719 int i;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1720 int clen = 0;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1721
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1722 for (i = 0; (len < 0 || i < len) && p[i] != NUL; i += (*mb_ptr2len)(p + i))
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1723 clen += (*mb_ptr2cells)(p + i);
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1724 return clen;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1725 }
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1726
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1727 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 * mb_off2cells() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 * Return number of display cells for char at ScreenLines[off].
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1730 * We make sure that the offset used is less than "max_off".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1733 latin_off2cells(unsigned off UNUSED, unsigned max_off UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1739 dbcs_off2cells(unsigned off, unsigned max_off)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 {
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1741 /* never check beyond end of the line */
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1742 if (off >= max_off)
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1743 return 1;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1744
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 /* Number of cells is equal to number of bytes, except for euc-jp when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 * the first byte is 0x8e. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 return MB_BYTE2LEN(ScreenLines[off]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1753 utf_off2cells(unsigned off, unsigned max_off)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 {
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
1755 return (off + 1 < max_off && ScreenLines[off + 1] == 0) ? 2 : 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 * mb_ptr2char() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 * Convert a byte sequence into a character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1763 latin_ptr2char(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 return *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1769 dbcs_ptr2char(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 if (MB_BYTE2LEN(*p) > 1 && p[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 return (p[0] << 8) + p[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 return *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 * Convert a UTF-8 byte sequence to a wide character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 * If the sequence is illegal or truncated by a NUL the first byte is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 * returned.
13117
cfaa513efa3f patch 8.0.1433: illegal memory access after undo
Christian Brabandt <cb@256bit.org>
parents: 12948
diff changeset
1780 * For an overlong sequence this may return zero.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 * Does not include composing characters, of course.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1784 utf_ptr2char(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 if (p[0] < 0x80) /* be quick for ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 return p[0];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
1791 len = utf8len_tab_zero[p[0]];
1658
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
1792 if (len > 1 && (p[1] & 0xc0) == 0x80)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 if (len == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 return ((p[0] & 0x1f) << 6) + (p[1] & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 if ((p[2] & 0xc0) == 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 if (len == 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 return ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 + (p[2] & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 if ((p[3] & 0xc0) == 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 if (len == 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 return ((p[0] & 0x07) << 18) + ((p[1] & 0x3f) << 12)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 + ((p[2] & 0x3f) << 6) + (p[3] & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 if ((p[4] & 0xc0) == 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 if (len == 5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 return ((p[0] & 0x03) << 24) + ((p[1] & 0x3f) << 18)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 + ((p[2] & 0x3f) << 12) + ((p[3] & 0x3f) << 6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 + (p[4] & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 if ((p[5] & 0xc0) == 0x80 && len == 6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 return ((p[0] & 0x01) << 30) + ((p[1] & 0x3f) << 24)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 + ((p[2] & 0x3f) << 18) + ((p[3] & 0x3f) << 12)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 + ((p[4] & 0x3f) << 6) + (p[5] & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 /* Illegal value, just return the first byte */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 return p[0];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 /*
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1825 * Convert a UTF-8 byte sequence to a wide character.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1826 * String is assumed to be terminated by NUL or after "n" bytes, whichever
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1827 * comes first.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1828 * The function is safe in the sense that it never accesses memory beyond the
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1829 * first "n" bytes of "s".
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1830 *
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1831 * On success, returns decoded codepoint, advances "s" to the beginning of
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1832 * next character and decreases "n" accordingly.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1833 *
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1834 * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1835 * NUL byte.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1836 *
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1837 * If byte sequence is illegal or incomplete, returns -1 and does not advance
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1838 * "s".
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1839 */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1840 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1841 utf_safe_read_char_adv(char_u **s, size_t *n)
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1842 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1843 int c, k;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1844
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1845 if (*n == 0) /* end of buffer */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1846 return 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1847
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1848 k = utf8len_tab_zero[**s];
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1849
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1850 if (k == 1)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1851 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1852 /* ASCII character or NUL */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1853 (*n)--;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1854 return *(*s)++;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1855 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1856
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1857 if ((size_t)k <= *n)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1858 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1859 /* We have a multibyte sequence and it isn't truncated by buffer
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1860 * limits so utf_ptr2char() is safe to use. Or the first byte is
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1861 * illegal (k=0), and it's also safe to use utf_ptr2char(). */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1862 c = utf_ptr2char(*s);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1863
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1864 /* On failure, utf_ptr2char() returns the first byte, so here we
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1865 * check equality with the first byte. The only non-ASCII character
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1866 * which equals the first byte of its own UTF-8 representation is
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1867 * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1868 * It's safe even if n=1, else we would have k=2 > n. */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1869 if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1870 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1871 /* byte sequence was successfully decoded */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1872 *s += k;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1873 *n -= k;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1874 return c;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1875 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1876 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1877
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1878 /* byte sequence is incomplete or illegal */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1879 return -1;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1880 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1881
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
1882 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 * Get character at **pp and advance *pp to the next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 * Note: composing characters are skipped!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1887 mb_ptr2char_adv(char_u **pp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 c = (*mb_ptr2char)(*pp);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1892 *pp += (*mb_ptr2len)(*pp);
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1893 return c;
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1894 }
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1895
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1896 /*
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1897 * Get character at **pp and advance *pp to the next character.
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1898 * Note: composing characters are returned as separate characters.
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1899 */
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1900 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1901 mb_cptr2char_adv(char_u **pp)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1902 {
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1903 int c;
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1904
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1905 c = (*mb_ptr2char)(*pp);
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1906 if (enc_utf8)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1907 *pp += utf_ptr2len(*pp);
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1908 else
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1909 *pp += (*mb_ptr2len)(*pp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 #if defined(FEAT_ARABIC) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 * Check if the character pointed to by "p2" is a composing character when it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 * comes after "p1". For Arabic sometimes "ab" is replaced with "c", which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 * behaves like a composing character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1920 utf_composinglike(char_u *p1, char_u *p2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 int c2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 c2 = utf_ptr2char(p2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 if (utf_iscomposing(c2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 if (!arabic_maycombine(c2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 return arabic_combine(utf_ptr2char(p1), c2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 /*
1205
b05620bdba29 updated for version 7.1b
vimboss
parents: 1080
diff changeset
1934 * Convert a UTF-8 byte string to a wide character. Also get up to MAX_MCO
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 * composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1938 utfc_ptr2char(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1939 char_u *p,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1940 int *pcc) /* return: composing chars, last one is 0 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 int cc;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1945 int i = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 c = utf_ptr2char(p);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1948 len = utf_ptr2len(p);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1949
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 /* Only accept a composing char when the first char isn't illegal. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951 if ((len > 1 || *p < 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 && p[len] >= 0x80
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 && UTF_COMPOSINGLIKE(p, p + len))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1955 cc = utf_ptr2char(p + len);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1956 for (;;)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1957 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1958 pcc[i++] = cc;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1959 if (i == MAX_MCO)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1960 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1961 len += utf_ptr2len(p + len);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1962 if (p[len] < 0x80 || !utf_iscomposing(cc = utf_ptr2char(p + len)))
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1963 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1964 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 }
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1966
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1967 if (i < MAX_MCO) /* last composing char must be 0 */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1968 pcc[i] = 0;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1969
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 /*
1205
b05620bdba29 updated for version 7.1b
vimboss
parents: 1080
diff changeset
1974 * Convert a UTF-8 byte string to a wide character. Also get up to MAX_MCO
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 * composing characters. Use no more than p[maxlen].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1978 utfc_ptr2char_len(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1979 char_u *p,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1980 int *pcc, /* return: composing chars, last one is 0 */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1981 int maxlen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985 int cc;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1986 int i = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 c = utf_ptr2char(p);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
1989 len = utf_ptr2len_len(p, maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 /* Only accept a composing char when the first char isn't illegal. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 if ((len > 1 || *p < 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 && len < maxlen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 && p[len] >= 0x80
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 && UTF_COMPOSINGLIKE(p, p + len))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1996 cc = utf_ptr2char(p + len);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1997 for (;;)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1998 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
1999 pcc[i++] = cc;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2000 if (i == MAX_MCO)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2001 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2002 len += utf_ptr2len_len(p + len, maxlen - len);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2003 if (len >= maxlen
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2004 || p[len] < 0x80
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2005 || !utf_iscomposing(cc = utf_ptr2char(p + len)))
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2006 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2007 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 }
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2009
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2010 if (i < MAX_MCO) /* last composing char must be 0 */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2011 pcc[i] = 0;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2012
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 * Convert the character at screen position "off" to a sequence of bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 * Includes the composing characters.
3549
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3402
diff changeset
2019 * "buf" must at least have the length MB_MAXBYTES + 1.
2154
7c8c7c95a865 First step in the Vim 7.3 branch. Changed version numbers.
Bram Moolenaar <bram@zimbu.org>
parents: 2063
diff changeset
2020 * Only to be used when ScreenLinesUC[off] != 0.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 * Returns the produced number of bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2024 utfc_char2bytes(int off, char_u *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 int len;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2027 int i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 len = utf_char2bytes(ScreenLinesUC[off], buf);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2030 for (i = 0; i < Screen_mco; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2032 if (ScreenLinesC[i][off] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2033 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 694
diff changeset
2034 len += utf_char2bytes(ScreenLinesC[i][off], buf + len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 * Get the length of a UTF-8 byte sequence, not including any following
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 * composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 * Returns 0 for "".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 * Returns 1 for an illegal byte sequence.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2046 utf_ptr2len(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 len = utf8len_tab[*p];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 for (i = 1; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 if ((p[i] & 0xc0) != 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 * Return length of UTF-8 character, obtained from the first byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 * "b" must be between 0 and 255!
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2063 * Returns 1 for an invalid first byte value.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2066 utf_byte2len(int b)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 return utf8len_tab[b];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 * Get the length of UTF-8 byte sequence "p[size]". Does not include any
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 * following composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 * Returns 1 for "".
1487
28558ab31051 updated for version 7.1-202
vimboss
parents: 1378
diff changeset
2075 * Returns 1 for an illegal byte sequence (also in incomplete byte seq.).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 * Returns number > "size" for an incomplete byte sequence.
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2077 * Never returns zero.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2080 utf_ptr2len_len(char_u *p, int size)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 int i;
1487
28558ab31051 updated for version 7.1-202
vimboss
parents: 1378
diff changeset
2084 int m;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2086 len = utf8len_tab[*p];
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2087 if (len == 1)
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2088 return 1; /* NUL, ascii or illegal lead byte */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 if (len > size)
1487
28558ab31051 updated for version 7.1-202
vimboss
parents: 1378
diff changeset
2090 m = size; /* incomplete byte sequence. */
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2091 else
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
2092 m = len;
1487
28558ab31051 updated for version 7.1-202
vimboss
parents: 1378
diff changeset
2093 for (i = 1; i < m; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 if ((p[i] & 0xc0) != 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 * Return the number of bytes the UTF-8 encoding of the character at "p" takes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 * This includes following composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2104 utfc_ptr2len(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 int len;
318
1c408f85789e updated for version 7.0083
vimboss
parents: 312
diff changeset
2107 int b0 = *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 int prevlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111
318
1c408f85789e updated for version 7.0083
vimboss
parents: 312
diff changeset
2112 if (b0 == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 return 0;
318
1c408f85789e updated for version 7.0083
vimboss
parents: 312
diff changeset
2114 if (b0 < 0x80 && p[1] < 0x80) /* be quick for ASCII */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 /* Skip over first UTF-8 char, stopping at a NUL byte. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
2118 len = utf_ptr2len(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 /* Check for illegal byte. */
318
1c408f85789e updated for version 7.0083
vimboss
parents: 312
diff changeset
2121 if (len == 1 && b0 >= 0x80)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 /*
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2125 * Check for composing characters. We can handle only the first six, but
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 * skip all of them (otherwise the cursor would get stuck).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 prevlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 if (p[len] < 0x80 || !UTF_COMPOSINGLIKE(p + prevlen, p + len))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136 /* Skip over composing char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 prevlen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 #endif
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
2140 len += utf_ptr2len(p + len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 * Return the number of bytes the UTF-8 encoding of the character at "p[size]"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 * takes. This includes following composing characters.
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
2147 * Returns 0 for an empty string.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 * Returns 1 for an illegal char or an incomplete byte sequence.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2151 utfc_ptr2len_len(char_u *p, int size)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 int prevlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157
1903
4c02214d1465 updated for version 7.2-200
vimboss
parents: 1883
diff changeset
2158 if (size < 1 || *p == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 if (p[0] < 0x80 && (size == 1 || p[1] < 0x80)) /* be quick for ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 /* Skip over first UTF-8 char, stopping at a NUL byte. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
2164 len = utf_ptr2len_len(p, size);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 /* Check for illegal byte and incomplete byte sequence. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 if ((len == 1 && p[0] >= 0x80) || len > size)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 /*
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2171 * Check for composing characters. We can handle only the first six, but
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 * skip all of them (otherwise the cursor would get stuck).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 prevlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 while (len < size)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 {
1658
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2179 int len_next_char;
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2180
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2181 if (p[len] < 0x80)
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2182 break;
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2183
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2184 /*
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2185 * Next character length should not go beyond size to ensure that
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2186 * UTF_COMPOSINGLIKE(...) does not read beyond size.
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2187 */
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2188 len_next_char = utf_ptr2len_len(p + len, size - len);
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2189 if (len_next_char > size - len)
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2190 break;
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2191
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2192 if (!UTF_COMPOSINGLIKE(p + prevlen, p + len))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 /* Skip over composing char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 prevlen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 #endif
1658
630eca9496e0 updated for version 7.2a-010
vimboss
parents: 1620
diff changeset
2199 len += len_next_char;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 * Return the number of bytes the UTF-8 encoding of character "c" takes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 * This does not include composing characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2209 utf_char2len(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 if (c < 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 if (c < 0x800)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 if (c < 0x10000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 return 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 if (c < 0x200000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 return 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 if (c < 0x4000000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 return 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 return 6;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 * Convert Unicode character "c" to UTF-8 string in "buf[]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 * Returns the number of bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2229 utf_char2bytes(int c, char_u *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 if (c < 0x80) /* 7 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 if (c < 0x800) /* 11 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 buf[0] = 0xc0 + ((unsigned)c >> 6);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 buf[1] = 0x80 + (c & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 if (c < 0x10000) /* 16 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 buf[0] = 0xe0 + ((unsigned)c >> 12);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 buf[1] = 0x80 + (((unsigned)c >> 6) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 buf[2] = 0x80 + (c & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 return 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 if (c < 0x200000) /* 21 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 buf[0] = 0xf0 + ((unsigned)c >> 18);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 buf[1] = 0x80 + (((unsigned)c >> 12) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 buf[2] = 0x80 + (((unsigned)c >> 6) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 buf[3] = 0x80 + (c & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 return 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 if (c < 0x4000000) /* 26 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 buf[0] = 0xf8 + ((unsigned)c >> 24);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 buf[1] = 0x80 + (((unsigned)c >> 18) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 buf[2] = 0x80 + (((unsigned)c >> 12) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 buf[3] = 0x80 + (((unsigned)c >> 6) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 buf[4] = 0x80 + (c & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 return 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 /* 31 bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 buf[0] = 0xfc + ((unsigned)c >> 30);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 buf[1] = 0x80 + (((unsigned)c >> 24) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 buf[2] = 0x80 + (((unsigned)c >> 18) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 buf[3] = 0x80 + (((unsigned)c >> 12) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 buf[4] = 0x80 + (((unsigned)c >> 6) & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 buf[5] = 0x80 + (c & 0x3f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 return 6;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275
12210
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2276 #if defined(FEAT_TERMINAL) || defined(PROTO)
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2277 /*
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2278 * utf_iscomposing() with different argument type for libvterm.
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2279 */
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2280 int
12269
d2373927d76d patch 8.0.1014: old compiler doesn't know uint32_t
Christian Brabandt <cb@256bit.org>
parents: 12210
diff changeset
2281 utf_iscomposing_uint(UINT32_T c)
12210
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2282 {
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2283 return utf_iscomposing((int)c);
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2284 }
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2285 #endif
b9b06aa0b6d9 patch 8.0.0985: libvterm has its own idea of character width
Christian Brabandt <cb@256bit.org>
parents: 11539
diff changeset
2286
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 * Return TRUE if "c" is a composing UTF-8 character. This means it will be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 * drawn on top of the preceding character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 * Based on code from Markus Kuhn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2293 utf_iscomposing(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2295 /* Sorted list of non-overlapping intervals.
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2296 * Generated by ../runtime/tools/unicode.vim. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 static struct interval combining[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2299 {0x0300, 0x036f},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2300 {0x0483, 0x0489},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2301 {0x0591, 0x05bd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2302 {0x05bf, 0x05bf},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2303 {0x05c1, 0x05c2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2304 {0x05c4, 0x05c5},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2305 {0x05c7, 0x05c7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2306 {0x0610, 0x061a},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2307 {0x064b, 0x065f},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2308 {0x0670, 0x0670},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2309 {0x06d6, 0x06dc},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2310 {0x06df, 0x06e4},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2311 {0x06e7, 0x06e8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2312 {0x06ea, 0x06ed},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2313 {0x0711, 0x0711},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2314 {0x0730, 0x074a},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2315 {0x07a6, 0x07b0},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2316 {0x07eb, 0x07f3},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2317 {0x07fd, 0x07fd},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2318 {0x0816, 0x0819},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2319 {0x081b, 0x0823},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2320 {0x0825, 0x0827},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2321 {0x0829, 0x082d},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2322 {0x0859, 0x085b},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2323 {0x08d3, 0x08e1},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2324 {0x08e3, 0x0903},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2325 {0x093a, 0x093c},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2326 {0x093e, 0x094f},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2327 {0x0951, 0x0957},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2328 {0x0962, 0x0963},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2329 {0x0981, 0x0983},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2330 {0x09bc, 0x09bc},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2331 {0x09be, 0x09c4},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2332 {0x09c7, 0x09c8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2333 {0x09cb, 0x09cd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2334 {0x09d7, 0x09d7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2335 {0x09e2, 0x09e3},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2336 {0x09fe, 0x09fe},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2337 {0x0a01, 0x0a03},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2338 {0x0a3c, 0x0a3c},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2339 {0x0a3e, 0x0a42},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2340 {0x0a47, 0x0a48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2341 {0x0a4b, 0x0a4d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2342 {0x0a51, 0x0a51},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2343 {0x0a70, 0x0a71},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2344 {0x0a75, 0x0a75},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2345 {0x0a81, 0x0a83},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2346 {0x0abc, 0x0abc},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2347 {0x0abe, 0x0ac5},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2348 {0x0ac7, 0x0ac9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2349 {0x0acb, 0x0acd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2350 {0x0ae2, 0x0ae3},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2351 {0x0afa, 0x0aff},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2352 {0x0b01, 0x0b03},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2353 {0x0b3c, 0x0b3c},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2354 {0x0b3e, 0x0b44},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2355 {0x0b47, 0x0b48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2356 {0x0b4b, 0x0b4d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2357 {0x0b56, 0x0b57},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2358 {0x0b62, 0x0b63},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2359 {0x0b82, 0x0b82},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2360 {0x0bbe, 0x0bc2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2361 {0x0bc6, 0x0bc8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2362 {0x0bca, 0x0bcd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2363 {0x0bd7, 0x0bd7},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2364 {0x0c00, 0x0c04},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2365 {0x0c3e, 0x0c44},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2366 {0x0c46, 0x0c48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2367 {0x0c4a, 0x0c4d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2368 {0x0c55, 0x0c56},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2369 {0x0c62, 0x0c63},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2370 {0x0c81, 0x0c83},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2371 {0x0cbc, 0x0cbc},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2372 {0x0cbe, 0x0cc4},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2373 {0x0cc6, 0x0cc8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2374 {0x0cca, 0x0ccd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2375 {0x0cd5, 0x0cd6},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2376 {0x0ce2, 0x0ce3},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2377 {0x0d00, 0x0d03},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2378 {0x0d3b, 0x0d3c},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2379 {0x0d3e, 0x0d44},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2380 {0x0d46, 0x0d48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2381 {0x0d4a, 0x0d4d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2382 {0x0d57, 0x0d57},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2383 {0x0d62, 0x0d63},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2384 {0x0d82, 0x0d83},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2385 {0x0dca, 0x0dca},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2386 {0x0dcf, 0x0dd4},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2387 {0x0dd6, 0x0dd6},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2388 {0x0dd8, 0x0ddf},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2389 {0x0df2, 0x0df3},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2390 {0x0e31, 0x0e31},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2391 {0x0e34, 0x0e3a},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2392 {0x0e47, 0x0e4e},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2393 {0x0eb1, 0x0eb1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2394 {0x0eb4, 0x0eb9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2395 {0x0ebb, 0x0ebc},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2396 {0x0ec8, 0x0ecd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2397 {0x0f18, 0x0f19},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2398 {0x0f35, 0x0f35},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2399 {0x0f37, 0x0f37},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2400 {0x0f39, 0x0f39},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2401 {0x0f3e, 0x0f3f},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2402 {0x0f71, 0x0f84},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2403 {0x0f86, 0x0f87},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2404 {0x0f8d, 0x0f97},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2405 {0x0f99, 0x0fbc},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2406 {0x0fc6, 0x0fc6},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2407 {0x102b, 0x103e},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2408 {0x1056, 0x1059},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2409 {0x105e, 0x1060},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2410 {0x1062, 0x1064},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2411 {0x1067, 0x106d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2412 {0x1071, 0x1074},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2413 {0x1082, 0x108d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2414 {0x108f, 0x108f},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2415 {0x109a, 0x109d},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2416 {0x135d, 0x135f},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2417 {0x1712, 0x1714},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2418 {0x1732, 0x1734},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2419 {0x1752, 0x1753},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2420 {0x1772, 0x1773},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2421 {0x17b4, 0x17d3},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2422 {0x17dd, 0x17dd},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2423 {0x180b, 0x180d},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2424 {0x1885, 0x1886},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2425 {0x18a9, 0x18a9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2426 {0x1920, 0x192b},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2427 {0x1930, 0x193b},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2428 {0x1a17, 0x1a1b},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2429 {0x1a55, 0x1a5e},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2430 {0x1a60, 0x1a7c},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2431 {0x1a7f, 0x1a7f},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2432 {0x1ab0, 0x1abe},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2433 {0x1b00, 0x1b04},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2434 {0x1b34, 0x1b44},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2435 {0x1b6b, 0x1b73},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2436 {0x1b80, 0x1b82},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2437 {0x1ba1, 0x1bad},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2438 {0x1be6, 0x1bf3},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2439 {0x1c24, 0x1c37},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2440 {0x1cd0, 0x1cd2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2441 {0x1cd4, 0x1ce8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2442 {0x1ced, 0x1ced},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2443 {0x1cf2, 0x1cf4},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2444 {0x1cf7, 0x1cf9},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2445 {0x1dc0, 0x1df9},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2446 {0x1dfb, 0x1dff},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2447 {0x20d0, 0x20f0},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2448 {0x2cef, 0x2cf1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2449 {0x2d7f, 0x2d7f},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2450 {0x2de0, 0x2dff},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2451 {0x302a, 0x302f},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2452 {0x3099, 0x309a},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2453 {0xa66f, 0xa672},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2454 {0xa674, 0xa67d},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2455 {0xa69e, 0xa69f},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2456 {0xa6f0, 0xa6f1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2457 {0xa802, 0xa802},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2458 {0xa806, 0xa806},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2459 {0xa80b, 0xa80b},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2460 {0xa823, 0xa827},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2461 {0xa880, 0xa881},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2462 {0xa8b4, 0xa8c5},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2463 {0xa8e0, 0xa8f1},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2464 {0xa8ff, 0xa8ff},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2465 {0xa926, 0xa92d},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2466 {0xa947, 0xa953},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2467 {0xa980, 0xa983},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2468 {0xa9b3, 0xa9c0},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2469 {0xa9e5, 0xa9e5},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2470 {0xaa29, 0xaa36},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2471 {0xaa43, 0xaa43},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2472 {0xaa4c, 0xaa4d},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2473 {0xaa7b, 0xaa7d},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2474 {0xaab0, 0xaab0},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2475 {0xaab2, 0xaab4},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2476 {0xaab7, 0xaab8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2477 {0xaabe, 0xaabf},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2478 {0xaac1, 0xaac1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2479 {0xaaeb, 0xaaef},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2480 {0xaaf5, 0xaaf6},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2481 {0xabe3, 0xabea},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2482 {0xabec, 0xabed},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2483 {0xfb1e, 0xfb1e},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2484 {0xfe00, 0xfe0f},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2485 {0xfe20, 0xfe2f},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2486 {0x101fd, 0x101fd},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2487 {0x102e0, 0x102e0},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2488 {0x10376, 0x1037a},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2489 {0x10a01, 0x10a03},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2490 {0x10a05, 0x10a06},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2491 {0x10a0c, 0x10a0f},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2492 {0x10a38, 0x10a3a},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2493 {0x10a3f, 0x10a3f},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2494 {0x10ae5, 0x10ae6},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2495 {0x10d24, 0x10d27},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2496 {0x10f46, 0x10f50},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2497 {0x11000, 0x11002},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2498 {0x11038, 0x11046},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2499 {0x1107f, 0x11082},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2500 {0x110b0, 0x110ba},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2501 {0x11100, 0x11102},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2502 {0x11127, 0x11134},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2503 {0x11145, 0x11146},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2504 {0x11173, 0x11173},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2505 {0x11180, 0x11182},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2506 {0x111b3, 0x111c0},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2507 {0x111c9, 0x111cc},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2508 {0x1122c, 0x11237},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2509 {0x1123e, 0x1123e},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2510 {0x112df, 0x112ea},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2511 {0x11300, 0x11303},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2512 {0x1133b, 0x1133c},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2513 {0x1133e, 0x11344},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2514 {0x11347, 0x11348},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2515 {0x1134b, 0x1134d},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2516 {0x11357, 0x11357},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2517 {0x11362, 0x11363},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2518 {0x11366, 0x1136c},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2519 {0x11370, 0x11374},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2520 {0x11435, 0x11446},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2521 {0x1145e, 0x1145e},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2522 {0x114b0, 0x114c3},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2523 {0x115af, 0x115b5},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2524 {0x115b8, 0x115c0},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2525 {0x115dc, 0x115dd},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2526 {0x11630, 0x11640},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2527 {0x116ab, 0x116b7},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2528 {0x1171d, 0x1172b},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2529 {0x1182c, 0x1183a},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2530 {0x11a01, 0x11a0a},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2531 {0x11a33, 0x11a39},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2532 {0x11a3b, 0x11a3e},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2533 {0x11a47, 0x11a47},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2534 {0x11a51, 0x11a5b},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2535 {0x11a8a, 0x11a99},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2536 {0x11c2f, 0x11c36},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2537 {0x11c38, 0x11c3f},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2538 {0x11c92, 0x11ca7},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2539 {0x11ca9, 0x11cb6},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2540 {0x11d31, 0x11d36},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2541 {0x11d3a, 0x11d3a},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2542 {0x11d3c, 0x11d3d},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2543 {0x11d3f, 0x11d45},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2544 {0x11d47, 0x11d47},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2545 {0x11d8a, 0x11d8e},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2546 {0x11d90, 0x11d91},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2547 {0x11d93, 0x11d97},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2548 {0x11ef3, 0x11ef6},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2549 {0x16af0, 0x16af4},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2550 {0x16b30, 0x16b36},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2551 {0x16f51, 0x16f7e},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2552 {0x16f8f, 0x16f92},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2553 {0x1bc9d, 0x1bc9e},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2554 {0x1d165, 0x1d169},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2555 {0x1d16d, 0x1d172},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2556 {0x1d17b, 0x1d182},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2557 {0x1d185, 0x1d18b},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2558 {0x1d1aa, 0x1d1ad},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2559 {0x1d242, 0x1d244},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2560 {0x1da00, 0x1da36},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2561 {0x1da3b, 0x1da6c},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2562 {0x1da75, 0x1da75},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2563 {0x1da84, 0x1da84},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2564 {0x1da9b, 0x1da9f},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
2565 {0x1daa1, 0x1daaf},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2566 {0x1e000, 0x1e006},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2567 {0x1e008, 0x1e018},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2568 {0x1e01b, 0x1e021},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2569 {0x1e023, 0x1e024},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2570 {0x1e026, 0x1e02a},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2571 {0x1e8d0, 0x1e8d6},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
2572 {0x1e944, 0x1e94a},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2573 {0xe0100, 0xe01ef}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 return intable(combining, sizeof(combining), c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 * Return TRUE for characters that can be displayed in a normal way.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 * Only for characters of 0x100 and above!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2584 utf_printable(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 #ifdef USE_WCHAR_FUNCTIONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 * Assume the iswprint() library function works better than our own stuff.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 return iswprint(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 /* Sorted list of non-overlapping intervals.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 * 0xd800-0xdfff is reserved for UTF-16, actually illegal. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 static struct interval nonprint[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 {0x070f, 0x070f}, {0x180b, 0x180e}, {0x200b, 0x200f}, {0x202a, 0x202e},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 {0x206a, 0x206f}, {0xd800, 0xdfff}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 {0xfffe, 0xffff}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 return !intable(nonprint, sizeof(nonprint), c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2605 /* Sorted list of non-overlapping intervals of all Emoji characters,
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2606 * based on http://unicode.org/emoji/charts/emoji-list.html */
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2607 static struct interval emoji_all[] =
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2608 {
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2609 {0x203c, 0x203c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2610 {0x2049, 0x2049},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2611 {0x2122, 0x2122},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2612 {0x2139, 0x2139},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2613 {0x2194, 0x2199},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2614 {0x21a9, 0x21aa},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2615 {0x231a, 0x231b},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2616 {0x2328, 0x2328},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2617 {0x23cf, 0x23cf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2618 {0x23e9, 0x23f3},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2619 {0x23f8, 0x23fa},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2620 {0x24c2, 0x24c2},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2621 {0x25aa, 0x25ab},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2622 {0x25b6, 0x25b6},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2623 {0x25c0, 0x25c0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2624 {0x25fb, 0x25fe},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2625 {0x2600, 0x2604},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2626 {0x260e, 0x260e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2627 {0x2611, 0x2611},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2628 {0x2614, 0x2615},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2629 {0x2618, 0x2618},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2630 {0x261d, 0x261d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2631 {0x2620, 0x2620},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2632 {0x2622, 0x2623},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2633 {0x2626, 0x2626},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2634 {0x262a, 0x262a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2635 {0x262e, 0x262f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2636 {0x2638, 0x263a},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2637 {0x2640, 0x2640},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2638 {0x2642, 0x2642},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2639 {0x2648, 0x2653},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2640 {0x265f, 0x2660},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2641 {0x2663, 0x2663},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2642 {0x2665, 0x2666},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2643 {0x2668, 0x2668},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2644 {0x267b, 0x267b},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2645 {0x267e, 0x267f},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2646 {0x2692, 0x2697},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2647 {0x2699, 0x2699},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2648 {0x269b, 0x269c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2649 {0x26a0, 0x26a1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2650 {0x26aa, 0x26ab},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2651 {0x26b0, 0x26b1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2652 {0x26bd, 0x26be},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2653 {0x26c4, 0x26c5},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2654 {0x26c8, 0x26c8},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2655 {0x26ce, 0x26cf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2656 {0x26d1, 0x26d1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2657 {0x26d3, 0x26d4},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2658 {0x26e9, 0x26ea},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2659 {0x26f0, 0x26f5},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2660 {0x26f7, 0x26fa},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2661 {0x26fd, 0x26fd},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2662 {0x2702, 0x2702},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2663 {0x2705, 0x2705},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2664 {0x2708, 0x270d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2665 {0x270f, 0x270f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2666 {0x2712, 0x2712},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2667 {0x2714, 0x2714},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2668 {0x2716, 0x2716},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2669 {0x271d, 0x271d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2670 {0x2721, 0x2721},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2671 {0x2728, 0x2728},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2672 {0x2733, 0x2734},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2673 {0x2744, 0x2744},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2674 {0x2747, 0x2747},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2675 {0x274c, 0x274c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2676 {0x274e, 0x274e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2677 {0x2753, 0x2755},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2678 {0x2757, 0x2757},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2679 {0x2763, 0x2764},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2680 {0x2795, 0x2797},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2681 {0x27a1, 0x27a1},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2682 {0x27b0, 0x27b0},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2683 {0x27bf, 0x27bf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2684 {0x2934, 0x2935},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2685 {0x2b05, 0x2b07},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2686 {0x2b1b, 0x2b1c},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2687 {0x2b50, 0x2b50},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2688 {0x2b55, 0x2b55},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2689 {0x3030, 0x3030},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2690 {0x303d, 0x303d},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2691 {0x3297, 0x3297},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2692 {0x3299, 0x3299},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2693 {0x1f004, 0x1f004},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2694 {0x1f0cf, 0x1f0cf},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2695 {0x1f170, 0x1f171},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2696 {0x1f17e, 0x1f17f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2697 {0x1f18e, 0x1f18e},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2698 {0x1f191, 0x1f19a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2699 {0x1f1e6, 0x1f1ff},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2700 {0x1f201, 0x1f202},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2701 {0x1f21a, 0x1f21a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2702 {0x1f22f, 0x1f22f},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2703 {0x1f232, 0x1f23a},
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2704 {0x1f250, 0x1f251},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2705 {0x1f300, 0x1f321},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2706 {0x1f324, 0x1f393},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2707 {0x1f396, 0x1f397},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2708 {0x1f399, 0x1f39b},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2709 {0x1f39e, 0x1f3f0},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2710 {0x1f3f3, 0x1f3f5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2711 {0x1f3f7, 0x1f4fd},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2712 {0x1f4ff, 0x1f53d},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2713 {0x1f549, 0x1f54e},
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2714 {0x1f550, 0x1f567},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2715 {0x1f56f, 0x1f570},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2716 {0x1f573, 0x1f57a},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2717 {0x1f587, 0x1f587},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2718 {0x1f58a, 0x1f58d},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2719 {0x1f590, 0x1f590},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2720 {0x1f595, 0x1f596},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2721 {0x1f5a4, 0x1f5a5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2722 {0x1f5a8, 0x1f5a8},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2723 {0x1f5b1, 0x1f5b2},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2724 {0x1f5bc, 0x1f5bc},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2725 {0x1f5c2, 0x1f5c4},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2726 {0x1f5d1, 0x1f5d3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2727 {0x1f5dc, 0x1f5de},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2728 {0x1f5e1, 0x1f5e1},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2729 {0x1f5e3, 0x1f5e3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2730 {0x1f5e8, 0x1f5e8},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2731 {0x1f5ef, 0x1f5ef},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2732 {0x1f5f3, 0x1f5f3},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2733 {0x1f5fa, 0x1f64f},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2734 {0x1f680, 0x1f6c5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2735 {0x1f6cb, 0x1f6d2},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2736 {0x1f6e0, 0x1f6e5},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2737 {0x1f6e9, 0x1f6e9},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2738 {0x1f6eb, 0x1f6ec},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2739 {0x1f6f0, 0x1f6f0},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2740 {0x1f6f3, 0x1f6f9},
11539
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2741 {0x1f910, 0x1f93a},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2742 {0x1f93c, 0x1f93e},
f7ba69508fd5 patch 8.0.0652: unicode information is outdated
Christian Brabandt <cb@256bit.org>
parents: 11474
diff changeset
2743 {0x1f940, 0x1f945},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2744 {0x1f947, 0x1f970},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2745 {0x1f973, 0x1f976},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2746 {0x1f97a, 0x1f97a},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2747 {0x1f97c, 0x1f9a2},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2748 {0x1f9b0, 0x1f9b9},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2749 {0x1f9c0, 0x1f9c2},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
2750 {0x1f9d0, 0x1f9ff}
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2751 };
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2752
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 * Get class of a Unicode character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 * 0: white space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 * 1: punctuation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 * 2 or bigger: some class of word character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2760 utf_class(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 {
10724
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2762 return utf_class_buf(c, curbuf);
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2763 }
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2764
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2765 int
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2766 utf_class_buf(int c, buf_T *buf)
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2767 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 /* sorted list of non-overlapping intervals */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 static struct clinterval
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 {
5477
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2771 unsigned int first;
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2772 unsigned int last;
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2773 unsigned int class;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 } classes[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 {0x037e, 0x037e, 1}, /* Greek question mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 {0x0387, 0x0387, 1}, /* Greek ano teleia */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 {0x055a, 0x055f, 1}, /* Armenian punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 {0x0589, 0x0589, 1}, /* Armenian full stop */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 {0x05be, 0x05be, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 {0x05c0, 0x05c0, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 {0x05c3, 0x05c3, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 {0x05f3, 0x05f4, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 {0x060c, 0x060c, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 {0x061b, 0x061b, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 {0x061f, 0x061f, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 {0x066a, 0x066d, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 {0x06d4, 0x06d4, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 {0x0700, 0x070d, 1}, /* Syriac punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 {0x0964, 0x0965, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 {0x0970, 0x0970, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 {0x0df4, 0x0df4, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 {0x0e4f, 0x0e4f, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 {0x0e5a, 0x0e5b, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 {0x0f04, 0x0f12, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 {0x0f3a, 0x0f3d, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 {0x0f85, 0x0f85, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 {0x104a, 0x104f, 1}, /* Myanmar punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 {0x10fb, 0x10fb, 1}, /* Georgian punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 {0x1361, 0x1368, 1}, /* Ethiopic punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 {0x166d, 0x166e, 1}, /* Canadian Syl. punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 {0x1680, 0x1680, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 {0x169b, 0x169c, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 {0x16eb, 0x16ed, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 {0x1735, 0x1736, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 {0x17d4, 0x17dc, 1}, /* Khmer punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 {0x1800, 0x180a, 1}, /* Mongolian punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 {0x2000, 0x200b, 0}, /* spaces */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 {0x200c, 0x2027, 1}, /* punctuation and symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 {0x2028, 0x2029, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 {0x202a, 0x202e, 1}, /* punctuation and symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 {0x202f, 0x202f, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 {0x2030, 0x205e, 1}, /* punctuation and symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 {0x205f, 0x205f, 0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 {0x2060, 0x27ff, 1}, /* punctuation and symbols */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 {0x2070, 0x207f, 0x2070}, /* superscript */
1593
2430fc9a18d1 updated for version 7.1-306
vimboss
parents: 1540
diff changeset
2817 {0x2080, 0x2094, 0x2080}, /* subscript */
2430fc9a18d1 updated for version 7.1-306
vimboss
parents: 1540
diff changeset
2818 {0x20a0, 0x27ff, 1}, /* all kinds of symbols */
2430fc9a18d1 updated for version 7.1-306
vimboss
parents: 1540
diff changeset
2819 {0x2800, 0x28ff, 0x2800}, /* braille */
2430fc9a18d1 updated for version 7.1-306
vimboss
parents: 1540
diff changeset
2820 {0x2900, 0x2998, 1}, /* arrows, brackets, etc. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 {0x29d8, 0x29db, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 {0x29fc, 0x29fd, 1},
6218
d4cc9f48d5a4 updated for version 7.4.444
Bram Moolenaar <bram@vim.org>
parents: 5698
diff changeset
2823 {0x2e00, 0x2e7f, 1}, /* supplemental punctuation */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 {0x3000, 0x3000, 0}, /* ideographic space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 {0x3001, 0x3020, 1}, /* ideographic punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 {0x3030, 0x3030, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 {0x303d, 0x303d, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 {0x3040, 0x309f, 0x3040}, /* Hiragana */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 {0x30a0, 0x30ff, 0x30a0}, /* Katakana */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 {0x3300, 0x9fff, 0x4e00}, /* CJK Ideographs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 {0xac00, 0xd7a3, 0xac00}, /* Hangul Syllables */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 {0xf900, 0xfaff, 0x4e00}, /* CJK Ideographs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 {0xfd3e, 0xfd3f, 1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 {0xfe30, 0xfe6b, 1}, /* punctuation forms */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 {0xff00, 0xff0f, 1}, /* half/fullwidth ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 {0xff1a, 0xff20, 1}, /* half/fullwidth ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 {0xff3b, 0xff40, 1}, /* half/fullwidth ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 {0xff5b, 0xff65, 1}, /* half/fullwidth ASCII */
5477
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2839 {0x20000, 0x2a6df, 0x4e00}, /* CJK Ideographs */
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2840 {0x2a700, 0x2b73f, 0x4e00}, /* CJK Ideographs */
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2841 {0x2b740, 0x2b81f, 0x4e00}, /* CJK Ideographs */
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2842 {0x2f800, 0x2fa1f, 0x4e00}, /* CJK Ideographs */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 };
8680
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
2844
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 int bot = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 int top = sizeof(classes) / sizeof(struct clinterval) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 int mid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 /* First quick check for Latin1 characters, use 'iskeyword'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 if (c < 0x100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 {
335
53543f031fbc updated for version 7.0087
vimboss
parents: 318
diff changeset
2852 if (c == ' ' || c == '\t' || c == NUL || c == 0xa0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 return 0; /* blank */
10724
ae1c6bf22e5f patch 8.0.0252: not properly recognizing word characters between 128 and 255
Christian Brabandt <cb@256bit.org>
parents: 10571
diff changeset
2854 if (vim_iswordc_buf(c, buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 return 2; /* word character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 return 1; /* punctuation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 /* binary search in table */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 while (top >= bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 mid = (bot + top) / 2;
5477
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2863 if (classes[mid].last < (unsigned int)c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 bot = mid + 1;
5477
853a76c7fded updated for version 7.4.088
Bram Moolenaar <bram@vim.org>
parents: 5136
diff changeset
2865 else if (classes[mid].first > (unsigned int)c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 top = mid - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 return (int)classes[mid].class;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870
8661
a931160ffc41 commit https://github.com/vim/vim/commit/4077b33a8370afb3d5ae74e556a0119cf51fe294
Christian Brabandt <cb@256bit.org>
parents: 8629
diff changeset
2871 /* emoji */
8680
131e651fb347 commit https://github.com/vim/vim/commit/b86f10ee10bdf932df02bdaf601dffa671518a47
Christian Brabandt <cb@256bit.org>
parents: 8661
diff changeset
2872 if (intable(emoji_all, sizeof(emoji_all), c))
8661
a931160ffc41 commit https://github.com/vim/vim/commit/4077b33a8370afb3d5ae74e556a0119cf51fe294
Christian Brabandt <cb@256bit.org>
parents: 8629
diff changeset
2873 return 3;
a931160ffc41 commit https://github.com/vim/vim/commit/4077b33a8370afb3d5ae74e556a0119cf51fe294
Christian Brabandt <cb@256bit.org>
parents: 8629
diff changeset
2874
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 /* most other characters are "word" characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 return 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2879 int
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2880 utf_ambiguous_width(int c)
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2881 {
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2882 return c >= 0x80 && (intable(ambiguous, sizeof(ambiguous), c)
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2883 || intable(emoji_all, sizeof(emoji_all), c));
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2884 }
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8706
diff changeset
2885
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 * Code for Unicode case-dependent operations. Based on notes in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 * http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 * This code uses simple case folding, not full case folding.
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2890 * Last updated for Unicode 5.2.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 /*
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2894 * The following tables are built by ../runtime/tools/unicode.vim.
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2895 * They must be in numeric order, because we use binary search.
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2896 * An entry such as {0x41,0x5a,1,32} means that Unicode characters in the
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2897 * range from 0x41 to 0x5a inclusive, stepping by 1, are changed to
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2898 * folded/upper/lower by adding 32.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 int rangeStart;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 int rangeEnd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 int step;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 int offset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 } convertStruct;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907
297
9a1c2a8186b7 updated for version 7.0078
vimboss
parents: 292
diff changeset
2908 static convertStruct foldCase[] =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2910 {0x41,0x5a,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2911 {0xb5,0xb5,-1,775},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2912 {0xc0,0xd6,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2913 {0xd8,0xde,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2914 {0x100,0x12e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2915 {0x132,0x136,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2916 {0x139,0x147,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2917 {0x14a,0x176,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2918 {0x178,0x178,-1,-121},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2919 {0x179,0x17d,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2920 {0x17f,0x17f,-1,-268},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2921 {0x181,0x181,-1,210},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2922 {0x182,0x184,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2923 {0x186,0x186,-1,206},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2924 {0x187,0x187,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2925 {0x189,0x18a,1,205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2926 {0x18b,0x18b,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2927 {0x18e,0x18e,-1,79},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2928 {0x18f,0x18f,-1,202},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2929 {0x190,0x190,-1,203},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2930 {0x191,0x191,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2931 {0x193,0x193,-1,205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2932 {0x194,0x194,-1,207},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2933 {0x196,0x196,-1,211},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2934 {0x197,0x197,-1,209},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2935 {0x198,0x198,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2936 {0x19c,0x19c,-1,211},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2937 {0x19d,0x19d,-1,213},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2938 {0x19f,0x19f,-1,214},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2939 {0x1a0,0x1a4,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2940 {0x1a6,0x1a6,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2941 {0x1a7,0x1a7,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2942 {0x1a9,0x1a9,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2943 {0x1ac,0x1ac,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2944 {0x1ae,0x1ae,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2945 {0x1af,0x1af,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2946 {0x1b1,0x1b2,1,217},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2947 {0x1b3,0x1b5,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2948 {0x1b7,0x1b7,-1,219},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2949 {0x1b8,0x1bc,4,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2950 {0x1c4,0x1c4,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2951 {0x1c5,0x1c5,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2952 {0x1c7,0x1c7,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2953 {0x1c8,0x1c8,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2954 {0x1ca,0x1ca,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2955 {0x1cb,0x1db,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2956 {0x1de,0x1ee,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2957 {0x1f1,0x1f1,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2958 {0x1f2,0x1f4,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2959 {0x1f6,0x1f6,-1,-97},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2960 {0x1f7,0x1f7,-1,-56},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2961 {0x1f8,0x21e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2962 {0x220,0x220,-1,-130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2963 {0x222,0x232,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2964 {0x23a,0x23a,-1,10795},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2965 {0x23b,0x23b,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2966 {0x23d,0x23d,-1,-163},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2967 {0x23e,0x23e,-1,10792},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2968 {0x241,0x241,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2969 {0x243,0x243,-1,-195},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2970 {0x244,0x244,-1,69},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2971 {0x245,0x245,-1,71},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2972 {0x246,0x24e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2973 {0x345,0x345,-1,116},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2974 {0x370,0x372,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2975 {0x376,0x376,-1,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
2976 {0x37f,0x37f,-1,116},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2977 {0x386,0x386,-1,38},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2978 {0x388,0x38a,1,37},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2979 {0x38c,0x38c,-1,64},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2980 {0x38e,0x38f,1,63},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2981 {0x391,0x3a1,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2982 {0x3a3,0x3ab,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2983 {0x3c2,0x3c2,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2984 {0x3cf,0x3cf,-1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2985 {0x3d0,0x3d0,-1,-30},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2986 {0x3d1,0x3d1,-1,-25},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2987 {0x3d5,0x3d5,-1,-15},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2988 {0x3d6,0x3d6,-1,-22},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2989 {0x3d8,0x3ee,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2990 {0x3f0,0x3f0,-1,-54},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2991 {0x3f1,0x3f1,-1,-48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2992 {0x3f4,0x3f4,-1,-60},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2993 {0x3f5,0x3f5,-1,-64},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2994 {0x3f7,0x3f7,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2995 {0x3f9,0x3f9,-1,-7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2996 {0x3fa,0x3fa,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2997 {0x3fd,0x3ff,1,-130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2998 {0x400,0x40f,1,80},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
2999 {0x410,0x42f,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3000 {0x460,0x480,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3001 {0x48a,0x4be,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3002 {0x4c0,0x4c0,-1,15},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3003 {0x4c1,0x4cd,2,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3004 {0x4d0,0x52e,2,1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3005 {0x531,0x556,1,48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3006 {0x10a0,0x10c5,1,7264},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3007 {0x10c7,0x10cd,6,7264},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3008 {0x13f8,0x13fd,1,-8},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3009 {0x1c80,0x1c80,-1,-6222},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3010 {0x1c81,0x1c81,-1,-6221},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3011 {0x1c82,0x1c82,-1,-6212},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3012 {0x1c83,0x1c84,1,-6210},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3013 {0x1c85,0x1c85,-1,-6211},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3014 {0x1c86,0x1c86,-1,-6204},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3015 {0x1c87,0x1c87,-1,-6180},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3016 {0x1c88,0x1c88,-1,35267},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3017 {0x1c90,0x1cba,1,-3008},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3018 {0x1cbd,0x1cbf,1,-3008},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3019 {0x1e00,0x1e94,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3020 {0x1e9b,0x1e9b,-1,-58},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3021 {0x1e9e,0x1e9e,-1,-7615},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3022 {0x1ea0,0x1efe,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3023 {0x1f08,0x1f0f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3024 {0x1f18,0x1f1d,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3025 {0x1f28,0x1f2f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3026 {0x1f38,0x1f3f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3027 {0x1f48,0x1f4d,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3028 {0x1f59,0x1f5f,2,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3029 {0x1f68,0x1f6f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3030 {0x1f88,0x1f8f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3031 {0x1f98,0x1f9f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3032 {0x1fa8,0x1faf,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3033 {0x1fb8,0x1fb9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3034 {0x1fba,0x1fbb,1,-74},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3035 {0x1fbc,0x1fbc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3036 {0x1fbe,0x1fbe,-1,-7173},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3037 {0x1fc8,0x1fcb,1,-86},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3038 {0x1fcc,0x1fcc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3039 {0x1fd8,0x1fd9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3040 {0x1fda,0x1fdb,1,-100},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3041 {0x1fe8,0x1fe9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3042 {0x1fea,0x1feb,1,-112},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3043 {0x1fec,0x1fec,-1,-7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3044 {0x1ff8,0x1ff9,1,-128},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3045 {0x1ffa,0x1ffb,1,-126},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3046 {0x1ffc,0x1ffc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3047 {0x2126,0x2126,-1,-7517},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3048 {0x212a,0x212a,-1,-8383},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3049 {0x212b,0x212b,-1,-8262},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3050 {0x2132,0x2132,-1,28},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3051 {0x2160,0x216f,1,16},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3052 {0x2183,0x2183,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3053 {0x24b6,0x24cf,1,26},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3054 {0x2c00,0x2c2e,1,48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3055 {0x2c60,0x2c60,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3056 {0x2c62,0x2c62,-1,-10743},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3057 {0x2c63,0x2c63,-1,-3814},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3058 {0x2c64,0x2c64,-1,-10727},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3059 {0x2c67,0x2c6b,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3060 {0x2c6d,0x2c6d,-1,-10780},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3061 {0x2c6e,0x2c6e,-1,-10749},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3062 {0x2c6f,0x2c6f,-1,-10783},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3063 {0x2c70,0x2c70,-1,-10782},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3064 {0x2c72,0x2c75,3,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3065 {0x2c7e,0x2c7f,1,-10815},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3066 {0x2c80,0x2ce2,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3067 {0x2ceb,0x2ced,2,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3068 {0x2cf2,0xa640,31054,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3069 {0xa642,0xa66c,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3070 {0xa680,0xa69a,2,1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3071 {0xa722,0xa72e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3072 {0xa732,0xa76e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3073 {0xa779,0xa77b,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3074 {0xa77d,0xa77d,-1,-35332},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3075 {0xa77e,0xa786,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3076 {0xa78b,0xa78b,-1,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3077 {0xa78d,0xa78d,-1,-42280},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3078 {0xa790,0xa792,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3079 {0xa796,0xa7a8,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3080 {0xa7aa,0xa7aa,-1,-42308},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3081 {0xa7ab,0xa7ab,-1,-42319},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3082 {0xa7ac,0xa7ac,-1,-42315},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3083 {0xa7ad,0xa7ad,-1,-42305},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3084 {0xa7ae,0xa7ae,-1,-42308},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3085 {0xa7b0,0xa7b0,-1,-42258},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3086 {0xa7b1,0xa7b1,-1,-42282},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3087 {0xa7b2,0xa7b2,-1,-42261},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3088 {0xa7b3,0xa7b3,-1,928},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3089 {0xa7b4,0xa7b8,2,1},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3090 {0xab70,0xabbf,1,-38864},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3091 {0xff21,0xff3a,1,32},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3092 {0x10400,0x10427,1,40},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3093 {0x104b0,0x104d3,1,40},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3094 {0x10c80,0x10cb2,1,64},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3095 {0x118a0,0x118bf,1,32},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3096 {0x16e40,0x16e5f,1,32},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3097 {0x1e900,0x1e921,1,34}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 * Generic conversion function for case operations.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 * Return the converted equivalent of "a", which is a UCS-4 character. Use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 * the given conversion "table". Uses binary search on "table".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3106 utf_convert(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3107 int a,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3108 convertStruct table[],
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3109 int tableSize)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 int start, mid, end; /* indices into table */
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3112 int entries = tableSize / sizeof(convertStruct);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 start = 0;
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3115 end = entries;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 while (start < end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118 /* need to search further */
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3119 mid = (end + start) / 2;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 if (table[mid].rangeEnd < a)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 start = mid + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 end = mid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 }
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3125 if (start < entries
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3126 && table[start].rangeStart <= a
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3127 && a <= table[start].rangeEnd
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 && (a - table[start].rangeStart) % table[start].step == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 return (a + table[start].offset);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 return a;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 * Return the folded-case equivalent of "a", which is a UCS-4 character. Uses
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 * simple case folding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3139 utf_fold(int a)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 {
9477
045543df0c28 commit https://github.com/vim/vim/commit/c4a927ca8dc383190d5df2cacd3f966698b6190c
Christian Brabandt <cb@256bit.org>
parents: 9357
diff changeset
3141 if (a < 0x80)
045543df0c28 commit https://github.com/vim/vim/commit/c4a927ca8dc383190d5df2cacd3f966698b6190c
Christian Brabandt <cb@256bit.org>
parents: 9357
diff changeset
3142 /* be fast for ASCII */
045543df0c28 commit https://github.com/vim/vim/commit/c4a927ca8dc383190d5df2cacd3f966698b6190c
Christian Brabandt <cb@256bit.org>
parents: 9357
diff changeset
3143 return a >= 0x41 && a <= 0x5a ? a + 32 : a;
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3144 return utf_convert(a, foldCase, (int)sizeof(foldCase));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146
297
9a1c2a8186b7 updated for version 7.0078
vimboss
parents: 292
diff changeset
3147 static convertStruct toLower[] =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3149 {0x41,0x5a,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3150 {0xc0,0xd6,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3151 {0xd8,0xde,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3152 {0x100,0x12e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3153 {0x130,0x130,-1,-199},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3154 {0x132,0x136,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3155 {0x139,0x147,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3156 {0x14a,0x176,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3157 {0x178,0x178,-1,-121},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3158 {0x179,0x17d,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3159 {0x181,0x181,-1,210},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3160 {0x182,0x184,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3161 {0x186,0x186,-1,206},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3162 {0x187,0x187,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3163 {0x189,0x18a,1,205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3164 {0x18b,0x18b,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3165 {0x18e,0x18e,-1,79},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3166 {0x18f,0x18f,-1,202},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3167 {0x190,0x190,-1,203},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3168 {0x191,0x191,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3169 {0x193,0x193,-1,205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3170 {0x194,0x194,-1,207},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3171 {0x196,0x196,-1,211},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3172 {0x197,0x197,-1,209},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3173 {0x198,0x198,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3174 {0x19c,0x19c,-1,211},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3175 {0x19d,0x19d,-1,213},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3176 {0x19f,0x19f,-1,214},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3177 {0x1a0,0x1a4,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3178 {0x1a6,0x1a6,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3179 {0x1a7,0x1a7,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3180 {0x1a9,0x1a9,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3181 {0x1ac,0x1ac,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3182 {0x1ae,0x1ae,-1,218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3183 {0x1af,0x1af,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3184 {0x1b1,0x1b2,1,217},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3185 {0x1b3,0x1b5,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3186 {0x1b7,0x1b7,-1,219},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3187 {0x1b8,0x1bc,4,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3188 {0x1c4,0x1c4,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3189 {0x1c5,0x1c5,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3190 {0x1c7,0x1c7,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3191 {0x1c8,0x1c8,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3192 {0x1ca,0x1ca,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3193 {0x1cb,0x1db,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3194 {0x1de,0x1ee,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3195 {0x1f1,0x1f1,-1,2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3196 {0x1f2,0x1f4,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3197 {0x1f6,0x1f6,-1,-97},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3198 {0x1f7,0x1f7,-1,-56},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3199 {0x1f8,0x21e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3200 {0x220,0x220,-1,-130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3201 {0x222,0x232,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3202 {0x23a,0x23a,-1,10795},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3203 {0x23b,0x23b,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3204 {0x23d,0x23d,-1,-163},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3205 {0x23e,0x23e,-1,10792},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3206 {0x241,0x241,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3207 {0x243,0x243,-1,-195},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3208 {0x244,0x244,-1,69},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3209 {0x245,0x245,-1,71},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3210 {0x246,0x24e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3211 {0x370,0x372,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3212 {0x376,0x376,-1,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3213 {0x37f,0x37f,-1,116},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3214 {0x386,0x386,-1,38},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3215 {0x388,0x38a,1,37},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3216 {0x38c,0x38c,-1,64},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3217 {0x38e,0x38f,1,63},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3218 {0x391,0x3a1,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3219 {0x3a3,0x3ab,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3220 {0x3cf,0x3cf,-1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3221 {0x3d8,0x3ee,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3222 {0x3f4,0x3f4,-1,-60},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3223 {0x3f7,0x3f7,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3224 {0x3f9,0x3f9,-1,-7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3225 {0x3fa,0x3fa,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3226 {0x3fd,0x3ff,1,-130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3227 {0x400,0x40f,1,80},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3228 {0x410,0x42f,1,32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3229 {0x460,0x480,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3230 {0x48a,0x4be,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3231 {0x4c0,0x4c0,-1,15},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3232 {0x4c1,0x4cd,2,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3233 {0x4d0,0x52e,2,1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3234 {0x531,0x556,1,48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3235 {0x10a0,0x10c5,1,7264},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3236 {0x10c7,0x10cd,6,7264},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3237 {0x13a0,0x13ef,1,38864},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3238 {0x13f0,0x13f5,1,8},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3239 {0x1c90,0x1cba,1,-3008},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3240 {0x1cbd,0x1cbf,1,-3008},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3241 {0x1e00,0x1e94,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3242 {0x1e9e,0x1e9e,-1,-7615},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3243 {0x1ea0,0x1efe,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3244 {0x1f08,0x1f0f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3245 {0x1f18,0x1f1d,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3246 {0x1f28,0x1f2f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3247 {0x1f38,0x1f3f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3248 {0x1f48,0x1f4d,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3249 {0x1f59,0x1f5f,2,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3250 {0x1f68,0x1f6f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3251 {0x1f88,0x1f8f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3252 {0x1f98,0x1f9f,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3253 {0x1fa8,0x1faf,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3254 {0x1fb8,0x1fb9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3255 {0x1fba,0x1fbb,1,-74},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3256 {0x1fbc,0x1fbc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3257 {0x1fc8,0x1fcb,1,-86},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3258 {0x1fcc,0x1fcc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3259 {0x1fd8,0x1fd9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3260 {0x1fda,0x1fdb,1,-100},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3261 {0x1fe8,0x1fe9,1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3262 {0x1fea,0x1feb,1,-112},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3263 {0x1fec,0x1fec,-1,-7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3264 {0x1ff8,0x1ff9,1,-128},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3265 {0x1ffa,0x1ffb,1,-126},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3266 {0x1ffc,0x1ffc,-1,-9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3267 {0x2126,0x2126,-1,-7517},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3268 {0x212a,0x212a,-1,-8383},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3269 {0x212b,0x212b,-1,-8262},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3270 {0x2132,0x2132,-1,28},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3271 {0x2160,0x216f,1,16},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3272 {0x2183,0x2183,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3273 {0x24b6,0x24cf,1,26},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3274 {0x2c00,0x2c2e,1,48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3275 {0x2c60,0x2c60,-1,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3276 {0x2c62,0x2c62,-1,-10743},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3277 {0x2c63,0x2c63,-1,-3814},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3278 {0x2c64,0x2c64,-1,-10727},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3279 {0x2c67,0x2c6b,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3280 {0x2c6d,0x2c6d,-1,-10780},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3281 {0x2c6e,0x2c6e,-1,-10749},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3282 {0x2c6f,0x2c6f,-1,-10783},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3283 {0x2c70,0x2c70,-1,-10782},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3284 {0x2c72,0x2c75,3,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3285 {0x2c7e,0x2c7f,1,-10815},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3286 {0x2c80,0x2ce2,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3287 {0x2ceb,0x2ced,2,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3288 {0x2cf2,0xa640,31054,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3289 {0xa642,0xa66c,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3290 {0xa680,0xa69a,2,1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3291 {0xa722,0xa72e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3292 {0xa732,0xa76e,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3293 {0xa779,0xa77b,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3294 {0xa77d,0xa77d,-1,-35332},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3295 {0xa77e,0xa786,2,1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3296 {0xa78b,0xa78b,-1,1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3297 {0xa78d,0xa78d,-1,-42280},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3298 {0xa790,0xa792,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3299 {0xa796,0xa7a8,2,1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3300 {0xa7aa,0xa7aa,-1,-42308},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3301 {0xa7ab,0xa7ab,-1,-42319},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3302 {0xa7ac,0xa7ac,-1,-42315},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3303 {0xa7ad,0xa7ad,-1,-42305},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3304 {0xa7ae,0xa7ae,-1,-42308},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3305 {0xa7b0,0xa7b0,-1,-42258},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3306 {0xa7b1,0xa7b1,-1,-42282},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3307 {0xa7b2,0xa7b2,-1,-42261},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3308 {0xa7b3,0xa7b3,-1,928},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3309 {0xa7b4,0xa7b8,2,1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3310 {0xff21,0xff3a,1,32},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3311 {0x10400,0x10427,1,40},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3312 {0x104b0,0x104d3,1,40},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3313 {0x10c80,0x10cb2,1,64},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3314 {0x118a0,0x118bf,1,32},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3315 {0x16e40,0x16e5f,1,32},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3316 {0x1e900,0x1e921,1,34}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318
297
9a1c2a8186b7 updated for version 7.0078
vimboss
parents: 292
diff changeset
3319 static convertStruct toUpper[] =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 {
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3321 {0x61,0x7a,1,-32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3322 {0xb5,0xb5,-1,743},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3323 {0xe0,0xf6,1,-32},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3324 {0xf8,0xfe,1,-32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3325 {0xff,0xff,-1,121},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3326 {0x101,0x12f,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3327 {0x131,0x131,-1,-232},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3328 {0x133,0x137,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3329 {0x13a,0x148,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3330 {0x14b,0x177,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3331 {0x17a,0x17e,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3332 {0x17f,0x17f,-1,-300},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3333 {0x180,0x180,-1,195},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3334 {0x183,0x185,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3335 {0x188,0x18c,4,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3336 {0x192,0x192,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3337 {0x195,0x195,-1,97},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3338 {0x199,0x199,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3339 {0x19a,0x19a,-1,163},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3340 {0x19e,0x19e,-1,130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3341 {0x1a1,0x1a5,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3342 {0x1a8,0x1ad,5,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3343 {0x1b0,0x1b4,4,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3344 {0x1b6,0x1b9,3,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3345 {0x1bd,0x1bd,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3346 {0x1bf,0x1bf,-1,56},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3347 {0x1c5,0x1c5,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3348 {0x1c6,0x1c6,-1,-2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3349 {0x1c8,0x1c8,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3350 {0x1c9,0x1c9,-1,-2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3351 {0x1cb,0x1cb,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3352 {0x1cc,0x1cc,-1,-2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3353 {0x1ce,0x1dc,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3354 {0x1dd,0x1dd,-1,-79},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3355 {0x1df,0x1ef,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3356 {0x1f2,0x1f2,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3357 {0x1f3,0x1f3,-1,-2},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3358 {0x1f5,0x1f9,4,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3359 {0x1fb,0x21f,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3360 {0x223,0x233,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3361 {0x23c,0x23c,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3362 {0x23f,0x240,1,10815},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3363 {0x242,0x247,5,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3364 {0x249,0x24f,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3365 {0x250,0x250,-1,10783},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3366 {0x251,0x251,-1,10780},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3367 {0x252,0x252,-1,10782},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3368 {0x253,0x253,-1,-210},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3369 {0x254,0x254,-1,-206},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3370 {0x256,0x257,1,-205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3371 {0x259,0x259,-1,-202},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3372 {0x25b,0x25b,-1,-203},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3373 {0x25c,0x25c,-1,42319},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3374 {0x260,0x260,-1,-205},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3375 {0x261,0x261,-1,42315},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3376 {0x263,0x263,-1,-207},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3377 {0x265,0x265,-1,42280},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3378 {0x266,0x266,-1,42308},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3379 {0x268,0x268,-1,-209},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3380 {0x269,0x269,-1,-211},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3381 {0x26a,0x26a,-1,42308},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3382 {0x26b,0x26b,-1,10743},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3383 {0x26c,0x26c,-1,42305},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3384 {0x26f,0x26f,-1,-211},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3385 {0x271,0x271,-1,10749},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3386 {0x272,0x272,-1,-213},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3387 {0x275,0x275,-1,-214},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3388 {0x27d,0x27d,-1,10727},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3389 {0x280,0x283,3,-218},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3390 {0x287,0x287,-1,42282},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3391 {0x288,0x288,-1,-218},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3392 {0x289,0x289,-1,-69},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3393 {0x28a,0x28b,1,-217},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3394 {0x28c,0x28c,-1,-71},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3395 {0x292,0x292,-1,-219},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3396 {0x29d,0x29d,-1,42261},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3397 {0x29e,0x29e,-1,42258},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3398 {0x345,0x345,-1,84},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3399 {0x371,0x373,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3400 {0x377,0x377,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3401 {0x37b,0x37d,1,130},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3402 {0x3ac,0x3ac,-1,-38},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3403 {0x3ad,0x3af,1,-37},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3404 {0x3b1,0x3c1,1,-32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3405 {0x3c2,0x3c2,-1,-31},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3406 {0x3c3,0x3cb,1,-32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3407 {0x3cc,0x3cc,-1,-64},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3408 {0x3cd,0x3ce,1,-63},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3409 {0x3d0,0x3d0,-1,-62},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3410 {0x3d1,0x3d1,-1,-57},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3411 {0x3d5,0x3d5,-1,-47},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3412 {0x3d6,0x3d6,-1,-54},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3413 {0x3d7,0x3d7,-1,-8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3414 {0x3d9,0x3ef,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3415 {0x3f0,0x3f0,-1,-86},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3416 {0x3f1,0x3f1,-1,-80},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3417 {0x3f2,0x3f2,-1,7},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3418 {0x3f3,0x3f3,-1,-116},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3419 {0x3f5,0x3f5,-1,-96},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3420 {0x3f8,0x3fb,3,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3421 {0x430,0x44f,1,-32},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3422 {0x450,0x45f,1,-80},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3423 {0x461,0x481,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3424 {0x48b,0x4bf,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3425 {0x4c2,0x4ce,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3426 {0x4cf,0x4cf,-1,-15},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3427 {0x4d1,0x52f,2,-1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3428 {0x561,0x586,1,-48},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3429 {0x10d0,0x10fa,1,3008},
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3430 {0x10fd,0x10ff,1,3008},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3431 {0x13f8,0x13fd,1,-8},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3432 {0x1c80,0x1c80,-1,-6254},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3433 {0x1c81,0x1c81,-1,-6253},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3434 {0x1c82,0x1c82,-1,-6244},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3435 {0x1c83,0x1c84,1,-6242},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3436 {0x1c85,0x1c85,-1,-6243},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3437 {0x1c86,0x1c86,-1,-6236},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3438 {0x1c87,0x1c87,-1,-6181},
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3439 {0x1c88,0x1c88,-1,35266},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3440 {0x1d79,0x1d79,-1,35332},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3441 {0x1d7d,0x1d7d,-1,3814},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3442 {0x1e01,0x1e95,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3443 {0x1e9b,0x1e9b,-1,-59},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3444 {0x1ea1,0x1eff,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3445 {0x1f00,0x1f07,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3446 {0x1f10,0x1f15,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3447 {0x1f20,0x1f27,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3448 {0x1f30,0x1f37,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3449 {0x1f40,0x1f45,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3450 {0x1f51,0x1f57,2,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3451 {0x1f60,0x1f67,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3452 {0x1f70,0x1f71,1,74},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3453 {0x1f72,0x1f75,1,86},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3454 {0x1f76,0x1f77,1,100},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3455 {0x1f78,0x1f79,1,128},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3456 {0x1f7a,0x1f7b,1,112},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3457 {0x1f7c,0x1f7d,1,126},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3458 {0x1f80,0x1f87,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3459 {0x1f90,0x1f97,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3460 {0x1fa0,0x1fa7,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3461 {0x1fb0,0x1fb1,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3462 {0x1fb3,0x1fb3,-1,9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3463 {0x1fbe,0x1fbe,-1,-7205},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3464 {0x1fc3,0x1fc3,-1,9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3465 {0x1fd0,0x1fd1,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3466 {0x1fe0,0x1fe1,1,8},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3467 {0x1fe5,0x1fe5,-1,7},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3468 {0x1ff3,0x1ff3,-1,9},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3469 {0x214e,0x214e,-1,-28},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3470 {0x2170,0x217f,1,-16},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3471 {0x2184,0x2184,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3472 {0x24d0,0x24e9,1,-26},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3473 {0x2c30,0x2c5e,1,-48},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3474 {0x2c61,0x2c61,-1,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3475 {0x2c65,0x2c65,-1,-10795},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3476 {0x2c66,0x2c66,-1,-10792},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3477 {0x2c68,0x2c6c,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3478 {0x2c73,0x2c76,3,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3479 {0x2c81,0x2ce3,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3480 {0x2cec,0x2cee,2,-1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3481 {0x2cf3,0x2cf3,-1,-1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3482 {0x2d00,0x2d25,1,-7264},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3483 {0x2d27,0x2d2d,6,-7264},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3484 {0xa641,0xa66d,2,-1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3485 {0xa681,0xa69b,2,-1},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3486 {0xa723,0xa72f,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3487 {0xa733,0xa76f,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3488 {0xa77a,0xa77c,2,-1},
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3489 {0xa77f,0xa787,2,-1},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3490 {0xa78c,0xa791,5,-1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3491 {0xa793,0xa797,4,-1},
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3492 {0xa799,0xa7a9,2,-1},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3493 {0xa7b5,0xa7b9,2,-1},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3494 {0xab53,0xab53,-1,-928},
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3495 {0xab70,0xabbf,1,-38864},
2041
d5867fd6b2b7 updated for version 7.2.330
Bram Moolenaar <bram@zimbu.org>
parents: 2015
diff changeset
3496 {0xff41,0xff5a,1,-32},
6495
fe0f33ac63af updated for version 7.4.575
Bram Moolenaar <bram@vim.org>
parents: 6377
diff changeset
3497 {0x10428,0x1044f,1,-40},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3498 {0x104d8,0x104fb,1,-40},
6864
c9a5d51c9161 patch 7.4.752
Bram Moolenaar <bram@vim.org>
parents: 6495
diff changeset
3499 {0x10cc0,0x10cf2,1,-64},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3500 {0x118c0,0x118df,1,-32},
14333
65ded7626193 patch 8.1.0182: Unicode standard was updated
Christian Brabandt <cb@256bit.org>
parents: 14075
diff changeset
3501 {0x16e60,0x16e7f,1,-32},
9357
f9524b765095 commit https://github.com/vim/vim/commit/04e2b4b0c4866586ecce3d1567f9b0bdeeb31f15
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
3502 {0x1e922,0x1e943,1,-34}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 };
8682
4ce551bd5024 commit https://github.com/vim/vim/commit/d63aff0a65b955447de2fd8bfdaee29b61ce2843
Christian Brabandt <cb@256bit.org>
parents: 8680
diff changeset
3504
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 * Return the upper-case equivalent of "a", which is a UCS-4 character. Use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 * simple case folding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3510 utf_toupper(int a)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 /* If 'casemap' contains "keepascii" use ASCII style toupper(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513 if (a < 128 && (cmp_flags & CMP_KEEPASCII))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514 return TOUPPER_ASC(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515
856
8cd729851562 updated for version 7.0g
vimboss
parents: 840
diff changeset
3516 #if defined(HAVE_TOWUPPER) && defined(__STDC_ISO_10646__)
8cd729851562 updated for version 7.0g
vimboss
parents: 840
diff changeset
3517 /* If towupper() is available and handles Unicode, use it. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 if (!(cmp_flags & CMP_INTERNAL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 return towupper(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 /* For characters below 128 use locale sensitive toupper(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 if (a < 128)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 return TOUPPER_LOC(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 /* For any other characters use the above mapping table. */
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3527 return utf_convert(a, toUpper, (int)sizeof(toUpper));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3531 utf_islower(int a)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 {
3551
a8897fd5d074 updated for version 7.3.536
Bram Moolenaar <bram@vim.org>
parents: 3549
diff changeset
3533 /* German sharp s is lower case but has no upper case equivalent. */
a8897fd5d074 updated for version 7.3.536
Bram Moolenaar <bram@vim.org>
parents: 3549
diff changeset
3534 return (utf_toupper(a) != a) || a == 0xdf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 * Return the lower-case equivalent of "a", which is a UCS-4 character. Use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539 * simple case folding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3542 utf_tolower(int a)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544 /* If 'casemap' contains "keepascii" use ASCII style tolower(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 if (a < 128 && (cmp_flags & CMP_KEEPASCII))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 return TOLOWER_ASC(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547
856
8cd729851562 updated for version 7.0g
vimboss
parents: 840
diff changeset
3548 #if defined(HAVE_TOWLOWER) && defined(__STDC_ISO_10646__)
257
51a4d1c2a95b updated for version 7.0070
vimboss
parents: 236
diff changeset
3549 /* If towlower() is available and handles Unicode, use it. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 if (!(cmp_flags & CMP_INTERNAL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 return towlower(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 /* For characters below 128 use locale sensitive tolower(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 if (a < 128)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 return TOLOWER_LOC(a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 /* For any other characters use the above mapping table. */
3190
54ef99c39139 updated for version 7.3.365
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3559 return utf_convert(a, toLower, (int)sizeof(toLower));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3563 utf_isupper(int a)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 return (utf_tolower(a) != a);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3568 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3569 utf_strnicmp(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3570 char_u *s1,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3571 char_u *s2,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3572 size_t n1,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3573 size_t n2)
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3574 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3575 int c1, c2, cdiff;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3576 char_u buffer[6];
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3577
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3578 for (;;)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3579 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3580 c1 = utf_safe_read_char_adv(&s1, &n1);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3581 c2 = utf_safe_read_char_adv(&s2, &n2);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3582
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3583 if (c1 <= 0 || c2 <= 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3584 break;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3585
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3586 if (c1 == c2)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3587 continue;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3588
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3589 cdiff = utf_fold(c1) - utf_fold(c2);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3590 if (cdiff != 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3591 return cdiff;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3592 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3593
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3594 /* some string ended or has an incomplete/illegal character sequence */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3595
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3596 if (c1 == 0 || c2 == 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3597 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3598 /* some string ended. shorter string is smaller */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3599 if (c1 == 0 && c2 == 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3600 return 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3601 return c1 == 0 ? -1 : 1;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3602 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3603
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3604 /* Continue with bytewise comparison to produce some result that
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3605 * would make comparison operations involving this function transitive.
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3606 *
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3607 * If only one string had an error, comparison should be made with
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3608 * folded version of the other string. In this case it is enough
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3609 * to fold just one character to determine the result of comparison. */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3610
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3611 if (c1 != -1 && c2 == -1)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3612 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3613 n1 = utf_char2bytes(utf_fold(c1), buffer);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3614 s1 = buffer;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3615 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3616 else if (c2 != -1 && c1 == -1)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3617 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3618 n2 = utf_char2bytes(utf_fold(c2), buffer);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3619 s2 = buffer;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3620 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3621
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3622 while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3623 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3624 cdiff = (int)(*s1) - (int)(*s2);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3625 if (cdiff != 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3626 return cdiff;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3627
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3628 s1++;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3629 s2++;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3630 n1--;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3631 n2--;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3632 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3633
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3634 if (n1 > 0 && *s1 == NUL)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3635 n1 = 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3636 if (n2 > 0 && *s2 == NUL)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3637 n2 = 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3638
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3639 if (n1 == 0 && n2 == 0)
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3640 return 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3641 return n1 == 0 ? -1 : 1;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3642 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3643
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 * Version of strnicmp() that handles multi-byte characters.
4025
be1cffa1e477 updated for version 7.3.767
Bram Moolenaar <bram@vim.org>
parents: 3812
diff changeset
3646 * Needed for Big5, Shift-JIS and UTF-8 encoding. Other DBCS encodings can
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 * probably use strnicmp(), because there are no ASCII characters in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 * second byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 * Returns zero if s1 and s2 are equal (ignoring case), the difference between
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 * two characters otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3653 mb_strnicmp(char_u *s1, char_u *s2, size_t nn)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 {
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3655 int i, l;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 int cdiff;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3657 int n = (int)nn;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3659 if (enc_utf8)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 {
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3661 return utf_strnicmp(s1, s2, nn, nn);
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3662 }
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3663 else
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3664 {
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3665 for (i = 0; i < n; i += l)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 {
2961
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3667 if (s1[i] == NUL && s2[i] == NUL) /* both strings end */
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3668 return 0;
c21429d7768c updated for version 7.3.253
Bram Moolenaar <bram@vim.org>
parents: 2933
diff changeset
3669
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3670 l = (*mb_ptr2len)(s1 + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 if (l <= 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 /* Single byte: first check normally, then with ignore case. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 if (s1[i] != s2[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 {
1347
302a6aa7aca2 updated for version 7.1-061
vimboss
parents: 1205
diff changeset
3676 cdiff = MB_TOLOWER(s1[i]) - MB_TOLOWER(s2[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 if (cdiff != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 return cdiff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 /* For non-Unicode multi-byte don't ignore case. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 if (l > n - i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 l = n - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 cdiff = STRNCMP(s1 + i, s2 + i, l);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 if (cdiff != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 return cdiff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 * "g8": show bytes of the UTF-8 char under the cursor. Doesn't matter what
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 * 'encoding' has been set to.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3700 show_utf8(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 int len;
273
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3703 int rlen = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 char_u *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705 int clen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3706 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 /* Get the byte length of the char under the cursor, including composing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 * characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 line = ml_get_cursor();
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3711 len = utfc_ptr2len(line);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15474
diff changeset
3714 msg("NUL");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 clen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 if (clen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 /* start of (composing) character, get its length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 if (i > 0)
273
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3725 {
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3726 STRCPY(IObuff + rlen, "+ ");
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3727 rlen += 2;
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3728 }
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3729 clen = utf_ptr2len(line + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 }
2205
54605ada811b "g8" doesn't work properly on a NUL.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
3731 sprintf((char *)IObuff + rlen, "%02x ",
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
3732 (line[i] == NL) ? NUL : line[i]); /* NUL is stored as NL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 --clen;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3734 rlen += (int)STRLEN(IObuff + rlen);
273
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3735 if (rlen > IOSIZE - 20)
2463194c8cdd updated for version 7.0073
vimboss
parents: 257
diff changeset
3736 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15474
diff changeset
3739 msg((char *)IObuff);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 * mb_head_off() function pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 * Return offset from "p" to the first byte of the character it points into.
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3745 * If "p" points to the NUL at the end of the string return 0.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 * Returns 0 when already at the first byte of a character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3749 latin_head_off(char_u *base UNUSED, char_u *p UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3755 dbcs_head_off(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 char_u *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 /* It can't be a trailing byte when not using DBCS, at the start of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 * string or the previous byte can't start a double-byte. */
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3761 if (p <= base || MB_BYTE2LEN(p[-1]) == 1 || *p == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 /* This is slow: need to start at the base and go forward until the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 * byte we are looking for. Return 1 when we went past it, 0 otherwise. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 q = base;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 while (q < p)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3768 q += dbcs_ptr2len(q);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 return (q == p) ? 0 : 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 * Special version of dbcs_head_off() that works for ScreenLines[], where
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 * single-width DBCS_JPNU characters are stored separately.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3777 dbcs_screen_head_off(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 char_u *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 /* It can't be a trailing byte when not using DBCS, at the start of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 * string or the previous byte can't start a double-byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 * For euc-jp an 0x8e byte in the previous cell always means we have a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 * lead byte in the current cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 if (p <= base
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 || (enc_dbcs == DBCS_JPNU && p[-1] == 0x8e)
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3787 || MB_BYTE2LEN(p[-1]) == 1
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3788 || *p == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 /* This is slow: need to start at the base and go forward until the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 * byte we are looking for. Return 1 when we went past it, 0 otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 * For DBCS_JPNU look out for 0x8e, which means the second byte is not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 * stored as the next byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 q = base;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 while (q < p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 if (enc_dbcs == DBCS_JPNU && *q == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 ++q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3801 q += dbcs_ptr2len(q);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803 return (q == p) ? 0 : 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3807 utf_head_off(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 char_u *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 int c;
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3812 int len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 char_u *j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 if (*p < 0x80) /* be quick for ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 /* Skip backwards over trailing bytes: 10xx.xxxx
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 * Skip backwards again if on a composing char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 for (q = p; ; --q)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 /* Move s to the last byte of this char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 for (s = q; (s[1] & 0xc0) == 0x80; ++s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 /* Move q to the first byte of this char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 while (q > base && (*q & 0xc0) == 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 --q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 /* Check for illegal sequence. Do allow an illegal byte after where we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 * started. */
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3832 len = utf8len_tab[*q];
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
3833 if (len != (int)(s - q + 1) && len != (int)(p - q + 1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 if (q <= base)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 c = utf_ptr2char(q);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 if (utf_iscomposing(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844 if (arabic_maycombine(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 /* Advance to get a sneak-peak at the next char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 j = q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 --j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 /* Move j to the first byte of this char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 while (j > base && (*j & 0xc0) == 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 --j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 if (arabic_combine(utf_ptr2char(j), c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 return (int)(p - q);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 /*
99
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3863 * Copy a character from "*fp" to "*tp" and advance the pointers.
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3864 */
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3865 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3866 mb_copy_char(char_u **fp, char_u **tp)
99
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3867 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
3868 int l = (*mb_ptr2len)(*fp);
99
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3869
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3870 mch_memmove(*tp, *fp, (size_t)l);
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3871 *tp += l;
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3872 *fp += l;
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3873 }
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3874
04f2e519ab18 updated for version 7.0038
vimboss
parents: 42
diff changeset
3875 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 * Return the offset from "p" to the first byte of a character. When "p" is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 * at the start of a character 0 is returned, otherwise the offset to the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 * character. Can start anywhere in a stream of bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3881 mb_off_next(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 if (*p < 0x80) /* be quick for ASCII */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 /* Find the next character that isn't 10xx.xxxx */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 for (i = 0; (p[i] & 0xc0) == 0x80; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 /* Check for illegal sequence. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 for (j = 0; p - j > base; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 if ((p[-j] & 0xc0) != 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 if (utf8len_tab[p[-j]] != i + j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906 /* Only need to check if we're on a trail byte, it doesn't matter if we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 * want the offset to the next or current character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 return (*mb_head_off)(base, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3911 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 * Return the offset from "p" to the last byte of the character it points
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 * into. Can start anywhere in a stream of bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3916 mb_tail_off(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3919 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926 /* Find the last character that is 10xx.xxxx */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 for (i = 0; (p[i + 1] & 0xc0) == 0x80; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 /* Check for illegal sequence. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 for (j = 0; p - j > base; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 if ((p[-j] & 0xc0) != 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 if (utf8len_tab[p[-j]] != i + j + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 /* It can't be the first byte if a double-byte when not using DBCS, at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 * end of the string or the byte can't start a double-byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 if (enc_dbcs == 0 || p[1] == NUL || MB_BYTE2LEN(*p) == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 /* Return 1 when on the lead byte, 0 when on the tail byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 return 1 - dbcs_head_off(base, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946
776
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3947 /*
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3948 * Find the next illegal byte sequence.
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3949 */
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3950 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3951 utf_find_illegal(void)
776
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3952 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3953 pos_T pos = curwin->w_cursor;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3954 char_u *p;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3955 int len;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3956 vimconv_T vimconv;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3957 char_u *tofree = NULL;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3958
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3959 vimconv.vc_type = CONV_NONE;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3960 if (enc_utf8 && (enc_canon_props(curbuf->b_p_fenc) & ENC_8BIT))
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3961 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3962 /* 'encoding' is "utf-8" but we are editing a 8-bit encoded file,
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3963 * possibly a utf-8 file with illegal bytes. Setup for conversion
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3964 * from utf-8 to 'fileencoding'. */
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3965 convert_setup(&vimconv, p_enc, curbuf->b_p_fenc);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3966 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3967
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3968 curwin->w_cursor.coladd = 0;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3969 for (;;)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3970 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3971 p = ml_get_cursor();
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3972 if (vimconv.vc_type != CONV_NONE)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3973 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3974 vim_free(tofree);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3975 tofree = string_convert(&vimconv, p, NULL);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3976 if (tofree == NULL)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3977 break;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3978 p = tofree;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3979 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3980
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3981 while (*p != NUL)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3982 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3983 /* Illegal means that there are not enough trail bytes (checked by
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3984 * utf_ptr2len()) or too many of them (overlong sequence). */
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3985 len = utf_ptr2len(p);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3986 if (*p >= 0x80 && (len == 1
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3987 || utf_char2len(utf_ptr2char(p)) != len))
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3988 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3989 if (vimconv.vc_type == CONV_NONE)
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3990 curwin->w_cursor.col += (colnr_T)(p - ml_get_cursor());
776
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3991 else
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3992 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3993 int l;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3994
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3995 len = (int)(p - tofree);
776
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3996 for (p = ml_get_cursor(); *p != NUL && len-- > 0; p += l)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3997 {
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3998 l = utf_ptr2len(p);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
3999 curwin->w_cursor.col += l;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4000 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4001 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4002 goto theend;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4003 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4004 p += len;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4005 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4006 if (curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count)
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4007 break;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4008 ++curwin->w_cursor.lnum;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4009 curwin->w_cursor.col = 0;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4010 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4011
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4012 /* didn't find it: don't move and beep */
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4013 curwin->w_cursor = pos;
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4014 beep_flush();
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4015
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4016 theend:
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4017 vim_free(tofree);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4018 convert_setup(&vimconv, NULL, NULL);
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4019 }
5a5a080c2776 updated for version 7.0227
vimboss
parents: 765
diff changeset
4020
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
4021 #if defined(FEAT_GUI_GTK) || defined(PROTO)
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4022 /*
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4023 * Return TRUE if string "s" is a valid utf-8 string.
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4024 * When "end" is NULL stop at the first NUL.
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4025 * When "end" is positive stop there.
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4026 */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4027 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4028 utf_valid_string(char_u *s, char_u *end)
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4029 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4030 int l;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4031 char_u *p = s;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4032
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4033 while (end == NULL ? *p != NUL : p < end)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4034 {
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
4035 l = utf8len_tab_zero[*p];
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
4036 if (l == 0)
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4037 return FALSE; /* invalid lead byte */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4038 if (end != NULL && p + l > end)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4039 return FALSE; /* incomplete byte sequence */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4040 ++p;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4041 while (--l > 0)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4042 if ((*p++ & 0xc0) != 0x80)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4043 return FALSE; /* invalid trail byte */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4044 }
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4045 return TRUE;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4046 }
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4047 #endif
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
4048
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 #if defined(FEAT_GUI) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051 * Special version of mb_tail_off() for use in ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4054 dbcs_screen_tail_off(char_u *base, char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 /* It can't be the first byte if a double-byte when not using DBCS, at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 * end of the string or the byte can't start a double-byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 * For euc-jp an 0x8e byte always means we have a lead byte in the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 * cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 if (*p == NUL || p[1] == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 || (enc_dbcs == DBCS_JPNU && *p == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 || MB_BYTE2LEN(*p) == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 /* Return 1 when on the lead byte, 0 when on the tail byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 return 1 - dbcs_screen_head_off(base, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 * If the cursor moves on an trail byte, set the cursor on the lead byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 * Thus it moves left if necessary.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 * Return TRUE when the cursor was adjusted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4076 mb_adjust_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2766
diff changeset
4078 mb_adjustpos(curbuf, &curwin->w_cursor);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4082 * Adjust position "*lp" to point to the first byte of a multi-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083 * If it points to a tail byte it's moved backwards to the head byte.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4086 mb_adjustpos(buf_T *buf, pos_T *lp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089
15636
6f1c7e9a6393 patch 8.1.0826: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15597
diff changeset
4090 if (lp->col > 0 || lp->coladd > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2766
diff changeset
4092 p = ml_get_buf(buf, lp->lnum, FALSE);
13117
cfaa513efa3f patch 8.0.1433: illegal memory access after undo
Christian Brabandt <cb@256bit.org>
parents: 12948
diff changeset
4093 if (*p == NUL || (int)STRLEN(p) < lp->col)
cfaa513efa3f patch 8.0.1433: illegal memory access after undo
Christian Brabandt <cb@256bit.org>
parents: 12948
diff changeset
4094 lp->col = 0;
cfaa513efa3f patch 8.0.1433: illegal memory access after undo
Christian Brabandt <cb@256bit.org>
parents: 12948
diff changeset
4095 else
cfaa513efa3f patch 8.0.1433: illegal memory access after undo
Christian Brabandt <cb@256bit.org>
parents: 12948
diff changeset
4096 lp->col -= (*mb_head_off)(p, p + lp->col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097 /* Reset "coladd" when the cursor would be on the right half of a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 * double-wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 if (lp->coladd == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100 && p[lp->col] != TAB
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 && vim_isprintc((*mb_ptr2char)(p + lp->col))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 && ptr2cells(p + lp->col) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 lp->coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108 * Return a pointer to the character before "*p", if there is one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4111 mb_prevptr(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4112 char_u *line, /* start of the string */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4113 char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4115 if (p > line)
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 10724
diff changeset
4116 MB_PTR_BACK(line, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4120 /*
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
4121 * Return the character length of "str". Each multi-byte character (with
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
4122 * following composing characters) counts as one.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4125 mb_charlen(char_u *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 {
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4127 char_u *p = str;
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4128 int count;
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4129
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4130 if (p == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4133 for (count = 0; *p != NUL; count++)
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4134 p += (*mb_ptr2len)(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 return count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138
740
614e9af68eaa updated for version 7.0222
vimboss
parents: 714
diff changeset
4139 #if defined(FEAT_SPELL) || defined(PROTO)
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4140 /*
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4141 * Like mb_charlen() but for a string with specified length.
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4142 */
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4143 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4144 mb_charlen_len(char_u *str, int len)
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4145 {
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4146 char_u *p = str;
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4147 int count;
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4148
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4149 for (count = 0; *p != NUL && p < str + len; count++)
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4150 p += (*mb_ptr2len)(p);
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4151
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4152 return count;
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4153 }
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4154 #endif
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 492
diff changeset
4155
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 * Try to un-escape a multi-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 * Used for the "to" and "from" part of a mapping.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 * Return the un-escaped string if it is a multi-byte character, and advance
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 * "pp" to just after the bytes that formed it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 * Return NULL if no multi-byte char was found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4164 mb_unescape(char_u **pp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 {
3812
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4166 static char_u buf[6];
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4167 int n;
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4168 int m = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 char_u *str = *pp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
3812
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4172 * KS_EXTRA KE_CSI to CSI.
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4173 * Maximum length of a utf-8 character is 4 bytes. */
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4174 for (n = 0; str[n] != NUL && m < 4; ++n)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 if (str[n] == K_SPECIAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177 && str[n + 1] == KS_SPECIAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 && str[n + 2] == KE_FILLER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 buf[m++] = K_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 n += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 }
1495
04265ffbda1f updated for version 7.1-210
vimboss
parents: 1487
diff changeset
4183 else if ((str[n] == K_SPECIAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 # ifdef FEAT_GUI
1495
04265ffbda1f updated for version 7.1-210
vimboss
parents: 1487
diff changeset
4185 || str[n] == CSI
04265ffbda1f updated for version 7.1-210
vimboss
parents: 1487
diff changeset
4186 # endif
04265ffbda1f updated for version 7.1-210
vimboss
parents: 1487
diff changeset
4187 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 && str[n + 1] == KS_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 && str[n + 2] == (int)KE_CSI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 buf[m++] = CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 n += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4194 else if (str[n] == K_SPECIAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 || str[n] == CSI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4197 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199 break; /* a special key can't be a multibyte char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4200 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 buf[m++] = str[n];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202 buf[m] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 /* Return a multi-byte character if it's found. An illegal sequence
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 * will result in a 1 here. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
4206 if ((*mb_ptr2len)(buf) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4208 *pp = str + n + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 }
3812
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4211
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4212 /* Bail out quickly for ASCII. */
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4213 if (buf[0] < 128)
f86619764a1e updated for version 7.3.664
Bram Moolenaar <bram@vim.org>
parents: 3551
diff changeset
4214 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 * Return TRUE if the character at "row"/"col" on the screen is the left side
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 * of a double-width character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 * Caller must make sure "row" and "col" are not invalid!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4225 mb_lefthalve(int row, int col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 #ifdef FEAT_HANGULIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 if (composing_hangul)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 #endif
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
4231 return (*mb_off2cells)(LineOffset[row] + col,
a4365075d05c updated for version 7.1-093
vimboss
parents: 1347
diff changeset
4232 LineOffset[row] + screen_Columns) > 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 /*
1698
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1669
diff changeset
4236 * Correct a position on the screen, if it's the right half of a double-wide
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1669
diff changeset
4237 * char move it to the left half. Returns the corrected column.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4240 mb_fix_col(int col, int row)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 col = check_col(col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 row = check_row(row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 if (has_mbyte && ScreenLines != NULL && col > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 && ((enc_dbcs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 && ScreenLines[LineOffset[row] + col] != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247 && dbcs_screen_head_off(ScreenLines + LineOffset[row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 ScreenLines + LineOffset[row] + col))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 || (enc_utf8 && ScreenLines[LineOffset[row] + col] == 0)))
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4250 return col - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 return col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252 }
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4253
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
4254 static int enc_alias_search(char_u *name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 * Skip the Vim specific head of a 'encoding' name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4260 enc_skip(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262 if (STRNCMP(p, "2byte-", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 return p + 6;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4264 if (STRNCMP(p, "8bit-", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 return p + 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 * Find the canonical name for encoding "enc".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 * When the name isn't recognized, returns "enc" itself, but with all lower
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 * case characters and '_' replaced with '-'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 * Returns an allocated string. NULL for out-of-memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4276 enc_canonize(char_u *enc)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 char_u *r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 char_u *p, *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4282 if (STRCMP(enc, "default") == 0)
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4283 {
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4284 /* Use the default encoding as it's found by set_init_1(). */
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4285 r = get_encoding_default();
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4286 if (r == NULL)
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4287 r = (char_u *)"latin1";
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4288 return vim_strsave(r);
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4289 }
410fa1a31baf updated for version 7.0023
vimboss
parents: 26
diff changeset
4290
1205
b05620bdba29 updated for version 7.1b
vimboss
parents: 1080
diff changeset
4291 /* copy "enc" to allocated memory, with room for two '-' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 r = alloc((unsigned)(STRLEN(enc) + 3));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293 if (r != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 /* Make it all lower case and replace '_' with '-'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296 p = r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 for (s = enc; *s != NUL; ++s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 if (*s == '_')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 *p++ = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 *p++ = TOLOWER_ASC(*s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 /* Skip "2byte-" and "8bit-". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 p = enc_skip(r);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4308
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 474
diff changeset
4309 /* Change "microsoft-cp" to "cp". Used in some spell files. */
66080ac5dab7 updated for version 7.0130
vimboss
parents: 474
diff changeset
4310 if (STRNCMP(p, "microsoft-cp", 12) == 0)
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4311 STRMOVE(p, p + 10);
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 474
diff changeset
4312
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 /* "iso8859" -> "iso-8859" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314 if (STRNCMP(p, "iso8859", 7) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 {
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4316 STRMOVE(p + 4, p + 3);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 p[3] = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4319
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 /* "iso-8859n" -> "iso-8859-n" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 if (STRNCMP(p, "iso-8859", 8) == 0 && p[8] != '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 {
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4323 STRMOVE(p + 9, p + 8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 p[8] = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 /* "latin-N" -> "latinN" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 if (STRNCMP(p, "latin-", 6) == 0)
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4329 STRMOVE(p + 5, p + 6);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331 if (enc_canon_search(p) >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 /* canonical name can be used unmodified */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 if (p != r)
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
4335 STRMOVE(r, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 else if ((i = enc_alias_search(p)) >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 /* alias recognized, get canonical name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 vim_free(r);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 r = vim_strsave((char_u *)enc_canon_table[i].name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 return r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 * Search for an encoding alias of "name".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 * Returns -1 when not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4352 enc_alias_search(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4356 for (i = 0; enc_alias_table[i].name != NULL; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4357 if (STRCMP(name, enc_alias_table[i].name) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 return enc_alias_table[i].canon;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 }
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4361
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4362
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4363 #ifdef HAVE_LANGINFO_H
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4364 # include <langinfo.h>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4365 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
4367 #ifndef FEAT_GUI_MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 /*
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4369 * Get the canonicalized encoding from the specified locale string "locale"
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4370 * or from the environment variables LC_ALL, LC_CTYPE and LANG.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 * Returns an allocated string when successful, NULL when not.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 char_u *
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4374 enc_locale_env(char *locale)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4375 {
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4376 char *s = locale;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 char buf[50];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 if (s == NULL || *s == NUL)
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4382 if ((s = getenv("LC_ALL")) == NULL || *s == NUL)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4383 if ((s = getenv("LC_CTYPE")) == NULL || *s == NUL)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4384 s = getenv("LANG");
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4385
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4386 if (s == NULL || *s == NUL)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4387 return NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 /* The most generic locale format is:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390 * language[_territory][.codeset][@modifier][+special][,[sponsor][_revision]]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4391 * If there is a '.' remove the part before it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4392 * if there is something after the codeset, remove it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4393 * Make the name lowercase and replace '_' with '-'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4394 * Exception: "ja_JP.EUC" == "euc-jp", "zh_CN.EUC" = "euc-cn",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4395 * "ko_KR.EUC" == "euc-kr"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4396 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4397 if ((p = (char *)vim_strchr((char_u *)s, '.')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 if (p > s + 2 && STRNICMP(p + 1, "EUC", 3) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400 && !isalnum((int)p[4]) && p[4] != '-' && p[-3] == '_')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 /* copy "XY.EUC" to "euc-XY" to buf[10] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403 STRCPY(buf + 10, "euc-");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 buf[14] = p[-2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 buf[15] = p[-1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 buf[16] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 s = buf + 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 s = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 }
9495
c086632cca2e commit https://github.com/vim/vim/commit/5498a41f5a62c3877fee0185adf3bf7245a9a547
Christian Brabandt <cb@256bit.org>
parents: 9477
diff changeset
4412 for (i = 0; i < (int)sizeof(buf) - 1 && s[i] != NUL; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 if (s[i] == '_' || s[i] == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 buf[i] = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 else if (isalnum((int)s[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417 buf[i] = TOLOWER_ASC(s[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 buf[i] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423 return enc_canonize((char_u *)buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 }
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4425 #endif
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4426
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4427 /*
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4428 * Get the canonicalized encoding of the current locale.
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4429 * Returns an allocated string when successful, NULL when not.
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4430 */
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4431 char_u *
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4432 enc_locale(void)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4433 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
4434 #ifdef MSWIN
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4435 char buf[50];
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4436 long acp = GetACP();
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4437
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4438 if (acp == 1200)
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4439 STRCPY(buf, "ucs-2le");
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4440 else if (acp == 1252) /* cp1252 is used as latin1 */
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4441 STRCPY(buf, "latin1");
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4442 else
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4443 sprintf(buf, "cp%ld", acp);
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4444
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4445 return enc_canonize((char_u *)buf);
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4446 #else
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4447 char *s;
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4448
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4449 # ifdef HAVE_NL_LANGINFO_CODESET
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4450 if ((s = nl_langinfo(CODESET)) == NULL || *s == NUL)
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4451 # endif
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4452 # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4453 if ((s = setlocale(LC_CTYPE, NULL)) == NULL || *s == NUL)
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4454 # endif
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4455 s = NULL;
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4456
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4457 return enc_locale_env(s);
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4458 #endif
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4459 }
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4460
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
4461 # if defined(MSWIN) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4462 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4463 * Convert an encoding name to an MS-Windows codepage.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4464 * Returns zero if no codepage can be figured out.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4465 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4466 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4467 encname2codepage(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 int cp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4470 char_u *p = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4471 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 if (STRNCMP(p, "8bit-", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474 p += 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 else if (STRNCMP(p_enc, "2byte-", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 p += 6;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 if (p[0] == 'c' && p[1] == 'p')
5136
28e6f5f88968 updated for version 7.3.1311
Bram Moolenaar <bram@vim.org>
parents: 5025
diff changeset
4479 cp = atoi((char *)p + 2);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4480 else if ((idx = enc_canon_search(p)) >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4481 cp = enc_canon_table[idx].codepage;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4482 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4483 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4484 if (IsValidCodePage(cp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 return cp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4486 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4487 }
12547
aa3f6d093f4b patch 8.0.1152: encoding of error message wrong in Cygwin terminal
Christian Brabandt <cb@256bit.org>
parents: 12439
diff changeset
4488 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4489
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 # if defined(USE_ICONV) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 * Call iconv_open() with a check if iconv() works properly (there are broken
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494 * versions).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 * Returns (void *)-1 if failed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4496 * (should return iconv_t, but that causes problems with prototypes).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4498 void *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4499 my_iconv_open(char_u *to, char_u *from)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4501 iconv_t fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4502 #define ICONV_TESTLEN 400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 char_u tobuf[ICONV_TESTLEN];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4504 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4505 size_t tolen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 static int iconv_ok = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508 if (iconv_ok == FALSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 return (void *)-1; /* detected a broken iconv() previously */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511 #ifdef DYNAMIC_ICONV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 /* Check if the iconv.dll can be found. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 if (!iconv_enabled(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514 return (void *)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517 fd = iconv_open((char *)enc_skip(to), (char *)enc_skip(from));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4519 if (fd != (iconv_t)-1 && iconv_ok == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4521 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4522 * Do a dummy iconv() call to check if it actually works. There is a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4523 * version of iconv() on Linux that is broken. We can't ignore it,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524 * because it's wide-spread. The symptoms are that after outputting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 * the initial shift state the "to" pointer is NULL and conversion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4526 * stops for no apparent reason after about 8160 characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4528 p = (char *)tobuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 tolen = ICONV_TESTLEN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530 (void)iconv(fd, NULL, NULL, &p, &tolen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4531 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4533 iconv_ok = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4534 iconv_close(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4535 fd = (iconv_t)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4537 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4538 iconv_ok = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4539 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4540
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4541 return (void *)fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4542 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4543
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4544 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4545 * Convert the string "str[slen]" with iconv().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4546 * If "unconvlenp" is not NULL handle the string ending in an incomplete
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4547 * sequence and set "*unconvlenp" to the length of it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4548 * Returns the converted string in allocated memory. NULL for an error.
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
4549 * If resultlenp is not NULL, sets it to the result length in bytes.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4550 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4551 static char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4552 iconv_string(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4553 vimconv_T *vcp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4554 char_u *str,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4555 int slen,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4556 int *unconvlenp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4557 int *resultlenp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4558 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4559 const char *from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4560 size_t fromlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561 char *to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562 size_t tolen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563 size_t len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4564 size_t done = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 char_u *result = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4567 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4568
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 from = (char *)str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570 fromlen = slen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4571 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 if (len == 0 || ICONV_ERRNO == ICONV_E2BIG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575 /* Allocate enough room for most conversions. When re-allocating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 * increase the buffer size. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4577 len = len + fromlen * 2 + 40;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4578 p = alloc((unsigned)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4579 if (p != NULL && done > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4580 mch_memmove(p, result, done);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 result = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4583 if (result == NULL) /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 to = (char *)result + done;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 tolen = len - done - 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 /* Avoid a warning for systems with a wrong iconv() prototype by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590 * casting the second argument to void *. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4591 if (iconv(vcp->vc_fd, (void *)&from, &fromlen, &to, &tolen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4592 != (size_t)-1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4593 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594 /* Finished, append a NUL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595 *to = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4599 /* Check both ICONV_EINVAL and EINVAL, because the dynamically loaded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 * iconv library may use one of them. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601 if (!vcp->vc_fail && unconvlenp != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4602 && (ICONV_ERRNO == ICONV_EINVAL || ICONV_ERRNO == EINVAL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4604 /* Handle an incomplete sequence at the end. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4605 *to = NUL;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4606 *unconvlenp = (int)fromlen;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4607 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4608 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4610 /* Check both ICONV_EILSEQ and EILSEQ, because the dynamically loaded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4611 * iconv library may use one of them. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612 else if (!vcp->vc_fail
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4613 && (ICONV_ERRNO == ICONV_EILSEQ || ICONV_ERRNO == EILSEQ
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4614 || ICONV_ERRNO == ICONV_EINVAL || ICONV_ERRNO == EINVAL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4616 /* Can't convert: insert a '?' and skip a character. This assumes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617 * conversion from 'encoding' to something else. In other
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4618 * situations we don't know what to skip anyway. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 *to++ = '?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4620 if ((*mb_ptr2cells)((char_u *)from) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 *to++ = '?';
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
4622 if (enc_utf8)
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4623 l = utfc_ptr2len_len((char_u *)from, (int)fromlen);
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
4624 else
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
4625 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 418
diff changeset
4626 l = (*mb_ptr2len)((char_u *)from);
227
ef254e0f2365 updated for version 7.0063
vimboss
parents: 221
diff changeset
4627 if (l > (int)fromlen)
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4628 l = (int)fromlen;
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 167
diff changeset
4629 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4630 from += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4631 fromlen -= l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4632 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4633 else if (ICONV_ERRNO != ICONV_E2BIG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4634 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4635 /* conversion failed */
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13117
diff changeset
4636 VIM_CLEAR(result);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 /* Not enough room or skipping illegal sequence. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640 done = to - (char *)result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4641 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
4642
2766
415c55534d90 updated for version 7.3.159
Bram Moolenaar <bram@vim.org>
parents: 2618
diff changeset
4643 if (resultlenp != NULL && result != NULL)
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
4644 *resultlenp = (int)(to - (char *)result);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4645 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4647
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4648 # if defined(DYNAMIC_ICONV) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4649 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4650 * Dynamically load the "iconv.dll" on Win32.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4651 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4652
7734
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4653 # ifndef DYNAMIC_ICONV /* must be generating prototypes */
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4654 # define HINSTANCE int
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4655 # endif
297
9a1c2a8186b7 updated for version 7.0078
vimboss
parents: 292
diff changeset
4656 static HINSTANCE hIconvDLL = 0;
9a1c2a8186b7 updated for version 7.0078
vimboss
parents: 292
diff changeset
4657 static HINSTANCE hMsvcrtDLL = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4658
7734
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4659 # ifndef DYNAMIC_ICONV_DLL
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4660 # define DYNAMIC_ICONV_DLL "iconv.dll"
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4661 # define DYNAMIC_ICONV_DLL_ALT1 "libiconv.dll"
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4662 # define DYNAMIC_ICONV_DLL_ALT2 "libiconv2.dll"
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4663 # define DYNAMIC_ICONV_DLL_ALT3 "libiconv-2.dll"
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4664 # endif
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4665 # ifndef DYNAMIC_MSVCRT_DLL
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4666 # define DYNAMIC_MSVCRT_DLL "msvcrt.dll"
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4667 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4668
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4669 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4670 * Try opening the iconv.dll and return TRUE if iconv() can be used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4671 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4672 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4673 iconv_enabled(int verbose)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 if (hIconvDLL != 0 && hMsvcrtDLL != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 return TRUE;
7162
fe090e9cd10a commit https://github.com/vim/vim/commit/9d6ca1cc5ebb6e61cc2ef73aecfbb0bdbb65432f
Christian Brabandt <cb@256bit.org>
parents: 6864
diff changeset
4677
7734
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4678 /* The iconv DLL file goes under different names, try them all.
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4679 * Do the "2" version first, it's newer. */
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4680 #ifdef DYNAMIC_ICONV_DLL_ALT2
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4681 if (hIconvDLL == 0)
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4682 hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT2);
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4683 #endif
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4684 #ifdef DYNAMIC_ICONV_DLL_ALT3
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4685 if (hIconvDLL == 0)
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4686 hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT3);
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4687 #endif
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4688 if (hIconvDLL == 0)
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4689 hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4690 #ifdef DYNAMIC_ICONV_DLL_ALT1
7162
fe090e9cd10a commit https://github.com/vim/vim/commit/9d6ca1cc5ebb6e61cc2ef73aecfbb0bdbb65432f
Christian Brabandt <cb@256bit.org>
parents: 6864
diff changeset
4691 if (hIconvDLL == 0)
fe090e9cd10a commit https://github.com/vim/vim/commit/9d6ca1cc5ebb6e61cc2ef73aecfbb0bdbb65432f
Christian Brabandt <cb@256bit.org>
parents: 6864
diff changeset
4692 hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT1);
7734
616769d423fc commit https://github.com/vim/vim/commit/938ee834d345062cd94f8fdfd54fad0019432a83
Christian Brabandt <cb@256bit.org>
parents: 7330
diff changeset
4693 #endif
7162
fe090e9cd10a commit https://github.com/vim/vim/commit/9d6ca1cc5ebb6e61cc2ef73aecfbb0bdbb65432f
Christian Brabandt <cb@256bit.org>
parents: 6864
diff changeset
4694
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 if (hIconvDLL != 0)
2612
fa5dee44df3f updated for version 7.3.034
Bram Moolenaar <bram@vim.org>
parents: 2580
diff changeset
4696 hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4697 if (hIconvDLL == 0 || hMsvcrtDLL == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4698 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699 /* Only give the message when 'verbose' is set, otherwise it might be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4700 * done whenever a conversion is attempted. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701 if (verbose && p_verbose > 0)
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4702 {
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4703 verbose_enter();
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
4704 semsg(_(e_loadlib),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 hIconvDLL == 0 ? DYNAMIC_ICONV_DLL : DYNAMIC_MSVCRT_DLL);
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4706 verbose_leave();
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4707 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 iconv_end();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 335
diff changeset
4712 iconv = (void *)GetProcAddress(hIconvDLL, "libiconv");
7033303ea0c0 updated for version 7.0089
vimboss
parents: 335
diff changeset
4713 iconv_open = (void *)GetProcAddress(hIconvDLL, "libiconv_open");
7033303ea0c0 updated for version 7.0089
vimboss
parents: 335
diff changeset
4714 iconv_close = (void *)GetProcAddress(hIconvDLL, "libiconv_close");
7033303ea0c0 updated for version 7.0089
vimboss
parents: 335
diff changeset
4715 iconvctl = (void *)GetProcAddress(hIconvDLL, "libiconvctl");
10571
b726d3ea70bc patch 8.0.0175: setting language on MS-Windows does not always work
Christian Brabandt <cb@256bit.org>
parents: 10460
diff changeset
4716 iconv_errno = get_dll_import_func(hIconvDLL, "_errno");
4025
be1cffa1e477 updated for version 7.3.767
Bram Moolenaar <bram@vim.org>
parents: 3812
diff changeset
4717 if (iconv_errno == NULL)
be1cffa1e477 updated for version 7.3.767
Bram Moolenaar <bram@vim.org>
parents: 3812
diff changeset
4718 iconv_errno = (void *)GetProcAddress(hMsvcrtDLL, "_errno");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 if (iconv == NULL || iconv_open == NULL || iconv_close == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720 || iconvctl == NULL || iconv_errno == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 iconv_end();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723 if (verbose && p_verbose > 0)
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4724 {
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4725 verbose_enter();
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
4726 semsg(_(e_loadfunc), "for libiconv");
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4727 verbose_leave();
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
4728 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4729 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4731 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4732 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4733
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4734 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4735 iconv_end(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4737 /* Don't use iconv() when inputting or outputting characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 if (input_conv.vc_type == CONV_ICONV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4739 convert_setup(&input_conv, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4740 if (output_conv.vc_type == CONV_ICONV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4741 convert_setup(&output_conv, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4742
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4743 if (hIconvDLL != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 FreeLibrary(hIconvDLL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 if (hMsvcrtDLL != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 FreeLibrary(hMsvcrtDLL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 hIconvDLL = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 hMsvcrtDLL = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 # endif /* DYNAMIC_ICONV */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 # endif /* USE_ICONV */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4754 #ifdef FEAT_GUI
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4755 # define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4756 # define USE_IMSTATUSFUNC (!gui.in_use && *p_imsf != NUL)
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4757 #else
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4758 # define USE_IMACTIVATEFUNC (*p_imaf != NUL)
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4759 # define USE_IMSTATUSFUNC (*p_imsf != NUL)
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4760 #endif
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
4761
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
4762 #if defined(FEAT_EVAL) && (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM))
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4763 static void
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4764 call_imactivatefunc(int active)
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4765 {
14071
c1fcfafa8d1a patch 8.1.0053: first argument of 'completefunc' has inconsistent type
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
4766 typval_T argv[2];
c1fcfafa8d1a patch 8.1.0053: first argument of 'completefunc' has inconsistent type
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
4767
c1fcfafa8d1a patch 8.1.0053: first argument of 'completefunc' has inconsistent type
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
4768 argv[0].v_type = VAR_NUMBER;
c1fcfafa8d1a patch 8.1.0053: first argument of 'completefunc' has inconsistent type
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
4769 argv[0].vval.v_number = active ? 1 : 0;
14075
320956bddcef patch 8.1.0055: complete test has wrong order of arguments
Christian Brabandt <cb@256bit.org>
parents: 14071
diff changeset
4770 argv[1].v_type = VAR_UNKNOWN;
14439
e4c553e9132b patch 8.1.0233: "safe" argument of call_vim_function() is always FALSE
Christian Brabandt <cb@256bit.org>
parents: 14333
diff changeset
4771 (void)call_func_retnr(p_imaf, 1, argv);
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4772 }
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4773
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4774 static int
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4775 call_imstatusfunc(void)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4776 {
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4777 int is_active;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4778
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4779 /* FIXME: Don't execute user function in unsafe situation. */
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
4780 if (exiting || is_autocmd_blocked())
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4781 return FALSE;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4782 /* FIXME: :py print 'xxx' is shown duplicate result.
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4783 * Use silent to avoid it. */
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4784 ++msg_silent;
14439
e4c553e9132b patch 8.1.0233: "safe" argument of call_vim_function() is always FALSE
Christian Brabandt <cb@256bit.org>
parents: 14333
diff changeset
4785 is_active = call_func_retnr(p_imsf, 0, NULL);
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4786 --msg_silent;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4787 return (is_active > 0);
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4788 }
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4789 #endif
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
4790
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4791 #if defined(FEAT_XIM) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4792
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4793 # if defined(FEAT_GUI_GTK) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4794 static int xim_has_preediting INIT(= FALSE); /* IM current status */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4796 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4797 * Set preedit_start_col to the current cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4798 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4799 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4800 init_preedit_start_col(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 if (State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 preedit_start_col = cmdline_getvcol_cursor();
7330
8ab712f2c3b8 commit https://github.com/vim/vim/commit/9ec021a2b0dd35ba744a8e2a9430a643c85b922a
Christian Brabandt <cb@256bit.org>
parents: 7162
diff changeset
4804 else if (curwin != NULL && curwin->w_buffer != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 getvcol(curwin, &curwin->w_cursor, &preedit_start_col, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 /* Prevent that preediting marks the buffer as changed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 xim_changed_while_preediting = curbuf->b_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4809
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4810 static int im_is_active = FALSE; /* IM is enabled for current mode */
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
4811 static int preedit_is_active = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812 static int im_preedit_cursor = 0; /* cursor offset in characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 static int im_preedit_trailing = 0; /* number of characters after cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815 static unsigned long im_commit_handler_id = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 static unsigned int im_activatekey_keyval = GDK_VoidSymbol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 static unsigned int im_activatekey_state = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4819 static GtkWidget *preedit_window = NULL;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4820 static GtkWidget *preedit_label = NULL;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4821
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4822 static void im_preedit_window_set_position(void);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4823
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 im_set_active(int active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 int was_active;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828
5008
3717d569027d updated for version 7.3.1248
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4829 was_active = !!im_get_status();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 im_is_active = (active && !p_imdisable);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4832 if (im_is_active != was_active)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
4833 xim_reset();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837 xim_set_focus(int focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4838 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4839 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4840 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4841 if (focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4842 gtk_im_context_focus_in(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 gtk_im_context_focus_out(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4846 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4848 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 im_set_position(int row, int col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4851 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 GdkRectangle area;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4855 area.x = FILL_X(col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 area.y = FILL_Y(row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 area.width = gui.char_width * (mb_lefthalve(row, col) ? 2 : 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4858 area.height = gui.char_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4859
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4860 gtk_im_context_set_cursor_location(xic, &area);
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4861
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4862 if (p_imst == IM_OVER_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4863 im_preedit_window_set_position();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4865 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4866
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4867 # if 0 || defined(PROTO) /* apparently only used in gui_x11.c */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4868 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4869 xim_set_preedit(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4870 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4871 im_set_position(gui.row, gui.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4873 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4874
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4875 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4876 im_add_to_input(char_u *str, int len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4877 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4878 /* Convert from 'termencoding' (always "utf-8") to 'encoding' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4879 if (input_conv.vc_type != CONV_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4881 str = string_convert(&input_conv, str, &len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4882 g_return_if_fail(str != NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4883 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4885 add_to_input_buf_csi(str, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4886
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4887 if (input_conv.vc_type != CONV_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4888 vim_free(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4889
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4890 if (p_mh) /* blank out the pointer if necessary */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 gui_mch_mousehide(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4894 static void
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4895 im_preedit_window_set_position(void)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4896 {
14575
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4897 int x, y, width, height;
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4898 int screen_x, screen_y, screen_width, screen_height;
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4899
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4900 if (preedit_window == NULL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4901 return;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4902
14575
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4903 gui_gtk_get_screen_geom_of_win(gui.drawarea,
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4904 &screen_x, &screen_y, &screen_width, &screen_height);
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4905 gdk_window_get_origin(gtk_widget_get_window(gui.drawarea), &x, &y);
14575
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4906 gtk_window_get_size(GTK_WINDOW(preedit_window), &width, &height);
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4907 x = x + FILL_X(gui.col);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4908 y = y + FILL_Y(gui.row);
14575
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4909 if (x + width > screen_x + screen_width)
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4910 x = screen_x + screen_width - width;
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4911 if (y + height > screen_y + screen_height)
f8cd07a1cbb5 patch 8.1.0301: GTK: input method popup displayed on wrong screen.
Christian Brabandt <cb@256bit.org>
parents: 14439
diff changeset
4912 y = screen_y + screen_height - height;
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4913 gtk_window_move(GTK_WINDOW(preedit_window), x, y);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4914 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4915
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4916 static void
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4917 im_preedit_window_open()
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4918 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4919 char *preedit_string;
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4920 #if !GTK_CHECK_VERSION(3,16,0)
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4921 char buf[8];
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4922 #endif
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4923 PangoAttrList *attr_list;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4924 PangoLayout *layout;
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4925 #if GTK_CHECK_VERSION(3,0,0)
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4926 # if !GTK_CHECK_VERSION(3,16,0)
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4927 GdkRGBA color;
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4928 # endif
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4929 #else
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4930 GdkColor color;
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4931 #endif
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4932 gint w, h;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4933
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4934 if (preedit_window == NULL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4935 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4936 preedit_window = gtk_window_new(GTK_WINDOW_POPUP);
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4937 gtk_window_set_transient_for(GTK_WINDOW(preedit_window),
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4938 GTK_WINDOW(gui.mainwin));
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4939 preedit_label = gtk_label_new("");
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4940 gtk_widget_set_name(preedit_label, "vim-gui-preedit-area");
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4941 gtk_container_add(GTK_CONTAINER(preedit_window), preedit_label);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4942 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
4943
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4944 #if GTK_CHECK_VERSION(3,16,0)
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4945 {
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4946 GtkStyleContext * const context
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4947 = gtk_widget_get_style_context(gui.drawarea);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4948 GtkCssProvider * const provider = gtk_css_provider_new();
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4949 gchar *css = NULL;
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4950 const char * const fontname
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4951 = pango_font_description_get_family(gui.norm_font);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4952 gint fontsize
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4953 = pango_font_description_get_size(gui.norm_font) / PANGO_SCALE;
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4954 gchar *fontsize_propval = NULL;
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4955
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4956 if (!pango_font_description_get_size_is_absolute(gui.norm_font))
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4957 {
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4958 /* fontsize was given in points. Convert it into that in pixels
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4959 * to use with CSS. */
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4960 GdkScreen * const screen
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4961 = gdk_window_get_screen(gtk_widget_get_window(gui.mainwin));
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4962 const gdouble dpi = gdk_screen_get_resolution(screen);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4963 fontsize = dpi * fontsize / 72;
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4964 }
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4965 if (fontsize > 0)
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4966 fontsize_propval = g_strdup_printf("%dpx", fontsize);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4967 else
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4968 fontsize_propval = g_strdup_printf("inherit");
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4969
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4970 css = g_strdup_printf(
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4971 "widget#vim-gui-preedit-area {\n"
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4972 " font-family: %s,monospace;\n"
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4973 " font-size: %s;\n"
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4974 " color: #%.2lx%.2lx%.2lx;\n"
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4975 " background-color: #%.2lx%.2lx%.2lx;\n"
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4976 "}\n",
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4977 fontname != NULL ? fontname : "inherit",
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4978 fontsize_propval,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4979 (gui.norm_pixel >> 16) & 0xff,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4980 (gui.norm_pixel >> 8) & 0xff,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4981 gui.norm_pixel & 0xff,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4982 (gui.back_pixel >> 16) & 0xff,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4983 (gui.back_pixel >> 8) & 0xff,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4984 gui.back_pixel & 0xff);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4985
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4986 gtk_css_provider_load_from_data(provider, css, -1, NULL);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4987 gtk_style_context_add_provider(context,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4988 GTK_STYLE_PROVIDER(provider), G_MAXUINT);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4989
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4990 g_free(css);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4991 g_free(fontsize_propval);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4992 g_object_unref(provider);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4993 }
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4994 #elif GTK_CHECK_VERSION(3,0,0)
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4995 gtk_widget_override_font(preedit_label, gui.norm_font);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4996
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4997 vim_snprintf(buf, sizeof(buf), "#%06X", gui.norm_pixel);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4998 gdk_rgba_parse(&color, buf);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
4999 gtk_widget_override_color(preedit_label, GTK_STATE_FLAG_NORMAL, &color);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5000
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5001 vim_snprintf(buf, sizeof(buf), "#%06X", gui.back_pixel);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5002 gdk_rgba_parse(&color, buf);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5003 gtk_widget_override_background_color(preedit_label, GTK_STATE_FLAG_NORMAL,
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5004 &color);
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5005 #else
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5006 gtk_widget_modify_font(preedit_label, gui.norm_font);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5007
13610
e76499e85744 patch 8.0.1677: no compiler warning for wrong format in vim_snprintf()
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
5008 vim_snprintf(buf, sizeof(buf), "#%06X", (unsigned)gui.norm_pixel);
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5009 gdk_color_parse(buf, &color);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5010 gtk_widget_modify_fg(preedit_label, GTK_STATE_NORMAL, &color);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5011
13610
e76499e85744 patch 8.0.1677: no compiler warning for wrong format in vim_snprintf()
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
5012 vim_snprintf(buf, sizeof(buf), "#%06X", (unsigned)gui.back_pixel);
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5013 gdk_color_parse(buf, &color);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5014 gtk_widget_modify_bg(preedit_window, GTK_STATE_NORMAL, &color);
12439
683fdeb89017 patch 8.0.1099: warnings for GDK calls
Christian Brabandt <cb@256bit.org>
parents: 12409
diff changeset
5015 #endif
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5016
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5017 gtk_im_context_get_preedit_string(xic, &preedit_string, &attr_list, NULL);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5018
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5019 if (preedit_string[0] != NUL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5020 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5021 gtk_label_set_text(GTK_LABEL(preedit_label), preedit_string);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5022 gtk_label_set_attributes(GTK_LABEL(preedit_label), attr_list);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5023
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5024 layout = gtk_label_get_layout(GTK_LABEL(preedit_label));
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5025 pango_layout_get_pixel_size(layout, &w, &h);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5026 h = MAX(h, gui.char_height);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5027 gtk_window_resize(GTK_WINDOW(preedit_window), w, h);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5028
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5029 gtk_widget_show_all(preedit_window);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5030
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5031 im_preedit_window_set_position();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5032 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5033
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5034 g_free(preedit_string);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5035 pango_attr_list_unref(attr_list);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5036 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5037
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5038 static void
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5039 im_preedit_window_close()
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5040 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5041 if (preedit_window != NULL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5042 gtk_widget_hide(preedit_window);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5043 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5044
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5045 static void
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5046 im_show_preedit()
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5047 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5048 im_preedit_window_open();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5049
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5050 if (p_mh) /* blank out the pointer if necessary */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5051 gui_mch_mousehide(TRUE);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5052 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5053
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5054 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5055 im_delete_preedit(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5057 char_u bskey[] = {CSI, 'k', 'b'};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5058 char_u delkey[] = {CSI, 'k', 'D'};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5059
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5060 if (p_imst == IM_OVER_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5061 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5062 im_preedit_window_close();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5063 return;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5064 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5065
12361
d3175a3bd8cd patch 8.0.1060: when imstyle is one, mapping <Left> breaks preediting
Christian Brabandt <cb@256bit.org>
parents: 12293
diff changeset
5066 if (State & NORMAL
d3175a3bd8cd patch 8.0.1060: when imstyle is one, mapping <Left> breaks preediting
Christian Brabandt <cb@256bit.org>
parents: 12293
diff changeset
5067 #ifdef FEAT_TERMINAL
d3175a3bd8cd patch 8.0.1060: when imstyle is one, mapping <Left> breaks preediting
Christian Brabandt <cb@256bit.org>
parents: 12293
diff changeset
5068 && !term_use_loop()
d3175a3bd8cd patch 8.0.1060: when imstyle is one, mapping <Left> breaks preediting
Christian Brabandt <cb@256bit.org>
parents: 12293
diff changeset
5069 #endif
d3175a3bd8cd patch 8.0.1060: when imstyle is one, mapping <Left> breaks preediting
Christian Brabandt <cb@256bit.org>
parents: 12293
diff changeset
5070 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5071 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5072 im_preedit_cursor = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5075 for (; im_preedit_cursor > 0; --im_preedit_cursor)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5076 add_to_input_buf(bskey, (int)sizeof(bskey));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5077
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5078 for (; im_preedit_trailing > 0; --im_preedit_trailing)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5079 add_to_input_buf(delkey, (int)sizeof(delkey));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5080 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5081
941
d95676480093 updated for version 7.0-067
vimboss
parents: 932
diff changeset
5082 /*
d95676480093 updated for version 7.0-067
vimboss
parents: 932
diff changeset
5083 * Move the cursor left by "num_move_back" characters.
d95676480093 updated for version 7.0-067
vimboss
parents: 932
diff changeset
5084 * Note that ins_left() checks im_is_preediting() to avoid breaking undo for
d95676480093 updated for version 7.0-067
vimboss
parents: 932
diff changeset
5085 * these K_LEFT keys.
d95676480093 updated for version 7.0-067
vimboss
parents: 932
diff changeset
5086 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5087 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5088 im_correct_cursor(int num_move_back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5089 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5090 char_u backkey[] = {CSI, 'k', 'l'};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5092 if (State & NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5093 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5094 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5095 if ((State & CMDLINE) == 0 && curwin != NULL && curwin->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5096 backkey[2] = 'r';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5097 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5098 for (; num_move_back > 0; --num_move_back)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099 add_to_input_buf(backkey, (int)sizeof(backkey));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5100 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5102 static int xim_expected_char = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5103 static int xim_ignored_char = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5105 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5106 * Update the mode and cursor while in an IM callback.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5107 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5108 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5109 im_show_info(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5111 int old_vgetc_busy;
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 811
diff changeset
5112
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5113 old_vgetc_busy = vgetc_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5114 vgetc_busy = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5115 showmode();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5116 vgetc_busy = old_vgetc_busy;
3402
276d58e9265c updated for version 7.3.467
Bram Moolenaar <bram@vim.org>
parents: 3190
diff changeset
5117 if ((State & NORMAL) || (State & INSERT))
276d58e9265c updated for version 7.3.467
Bram Moolenaar <bram@vim.org>
parents: 3190
diff changeset
5118 setcursor();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5119 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5122 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5123 * Callback invoked when the user finished preediting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5124 * Put the final string into the input buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5125 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5126 static void
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5127 im_commit_cb(GtkIMContext *context UNUSED,
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5128 const gchar *str,
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5129 gpointer data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 {
2338
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5131 int slen = (int)STRLEN(str);
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5132 int add_to_input = TRUE;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5133 int clen;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5134 int len = slen;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5135 int commit_with_preedit = TRUE;
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
5136 char_u *im_str;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5138 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 xim_log("im_commit_cb(): %s\n", str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5141
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5142 if (p_imst == IM_ON_THE_SPOT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 {
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5144 /* The imhangul module doesn't reset the preedit string before
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5145 * committing. Call im_delete_preedit() to work around that. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5146 im_delete_preedit();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5147
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5148 /* Indicate that preediting has finished. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5149 if (preedit_start_col == MAXCOL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5150 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5151 init_preedit_start_col();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5152 commit_with_preedit = FALSE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5153 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5154
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5155 /* The thing which setting "preedit_start_col" to MAXCOL means that
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5156 * "preedit_start_col" will be set forcedly when calling
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5157 * preedit_changed_cb() next time.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5158 * "preedit_start_col" should not reset with MAXCOL on this part. Vim
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5159 * is simulating the preediting by using add_to_input_str(). when
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5160 * preedit begin immediately before committed, the typebuf is not
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5161 * flushed to screen, then it can't get correct "preedit_start_col".
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5162 * Thus, it should calculate the cells by adding cells of the committed
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5163 * string. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5164 if (input_conv.vc_type != CONV_NONE)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5165 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5166 im_str = string_convert(&input_conv, (char_u *)str, &len);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5167 g_return_if_fail(im_str != NULL);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5168 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5169 else
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5170 im_str = (char_u *)str;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5171
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5172 clen = mb_string2cells(im_str, len);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5173
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5174 if (input_conv.vc_type != CONV_NONE)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5175 vim_free(im_str);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5176 preedit_start_col += clen;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5177 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5179 /* Is this a single character that matches a keypad key that's just
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180 * been pressed? If so, we don't want it to be entered as such - let
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5181 * us carry on processing the raw keycode so that it may be used in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5182 * mappings as <kSomething>. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5183 if (xim_expected_char != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5184 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5185 /* We're currently processing a keypad or other special key */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5186 if (slen == 1 && str[0] == xim_expected_char)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5188 /* It's a match - don't do it here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5189 xim_ignored_char = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5190 add_to_input = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5191 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5192 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5193 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5194 /* Not a match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5195 xim_ignored_char = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5197 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199 if (add_to_input)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 im_add_to_input((char_u *)str, slen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5202 if (p_imst == IM_ON_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5203 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5204 /* Inserting chars while "im_is_active" is set does not cause a
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5205 * change of buffer. When the chars are committed the buffer must be
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5206 * marked as changed. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5207 if (!commit_with_preedit)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5208 preedit_start_col = MAXCOL;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5209
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5210 /* This flag is used in changed() at next call. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5211 xim_changed_while_preediting = TRUE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5212 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5214 if (gtk_main_level() > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5215 gtk_main_quit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5216 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5217
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5218 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5219 * Callback invoked after start to the preedit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5221 static void
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5222 im_preedit_start_cb(GtkIMContext *context UNUSED, gpointer data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5224 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5225 xim_log("im_preedit_start_cb()\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5228 im_is_active = TRUE;
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
5229 preedit_is_active = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5230 gui_update_cursor(TRUE, FALSE);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
5231 im_show_info();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5235 * Callback invoked after end to the preedit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5236 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5237 static void
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5238 im_preedit_end_cb(GtkIMContext *context UNUSED, gpointer data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5240 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5241 xim_log("im_preedit_end_cb()\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5242 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243 im_delete_preedit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5245 /* Indicate that preediting has finished */
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5246 if (p_imst == IM_ON_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5247 preedit_start_col = MAXCOL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248 xim_has_preediting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
5250 #if 0
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
5251 /* Removal of this line suggested by Takuhiro Nishioka. Fixes that IM was
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
5252 * switched off unintentionally. We now use preedit_is_active (added by
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
5253 * SungHyun Nam). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254 im_is_active = FALSE;
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
5255 #endif
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
5256 preedit_is_active = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5257 gui_update_cursor(TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5258 im_show_info();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5259 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5260
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5261 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5262 * Callback invoked after changes to the preedit string. If the preedit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 * string was empty before, remember the preedit start column so we know
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5264 * where to apply feedback attributes. Delete the previous preedit string
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5265 * if there was one, save the new preedit cursor offset, and put the new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5266 * string into the input buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5267 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5268 * TODO: The pragmatic "put into input buffer" approach used here has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5269 * several fundamental problems:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5270 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5271 * - The characters in the preedit string are subject to remapping.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5272 * That's broken, only the finally committed string should be remapped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5273 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5274 * - There is a race condition involved: The retrieved value for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5275 * current cursor position will be wrong if any unprocessed characters
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5276 * are still queued in the input buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5277 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5278 * - Due to the lack of synchronization between the file buffer in memory
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5279 * and any typed characters, it's practically impossible to implement the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5280 * "retrieve_surrounding" and "delete_surrounding" signals reliably. IM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5281 * modules for languages such as Thai are likely to rely on this feature
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5282 * for proper operation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5283 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5284 * Conclusions: I think support for preediting needs to be moved to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5285 * core parts of Vim. Ideally, until it has been committed, the preediting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5286 * string should only be displayed and not affect the buffer content at all.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5287 * The question how to deal with the synchronization issue still remains.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5288 * Circumventing the input buffer is probably not desirable. Anyway, I think
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5289 * implementing "retrieve_surrounding" is the only hard problem.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5290 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5291 * One way to solve all of this in a clean manner would be to queue all key
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5292 * press/release events "as is" in the input buffer, and apply the IM filtering
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5293 * at the receiving end of the queue. This, however, would have a rather large
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5294 * impact on the code base. If there is an easy way to force processing of all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295 * remaining input from within the "retrieve_surrounding" signal handler, this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 * might not be necessary. Gotta ask on vim-dev for opinions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5297 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 static void
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1757
diff changeset
5299 im_preedit_changed_cb(GtkIMContext *context, gpointer data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5300 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 char *preedit_string = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5302 int cursor_index = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5303 int num_move_back = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5304 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5305 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5306 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5307
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5308 if (p_imst == IM_ON_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5309 gtk_im_context_get_preedit_string(context,
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5310 &preedit_string, NULL,
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5311 &cursor_index);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5312 else
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5313 gtk_im_context_get_preedit_string(context,
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5314 &preedit_string, NULL,
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5315 NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5316
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5317 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318 xim_log("im_preedit_changed_cb(): %s\n", preedit_string);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5321 g_return_if_fail(preedit_string != NULL); /* just in case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5322
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5323 if (p_imst == IM_OVER_THE_SPOT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5324 {
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5325 if (preedit_string[0] == NUL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5326 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5327 xim_has_preediting = FALSE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5328 im_delete_preedit();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5329 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5330 else
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5331 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5332 xim_has_preediting = TRUE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5333 im_show_preedit();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5334 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5335 }
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5336 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5337 {
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5338 /* If preedit_start_col is MAXCOL set it to the current cursor position. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5339 if (preedit_start_col == MAXCOL && preedit_string[0] != '\0')
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5340 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5341 xim_has_preediting = TRUE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5342
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5343 /* Urgh, this breaks if the input buffer isn't empty now */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5344 init_preedit_start_col();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5345 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5346 else if (cursor_index == 0 && preedit_string[0] == '\0')
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5347 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5348 xim_has_preediting = FALSE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5349
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5350 /* If at the start position (after typing backspace)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5351 * preedit_start_col must be reset. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5352 preedit_start_col = MAXCOL;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5353 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5354
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5355 im_delete_preedit();
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5356
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5357 /*
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5358 * Compute the end of the preediting area: "preedit_end_col".
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5359 * According to the documentation of gtk_im_context_get_preedit_string(),
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5360 * the cursor_pos output argument returns the offset in bytes. This is
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5361 * unfortunately not true -- real life shows the offset is in characters,
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5362 * and the GTK+ source code agrees with me. Will file a bug later.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5363 */
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5364 if (preedit_start_col != MAXCOL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5365 preedit_end_col = preedit_start_col;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5366 str = (char_u *)preedit_string;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5367 for (p = str, i = 0; *p != NUL; p += utf_byte2len(*p), ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5368 {
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5369 int is_composing;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5370
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5371 is_composing = ((*p & 0x80) != 0 && utf_iscomposing(utf_ptr2char(p)));
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5372 /*
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5373 * These offsets are used as counters when generating <BS> and <Del>
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5374 * to delete the preedit string. So don't count composing characters
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5375 * unless 'delcombine' is enabled.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5376 */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5377 if (!is_composing || p_deco)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5378 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5379 if (i < cursor_index)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5380 ++im_preedit_cursor;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5381 else
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5382 ++im_preedit_trailing;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5383 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5384 if (!is_composing && i >= cursor_index)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5385 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5386 /* This is essentially the same as im_preedit_trailing, except
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5387 * composing characters are not counted even if p_deco is set. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5388 ++num_move_back;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5389 }
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5390 if (preedit_start_col != MAXCOL)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5391 preedit_end_col += utf_ptr2cells(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5392 }
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5393
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5394 if (p > str)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5395 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5396 im_add_to_input(str, (int)(p - str));
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5397 im_correct_cursor(num_move_back);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5398 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 g_free(preedit_string);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5403 if (gtk_main_level() > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404 gtk_main_quit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5407 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5408 * Translate the Pango attributes at iter to Vim highlighting attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5409 * Ignore attributes not supported by Vim highlighting. This shouldn't have
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5410 * too much impact -- right now we handle even more attributes than necessary
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 * for the IM modules I tested with.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5412 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5413 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5414 translate_pango_attributes(PangoAttrIterator *iter)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5416 PangoAttribute *attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5417 int char_attr = HL_NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5418
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419 attr = pango_attr_iterator_get(iter, PANGO_ATTR_UNDERLINE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5420 if (attr != NULL && ((PangoAttrInt *)attr)->value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5421 != (int)PANGO_UNDERLINE_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5422 char_attr |= HL_UNDERLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 attr = pango_attr_iterator_get(iter, PANGO_ATTR_WEIGHT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 if (attr != NULL && ((PangoAttrInt *)attr)->value >= (int)PANGO_WEIGHT_BOLD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 char_attr |= HL_BOLD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 attr = pango_attr_iterator_get(iter, PANGO_ATTR_STYLE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5429 if (attr != NULL && ((PangoAttrInt *)attr)->value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5430 != (int)PANGO_STYLE_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5431 char_attr |= HL_ITALIC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433 attr = pango_attr_iterator_get(iter, PANGO_ATTR_BACKGROUND);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5434 if (attr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5435 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436 const PangoColor *color = &((PangoAttrColor *)attr)->color;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5437
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5438 /* Assume inverse if black background is requested */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 if ((color->red | color->green | color->blue) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 char_attr |= HL_INVERSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 return char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5446 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447 * Retrieve the highlighting attributes at column col in the preedit string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5448 * Return -1 if not in preediting mode or if col is out of range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5450 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451 im_get_feedback_attr(int col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 char *preedit_string = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5454 PangoAttrList *attr_list = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 int char_attr = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 if (xic == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 return char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 gtk_im_context_get_preedit_string(xic, &preedit_string, &attr_list, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5461
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5462 if (preedit_string != NULL && attr_list != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5463 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5464 int idx;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5465
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5466 /* Get the byte index as used by PangoAttrIterator */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5467 for (idx = 0; col > 0 && preedit_string[idx] != '\0'; --col)
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5468 idx += utfc_ptr2len((char_u *)preedit_string + idx);
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5469
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5470 if (preedit_string[idx] != '\0')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5472 PangoAttrIterator *iter;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5473 int start, end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 char_attr = HL_NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476 iter = pango_attr_list_get_iterator(attr_list);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478 /* Extract all relevant attributes from the list. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5479 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5481 pango_attr_iterator_range(iter, &start, &end);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 941
diff changeset
5483 if (idx >= start && idx < end)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 char_attr |= translate_pango_attributes(iter);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 while (pango_attr_iterator_next(iter));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488 pango_attr_iterator_destroy(iter);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5489 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492 if (attr_list != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493 pango_attr_list_unref(attr_list);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5494 g_free(preedit_string);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5496 return char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5497 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5499 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5500 xim_init(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5502 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 xim_log("xim_init()\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5504 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 g_return_if_fail(gui.drawarea != NULL);
8218
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
5507 g_return_if_fail(gtk_widget_get_window(gui.drawarea) != NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5509 xic = gtk_im_multicontext_new();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510 g_object_ref(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5512 im_commit_handler_id = g_signal_connect(G_OBJECT(xic), "commit",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 G_CALLBACK(&im_commit_cb), NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 g_signal_connect(G_OBJECT(xic), "preedit_changed",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5515 G_CALLBACK(&im_preedit_changed_cb), NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516 g_signal_connect(G_OBJECT(xic), "preedit_start",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 G_CALLBACK(&im_preedit_start_cb), NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 g_signal_connect(G_OBJECT(xic), "preedit_end",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 G_CALLBACK(&im_preedit_end_cb), NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520
8218
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
5521 gtk_im_context_set_client_window(xic, gtk_widget_get_window(gui.drawarea));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 im_shutdown(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 #ifdef XIM_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 xim_log("im_shutdown()\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5533 gtk_im_context_focus_out(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5534 g_object_unref(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 xic = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537 im_is_active = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5538 im_commit_handler_id = 0;
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5539 if (p_imst == IM_ON_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5540 preedit_start_col = MAXCOL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5541 xim_has_preediting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5542 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5543
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5544 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5545 * Convert the string argument to keyval and state for GdkEventKey.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5546 * If str is valid return TRUE, otherwise FALSE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5547 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5548 * See 'imactivatekey' for documentation of the format.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5549 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5550 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5551 im_string_to_keyval(const char *str, unsigned int *keyval, unsigned int *state)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5552 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5553 const char *mods_end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5554 unsigned tmp_keyval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555 unsigned tmp_state = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 mods_end = strrchr(str, '-');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 mods_end = (mods_end != NULL) ? mods_end + 1 : str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 /* Parse modifier keys */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561 while (str < mods_end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 switch (*str++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5564 case '-': break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5565 case 'S': case 's': tmp_state |= (unsigned)GDK_SHIFT_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5566 case 'L': case 'l': tmp_state |= (unsigned)GDK_LOCK_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5567 case 'C': case 'c': tmp_state |= (unsigned)GDK_CONTROL_MASK;break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5568 case '1': tmp_state |= (unsigned)GDK_MOD1_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5569 case '2': tmp_state |= (unsigned)GDK_MOD2_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5570 case '3': tmp_state |= (unsigned)GDK_MOD3_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571 case '4': tmp_state |= (unsigned)GDK_MOD4_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 case '5': tmp_state |= (unsigned)GDK_MOD5_MASK; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5573 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5574 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5577 tmp_keyval = gdk_keyval_from_name(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5579 if (tmp_keyval == 0 || tmp_keyval == GDK_VoidSymbol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5580 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5582 if (keyval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5583 *keyval = tmp_keyval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5584 if (state != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5585 *state = tmp_state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5587 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5590 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591 * Return TRUE if p_imak is valid, otherwise FALSE. As a special case, an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5592 * empty string is also regarded as valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5593 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594 * Note: The numerical key value of p_imak is cached if it was valid; thus
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5595 * boldly assuming im_xim_isvalid_imactivate() will always be called whenever
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5596 * 'imak' changes. This is currently the case but not obvious -- should
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 * probably rename the function for clarity.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600 im_xim_isvalid_imactivate(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5601 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 if (p_imak[0] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5604 im_activatekey_keyval = GDK_VoidSymbol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5605 im_activatekey_state = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5606 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5609 return im_string_to_keyval((const char *)p_imak,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5610 &im_activatekey_keyval,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5611 &im_activatekey_state);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5613
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5614 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5615 im_synthesize_keypress(unsigned int keyval, unsigned int state)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5616 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5617 GdkEventKey *event;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5619 event = (GdkEventKey *)gdk_event_new(GDK_KEY_PRESS);
8218
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
5620 g_object_ref(gtk_widget_get_window(gui.drawarea));
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
5621 /* unreffed by gdk_event_free() */
3456e2ebebd4 commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
5622 event->window = gtk_widget_get_window(gui.drawarea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5623 event->send_event = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5624 event->time = GDK_CURRENT_TIME;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5625 event->state = state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5626 event->keyval = keyval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5627 event->hardware_keycode = /* needed for XIM */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5628 XKeysymToKeycode(GDK_WINDOW_XDISPLAY(event->window), (KeySym)keyval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5629 event->length = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5630 event->string = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5631
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5632 gtk_im_context_filter_keypress(xic, event);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5634 /* For consistency, also send the corresponding release event. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5635 event->type = GDK_KEY_RELEASE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5636 event->send_event = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5637 gtk_im_context_filter_keypress(xic, event);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5638
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5639 gdk_event_free((GdkEvent *)event);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5641
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5642 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5643 xim_reset(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5644 {
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
5645 # ifdef FEAT_EVAL
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
5646 if (USE_IMACTIVATEFUNC)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5647 call_imactivatefunc(im_is_active);
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5648 else
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
5649 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5652 gtk_im_context_reset(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5654 if (p_imdisable)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5655 im_shutdown();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5656 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5658 xim_set_focus(gui.in_focus);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5659
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5660 if (im_activatekey_keyval != GDK_VoidSymbol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5662 if (im_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5664 g_signal_handler_block(xic, im_commit_handler_id);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665 im_synthesize_keypress(im_activatekey_keyval,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 im_activatekey_state);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5667 g_signal_handler_unblock(xic, im_commit_handler_id);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5668 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5669 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5670 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5672 im_shutdown();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5673 xim_init();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5674 xim_set_focus(gui.in_focus);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5678
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5679 if (p_imst == IM_ON_THE_SPOT)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5680 preedit_start_col = MAXCOL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 xim_has_preediting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5684 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5685 xim_queue_key_press_event(GdkEventKey *event, int down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5686 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5687 if (down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5689 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5690 * Workaround GTK2 XIM 'feature' that always converts keypad keys to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5691 * chars., even when not part of an IM sequence (ref. feature of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5692 * gdk/gdkkeyuni.c).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5693 * Flag any keypad keys that might represent a single char.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5694 * If this (on its own - i.e., not part of an IM sequence) is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 * committed while we're processing one of these keys, we can ignore
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5696 * that commit and go ahead & process it ourselves. That way we can
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5697 * still distinguish keypad keys for use in mappings.
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
5698 * Also add GDK_space to make <S-Space> work.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5699 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5700 switch (event->keyval)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5702 case GDK_KP_Add: xim_expected_char = '+'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5703 case GDK_KP_Subtract: xim_expected_char = '-'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5704 case GDK_KP_Divide: xim_expected_char = '/'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5705 case GDK_KP_Multiply: xim_expected_char = '*'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5706 case GDK_KP_Decimal: xim_expected_char = '.'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5707 case GDK_KP_Equal: xim_expected_char = '='; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5708 case GDK_KP_0: xim_expected_char = '0'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5709 case GDK_KP_1: xim_expected_char = '1'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710 case GDK_KP_2: xim_expected_char = '2'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 case GDK_KP_3: xim_expected_char = '3'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 case GDK_KP_4: xim_expected_char = '4'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 case GDK_KP_5: xim_expected_char = '5'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714 case GDK_KP_6: xim_expected_char = '6'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5715 case GDK_KP_7: xim_expected_char = '7'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5716 case GDK_KP_8: xim_expected_char = '8'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5717 case GDK_KP_9: xim_expected_char = '9'; break;
1620
73fe8baea242 updated for version 7.2a
vimboss
parents: 1598
diff changeset
5718 case GDK_space: xim_expected_char = ' '; break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5719 default: xim_expected_char = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5721 xim_ignored_char = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5724 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5725 * When typing fFtT, XIM may be activated. Thus it must pass
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5726 * gtk_im_context_filter_keypress() in Normal mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727 * And while doing :sh too.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5729 if (xic != NULL && !p_imdisable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5730 && (State & (INSERT | CMDLINE | NORMAL | EXTERNCMD)) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5731 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5732 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733 * Filter 'imactivatekey' and map it to CTRL-^. This way, Vim is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734 * always aware of the current status of IM, and can even emulate
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735 * the activation key for modules that don't support one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 if (event->keyval == im_activatekey_keyval
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738 && (event->state & im_activatekey_state) == im_activatekey_state)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 unsigned int state_mask;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5742 /* Require the state of the 3 most used modifiers to match exactly.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5743 * Otherwise e.g. <S-C-space> would be unusable for other purposes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5744 * if the IM activate key is <S-space>. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5745 state_mask = im_activatekey_state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5746 state_mask |= ((int)GDK_SHIFT_MASK | (int)GDK_CONTROL_MASK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5747 | (int)GDK_MOD1_MASK);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5749 if ((event->state & state_mask) != im_activatekey_state)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5751
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752 /* Don't send it a second time on GDK_KEY_RELEASE. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753 if (event->type != GDK_KEY_PRESS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5754 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755
781
afa9ef8a18a1 updated for version 7.0228
vimboss
parents: 776
diff changeset
5756 if (map_to_exists_mode((char_u *)"", LANGMAP, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 im_set_active(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760 /* ":lmap" mappings exists, toggle use of mappings. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 State ^= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762 if (State & LANGMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 curbuf->b_p_iminsert = B_IMODE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5765 State &= ~LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5767 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5768 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5769 curbuf->b_p_iminsert = B_IMODE_LMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 State |= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5772 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5773 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 return gtk_im_context_filter_keypress(xic, event);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5776 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5778 /* Don't filter events through the IM context if IM isn't active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779 * right now. Unlike with GTK+ 1.2 we cannot rely on the IM module
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 * not doing anything before the activation key was sent. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5781 if (im_activatekey_keyval == GDK_VoidSymbol || im_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5783 int imresult = gtk_im_context_filter_keypress(xic, event);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5784
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5785 if (p_imst == IM_ON_THE_SPOT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 {
12293
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5787 /* Some XIM send following sequence:
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5788 * 1. preedited string.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5789 * 2. committed string.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5790 * 3. line changed key.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5791 * 4. preedited string.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5792 * 5. remove preedited string.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5793 * if 3, Vim can't move back the above line for 5.
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5794 * thus, this part should not parse the key. */
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5795 if (!imresult && preedit_start_col != MAXCOL
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5796 && event->keyval == GDK_Return)
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5797 {
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5798 im_synthesize_keypress(GDK_Return, 0U);
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5799 return FALSE;
1ff5e5dfa9b0 patch 8.0.1026: GTK on-the-spot input has problems
Christian Brabandt <cb@256bit.org>
parents: 12269
diff changeset
5800 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 /* If XIM tried to commit a keypad key as a single char.,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5804 * ignore it so we can use the keypad key 'raw', for mappings. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5805 if (xim_expected_char != NUL && xim_ignored_char)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806 /* We had a keypad key, and XIM tried to thieve it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5807 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808
2988
25be7c9dda54 updated for version 7.3.266
Bram Moolenaar <bram@vim.org>
parents: 2961
diff changeset
5809 /* This is supposed to fix a problem with iBus, that space
25be7c9dda54 updated for version 7.3.266
Bram Moolenaar <bram@vim.org>
parents: 2961
diff changeset
5810 * characters don't work in input mode. */
25be7c9dda54 updated for version 7.3.266
Bram Moolenaar <bram@vim.org>
parents: 2961
diff changeset
5811 xim_expected_char = NUL;
25be7c9dda54 updated for version 7.3.266
Bram Moolenaar <bram@vim.org>
parents: 2961
diff changeset
5812
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5813 /* Normal processing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 return imresult;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5820
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5821 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 im_get_status(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5823 {
5025
322441058afc updated for version 7.3.1256
Bram Moolenaar <bram@vim.org>
parents: 5008
diff changeset
5824 # ifdef FEAT_EVAL
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
5825 if (USE_IMSTATUSFUNC)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5826 return call_imstatusfunc();
5025
322441058afc updated for version 7.3.1256
Bram Moolenaar <bram@vim.org>
parents: 5008
diff changeset
5827 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 return im_is_active;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5831 int
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5832 preedit_get_status(void)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5833 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5834 return preedit_is_active;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5835 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5836
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5837 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
5838 im_is_preediting(void)
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5839 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5840 return xim_has_preediting;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5841 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
5842
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
5843 # else /* !FEAT_GUI_GTK */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5844
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5845 static int xim_is_active = FALSE; /* XIM should be active in the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5846 mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5847 static int xim_has_focus = FALSE; /* XIM is really being used for Vim */
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5848 # ifdef FEAT_GUI_X11
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5849 static XIMStyle input_style;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5850 static int status_area_enabled = TRUE;
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5851 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5853 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5854 * Switch using XIM on/off. This is used by the code that changes "State".
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5855 * When 'imactivatefunc' is defined use that function instead.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5856 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5857 void
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5858 im_set_active(int active_arg)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5859 {
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5860 int active = active_arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5861
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5862 /* If 'imdisable' is set, XIM is never active. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5863 if (p_imdisable)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5864 active = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5865 else if (input_style & XIMPreeditPosition)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5866 /* There is a problem in switching XIM off when preediting is used,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5867 * and it is not clear how this can be solved. For now, keep XIM on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5868 * all the time, like it was done in Vim 5.8. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5869 active = TRUE;
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5870
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5871 # if defined(FEAT_EVAL)
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
5872 if (USE_IMACTIVATEFUNC)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5873 {
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5874 if (active != im_get_status())
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5875 {
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5876 call_imactivatefunc(active);
12932
fe5e4fec0d41 patch 8.0.1342: cannot build with Motif and multi-byte
Christian Brabandt <cb@256bit.org>
parents: 12928
diff changeset
5877 xim_has_focus = active;
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5878 }
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5879 return;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5880 }
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5881 # endif
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5882
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5883 if (xic == NULL)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5884 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5885
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5886 /* Remember the active state, it is needed when Vim gets keyboard focus. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 xim_is_active = active;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 xim_set_preedit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 * Adjust using XIM for gaining or losing keyboard focus. Also called when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893 * "xim_is_active" changes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
5896 xim_set_focus(int focus)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 if (xic == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5900
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5902 * XIM only gets focus when the Vim window has keyboard focus and XIM has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5903 * been set active for the current mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5904 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5905 if (focus && xim_is_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5907 if (!xim_has_focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5909 xim_has_focus = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 XSetICFocus(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5914 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5915 if (xim_has_focus)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5916 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5917 xim_has_focus = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5918 XUnsetICFocus(xic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5920 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5922
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5923 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
5924 im_set_position(int row UNUSED, int col UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5925 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5926 xim_set_preedit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5927 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5928
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5929 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5930 * Set the XIM to the current cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5931 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5932 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
5933 xim_set_preedit(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934 {
2580
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
5935 XVaNestedList attr_list;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
5936 XRectangle spot_area;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
5937 XPoint over_spot;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
5938 int line_space;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
5939
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5940 if (xic == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5941 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 xim_set_focus(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5945 if (!xim_has_focus)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5946 {
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5947 /* hide XIM cursor */
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5948 over_spot.x = 0;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5949 over_spot.y = -100; /* arbitrary invisible position */
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5950 attr_list = (XVaNestedList) XVaCreateNestedList(0,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5951 XNSpotLocation,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5952 &over_spot,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5953 NULL);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5954 XSetICValues(xic, XNPreeditAttributes, attr_list, NULL);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5955 XFree(attr_list);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5956 return;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5957 }
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5958
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5959 if (input_style & XIMPreeditPosition)
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5960 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5961 if (xim_fg_color == INVALCOLOR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5962 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5963 xim_fg_color = gui.def_norm_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5964 xim_bg_color = gui.def_back_pixel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5965 }
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5966 over_spot.x = TEXT_X(gui.col);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5967 over_spot.y = TEXT_Y(gui.row);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5968 spot_area.x = 0;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5969 spot_area.y = 0;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5970 spot_area.height = gui.char_height * Rows;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5971 spot_area.width = gui.char_width * Columns;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5972 line_space = gui.char_height;
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5973 attr_list = (XVaNestedList) XVaCreateNestedList(0,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5974 XNSpotLocation, &over_spot,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5975 XNForeground, (Pixel) xim_fg_color,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5976 XNBackground, (Pixel) xim_bg_color,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5977 XNArea, &spot_area,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5978 XNLineSpace, line_space,
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5979 NULL);
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5980 if (XSetICValues(xic, XNPreeditAttributes, attr_list, NULL))
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
5981 emsg(_("E284: Cannot set IC values"));
2275
e4d849f4df03 Remove the old and not well supported GTK 1 code. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
5982 XFree(attr_list);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5983 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5985
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5986 # if defined(FEAT_GUI_X11)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5987 static char e_xim[] = N_("E285: Failed to create input context");
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5988 # endif
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5989
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5990 # if defined(FEAT_GUI_X11) || defined(PROTO)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5991 # if defined(XtSpecificationRelease) && XtSpecificationRelease >= 6 && !defined(SUN_SYSTEM)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5992 # define USE_X11R6_XIM
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5993 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5994
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7734
diff changeset
5995 static int xim_real_init(Window x11_window, Display *x11_display);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
5998 # ifdef USE_X11R6_XIM
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6000 xim_instantiate_cb(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6001 Display *display,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6002 XPointer client_data UNUSED,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6003 XPointer call_data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6005 Window x11_window;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6006 Display *x11_display;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6007
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6008 # ifdef XIM_DEBUG
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009 xim_log("xim_instantiate_cb()\n");
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6010 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6012 gui_get_x11_windis(&x11_window, &x11_display);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6013 if (display != x11_display)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6016 xim_real_init(x11_window, x11_display);
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 781
diff changeset
6017 gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 XUnregisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020 xim_instantiate_cb, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6022
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6023 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6024 xim_destroy_cb(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6025 XIM im UNUSED,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6026 XPointer client_data UNUSED,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6027 XPointer call_data UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6028 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6029 Window x11_window;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6030 Display *x11_display;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6031
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6032 # ifdef XIM_DEBUG
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6033 xim_log("xim_destroy_cb()\n");
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6034 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6035 gui_get_x11_windis(&x11_window, &x11_display);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6036
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6037 xic = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6038 status_area_enabled = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6039
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 781
diff changeset
6040 gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6041
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6042 XRegisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6043 xim_instantiate_cb, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6044 }
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6045 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6046
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6047 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6048 xim_init(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6049 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6050 Window x11_window;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6051 Display *x11_display;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6052
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6053 # ifdef XIM_DEBUG
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6054 xim_log("xim_init()\n");
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6055 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6056
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6057 gui_get_x11_windis(&x11_window, &x11_display);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6058
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6059 xic = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6060
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6061 if (xim_real_init(x11_window, x11_display))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6062 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6063
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 781
diff changeset
6064 gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6065
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6066 # ifdef USE_X11R6_XIM
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6067 XRegisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6068 xim_instantiate_cb, NULL);
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6069 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6070 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6071
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6072 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6073 xim_real_init(Window x11_window, Display *x11_display)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6074 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6075 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6076 char *p,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6077 *s,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6078 *ns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6079 *end,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6080 tmp[1024];
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6081 # define IMLEN_MAX 40
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6082 char buf[IMLEN_MAX + 7];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6083 XIM xim = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6084 XIMStyles *xim_styles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6085 XIMStyle this_input_style = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6086 Boolean found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6087 XPoint over_spot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6088 XVaNestedList preedit_list, status_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6089
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6090 input_style = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6091 status_area_enabled = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6092
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6093 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6094 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6096 if (gui.rsrc_input_method != NULL && *gui.rsrc_input_method != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6098 strcpy(tmp, gui.rsrc_input_method);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6099 for (ns = s = tmp; ns != NULL && *s != NUL;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6100 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6101 s = (char *)skipwhite((char_u *)s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6102 if (*s == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6103 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6104 if ((ns = end = strchr(s, ',')) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6105 end = s + strlen(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6106 while (isspace(((char_u *)end)[-1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6107 end--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6108 *end = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6110 if (strlen(s) <= IMLEN_MAX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6111 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6112 strcpy(buf, "@im=");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6113 strcat(buf, s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6114 if ((p = XSetLocaleModifiers(buf)) != NULL && *p != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6115 && (xim = XOpenIM(x11_display, NULL, NULL, NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6116 != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6117 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6120 s = ns + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6122 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6124 if (xim == NULL && (p = XSetLocaleModifiers("")) != NULL && *p != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6125 xim = XOpenIM(x11_display, NULL, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6127 /* This is supposed to be useful to obtain characters through
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6128 * XmbLookupString() without really using a XIM. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6129 if (xim == NULL && (p = XSetLocaleModifiers("@im=none")) != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6130 && *p != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6131 xim = XOpenIM(x11_display, NULL, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6133 if (xim == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6134 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6135 /* Only give this message when verbose is set, because too many people
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6136 * got this message when they didn't want to use a XIM. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6137 if (p_verbose > 0)
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6138 {
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6139 verbose_enter();
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
6140 emsg(_("E286: Failed to open input method"));
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6141 verbose_leave();
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6142 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6143 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6145
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6146 # ifdef USE_X11R6_XIM
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148 XIMCallback destroy_cb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 destroy_cb.callback = xim_destroy_cb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6151 destroy_cb.client_data = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 if (XSetIMValues(xim, XNDestroyCallback, &destroy_cb, NULL))
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
6153 emsg(_("E287: Warning: Could not set destroy callback to IM"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154 }
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6155 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL) || !xim_styles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6158 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
6159 emsg(_("E288: input method doesn't support any style"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6160 XCloseIM(xim);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6161 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6163
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6164 found = False;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 strcpy(tmp, gui.rsrc_preedit_type_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6166 for (s = tmp; s && !found; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 while (*s && isspace((unsigned char)*s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6170 if (!*s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6172 if ((ns = end = strchr(s, ',')) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 ns++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6175 end = s + strlen(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 while (isspace((unsigned char)*end))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 end--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 *end = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6179
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6180 if (!strcmp(s, "OverTheSpot"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6181 this_input_style = (XIMPreeditPosition | XIMStatusArea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6182 else if (!strcmp(s, "OffTheSpot"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6183 this_input_style = (XIMPreeditArea | XIMStatusArea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6184 else if (!strcmp(s, "Root"))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6185 this_input_style = (XIMPreeditNothing | XIMStatusNothing);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6187 for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6188 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6189 if (this_input_style == xim_styles->supported_styles[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6190 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 found = True;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6193 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6195 if (!found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6197 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6198 if ((xim_styles->supported_styles[i] & this_input_style)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6199 == (this_input_style & ~XIMStatusArea))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6200 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6201 this_input_style &= ~XIMStatusArea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6202 found = True;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6203 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6205 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6206
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6207 s = ns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6208 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6209 XFree(xim_styles);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6210
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6211 if (!found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6212 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6213 /* Only give this message when verbose is set, because too many people
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6214 * got this message when they didn't want to use a XIM. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6215 if (p_verbose > 0)
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6216 {
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6217 verbose_enter();
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
6218 emsg(_("E289: input method doesn't support my preedit type"));
292
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6219 verbose_leave();
bf6ee000a80c updated for version 7.0077
vimboss
parents: 273
diff changeset
6220 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6221 XCloseIM(xim);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6222 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225 over_spot.x = TEXT_X(gui.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6226 over_spot.y = TEXT_Y(gui.row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6227 input_style = this_input_style;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 /* A crash was reported when trying to pass gui.norm_font as XNFontSet,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 * thus that has been removed. Hopefully the default works... */
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6231 # ifdef FEAT_XFONTSET
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6232 if (gui.fontset != NOFONTSET)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 preedit_list = XVaCreateNestedList(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 XNSpotLocation, &over_spot,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6236 XNForeground, (Pixel)gui.def_norm_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237 XNBackground, (Pixel)gui.def_back_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 XNFontSet, (XFontSet)gui.fontset,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 status_list = XVaCreateNestedList(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6241 XNForeground, (Pixel)gui.def_norm_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6242 XNBackground, (Pixel)gui.def_back_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6243 XNFontSet, (XFontSet)gui.fontset,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6245 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 else
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6247 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6248 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6249 preedit_list = XVaCreateNestedList(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6250 XNSpotLocation, &over_spot,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6251 XNForeground, (Pixel)gui.def_norm_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6252 XNBackground, (Pixel)gui.def_back_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6253 NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6254 status_list = XVaCreateNestedList(0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6255 XNForeground, (Pixel)gui.def_norm_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6256 XNBackground, (Pixel)gui.def_back_pixel,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6257 NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6258 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6260 xic = XCreateIC(xim,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6261 XNInputStyle, input_style,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6262 XNClientWindow, x11_window,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6263 XNFocusWindow, gui.wid,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6264 XNPreeditAttributes, preedit_list,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6265 XNStatusAttributes, status_list,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6266 NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6267 XFree(status_list);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6268 XFree(preedit_list);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6269 if (xic != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6270 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6271 if (input_style & XIMStatusArea)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6272 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6273 xim_set_status_area();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6274 status_area_enabled = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6275 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6276 else
811
d2c169a725c8 updated for version 7.0c01
vimboss
parents: 781
diff changeset
6277 gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6278 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6279 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6280 {
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
6281 if (!is_not_a_term())
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
6282 emsg(_(e_xim));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6283 XCloseIM(xim);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6284 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6285 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6287 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6288 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6289
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6290 # endif /* FEAT_GUI_X11 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6291
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6292 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6293 * Get IM status. When IM is on, return TRUE. Else return FALSE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6294 * FIXME: This doesn't work correctly: Having focus doesn't always mean XIM is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6295 * active, when not having focus XIM may still be active (e.g., when using a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6296 * tear-off menu item).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6298 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6299 im_get_status(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 {
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6301 # ifdef FEAT_EVAL
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
6302 if (USE_IMSTATUSFUNC)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6303 return call_imstatusfunc();
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6304 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 return xim_has_focus;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
6308 # endif /* !FEAT_GUI_GTK */
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2275
diff changeset
6309
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6310 # if !defined(FEAT_GUI_GTK) || defined(PROTO)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6311 /*
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6312 * Set up the status area.
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6313 *
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6314 * This should use a separate Widget, but that seems not possible, because
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6315 * preedit_area and status_area should be set to the same window as for the
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6316 * text input. Unfortunately this means the status area pollutes the text
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6317 * window...
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6318 */
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6319 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6320 xim_set_status_area(void)
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6321 {
2580
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
6322 XVaNestedList preedit_list = 0, status_list = 0, list = 0;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
6323 XRectangle pre_area, status_area;
06aa43dde561 updated for version 7.3.006
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
6324
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6325 if (xic == NULL)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6326 return;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6327
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6328 if (input_style & XIMStatusArea)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6329 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6330 if (input_style & XIMPreeditArea)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6331 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6332 XRectangle *needed_rect;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6333
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6334 /* to get status_area width */
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6335 status_list = XVaCreateNestedList(0, XNAreaNeeded,
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6336 &needed_rect, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6337 XGetICValues(xic, XNStatusAttributes, status_list, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6338 XFree(status_list);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6339
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6340 status_area.width = needed_rect->width;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6341 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6342 else
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6343 status_area.width = gui.char_width * Columns;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6344
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6345 status_area.x = 0;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6346 status_area.y = gui.char_height * Rows + gui.border_offset;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6347 if (gui.which_scrollbars[SBAR_BOTTOM])
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6348 status_area.y += gui.scrollbar_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6349 #ifdef FEAT_MENU
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6350 if (gui.menu_is_active)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6351 status_area.y += gui.menu_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6352 #endif
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6353 status_area.height = gui.char_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6354 status_list = XVaCreateNestedList(0, XNArea, &status_area, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6355 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6356 else
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6357 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6358 status_area.x = 0;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6359 status_area.y = gui.char_height * Rows + gui.border_offset;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6360 if (gui.which_scrollbars[SBAR_BOTTOM])
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6361 status_area.y += gui.scrollbar_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6362 #ifdef FEAT_MENU
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6363 if (gui.menu_is_active)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6364 status_area.y += gui.menu_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6365 #endif
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6366 status_area.width = 0;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6367 status_area.height = gui.char_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6368 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6369
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6370 if (input_style & XIMPreeditArea) /* off-the-spot */
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6371 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6372 pre_area.x = status_area.x + status_area.width;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6373 pre_area.y = gui.char_height * Rows + gui.border_offset;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6374 pre_area.width = gui.char_width * Columns - pre_area.x;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6375 if (gui.which_scrollbars[SBAR_BOTTOM])
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6376 pre_area.y += gui.scrollbar_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6377 #ifdef FEAT_MENU
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6378 if (gui.menu_is_active)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6379 pre_area.y += gui.menu_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6380 #endif
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6381 pre_area.height = gui.char_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6382 preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6383 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6384 else if (input_style & XIMPreeditPosition) /* over-the-spot */
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6385 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6386 pre_area.x = 0;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6387 pre_area.y = 0;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6388 pre_area.height = gui.char_height * Rows;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6389 pre_area.width = gui.char_width * Columns;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6390 preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6391 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6392
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6393 if (preedit_list && status_list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6394 list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list,
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6395 XNStatusAttributes, status_list, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6396 else if (preedit_list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6397 list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list,
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6398 NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6399 else if (status_list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6400 list = XVaCreateNestedList(0, XNStatusAttributes, status_list,
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6401 NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6402 else
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6403 list = NULL;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6404
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6405 if (list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6406 {
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6407 XSetICValues(xic, XNVaNestedList, list, NULL);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6408 XFree(list);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6409 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6410 if (status_list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6411 XFree(status_list);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6412 if (preedit_list)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6413 XFree(preedit_list);
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6414 }
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6415
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
6416 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6417 xim_get_status_area_height(void)
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
6418 {
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6419 if (status_area_enabled)
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6420 return gui.char_height;
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
6421 return 0;
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
6422 }
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
6423 # endif
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1658
diff changeset
6424
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6425 #else /* !defined(FEAT_XIM) */
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6426
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
6427 # ifdef IME_WITHOUT_XIM
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6428 static int im_was_set_active = FALSE;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6429
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6430 int
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
6431 im_get_status(void)
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6432 {
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6433 # if defined(FEAT_EVAL)
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
6434 if (USE_IMSTATUSFUNC)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6435 return call_imstatusfunc();
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6436 # endif
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6437 return im_was_set_active;
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6438 }
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6439
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6440 void
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6441 im_set_active(int active_arg)
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6442 {
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6443 # if defined(FEAT_EVAL)
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6444 int active = !p_imdisable && active_arg;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6445
12936
c53a80f39a52 patch 8.0.1344: using 'imactivatefunc' in the GUI does not work
Christian Brabandt <cb@256bit.org>
parents: 12932
diff changeset
6446 if (USE_IMACTIVATEFUNC && active != im_get_status())
12924
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6447 {
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6448 call_imactivatefunc(active);
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6449 im_was_set_active = active;
85a601f985ab patch 8.0.1338: USE_IM_CONTROL is confusing and incomplete
Christian Brabandt <cb@256bit.org>
parents: 12922
diff changeset
6450 }
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6451 # endif
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6452 }
12928
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6453
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6454 # ifdef FEAT_GUI
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6455 void
13958
fbd4f9645b57 patch 8.0.1849: compiler warning for unused arguments, missing prototype
Christian Brabandt <cb@256bit.org>
parents: 13610
diff changeset
6456 im_set_position(int row UNUSED, int col UNUSED)
12928
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6457 {
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6458 }
75ffa8ee989c patch 8.0.1340: MS-Windows: cannot build GUI without IME
Christian Brabandt <cb@256bit.org>
parents: 12924
diff changeset
6459 # endif
12920
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6460 # endif
327e1264b9bf patch 8.0.1336: cannot use imactivatefunc() unless compiled with +xim
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
6461
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6462 #endif /* FEAT_XIM */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6463
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6465 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6466 * Setup "vcp" for conversion from "from" to "to".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6467 * The names must have been made canonical with enc_canonize().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6468 * vcp->vc_type must have been initialized to CONV_NONE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6469 * Note: cannot be used for conversion from/to ucs-2 and ucs-4 (will use utf-8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6470 * instead).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6471 * Afterwards invoke with "from" and "to" equal to NULL to cleanup.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6472 * Return FAIL when conversion is not supported, OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6473 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6474 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6475 convert_setup(vimconv_T *vcp, char_u *from, char_u *to)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6476 {
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6477 return convert_setup_ext(vcp, from, TRUE, to, TRUE);
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6478 }
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6479
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6480 /*
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6481 * As convert_setup(), but only when from_unicode_is_utf8 is TRUE will all
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6482 * "from" unicode charsets be considered utf-8. Same for "to".
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6483 */
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6484 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6485 convert_setup_ext(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6486 vimconv_T *vcp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6487 char_u *from,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6488 int from_unicode_is_utf8,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6489 char_u *to,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6490 int to_unicode_is_utf8)
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6491 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6492 int from_prop;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6493 int to_prop;
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6494 int from_is_utf8;
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6495 int to_is_utf8;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6497 /* Reset to no conversion. */
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6498 #ifdef USE_ICONV
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6499 if (vcp->vc_type == CONV_ICONV && vcp->vc_fd != (iconv_t)-1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6500 iconv_close(vcp->vc_fd);
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6501 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6502 vcp->vc_type = CONV_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6503 vcp->vc_factor = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6504 vcp->vc_fail = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6505
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6506 /* No conversion when one of the names is empty or they are equal. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6507 if (from == NULL || *from == NUL || to == NULL || *to == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6508 || STRCMP(from, to) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6509 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6511 from_prop = enc_canon_props(from);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6512 to_prop = enc_canon_props(to);
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6513 if (from_unicode_is_utf8)
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6514 from_is_utf8 = from_prop & ENC_UNICODE;
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6515 else
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6516 from_is_utf8 = from_prop == ENC_UNICODE;
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6517 if (to_unicode_is_utf8)
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6518 to_is_utf8 = to_prop & ENC_UNICODE;
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6519 else
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6520 to_is_utf8 = to_prop == ENC_UNICODE;
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6521
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6522 if ((from_prop & ENC_LATIN1) && to_is_utf8)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6523 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6524 /* Internal latin1 -> utf-8 conversion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6525 vcp->vc_type = CONV_TO_UTF8;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6526 vcp->vc_factor = 2; /* up to twice as long */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6527 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6528 else if ((from_prop & ENC_LATIN9) && to_is_utf8)
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6529 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6530 /* Internal latin9 -> utf-8 conversion. */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6531 vcp->vc_type = CONV_9_TO_UTF8;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6532 vcp->vc_factor = 3; /* up to three as long (euro sign) */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6533 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6534 else if (from_is_utf8 && (to_prop & ENC_LATIN1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6536 /* Internal utf-8 -> latin1 conversion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6537 vcp->vc_type = CONV_TO_LATIN1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6538 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6539 else if (from_is_utf8 && (to_prop & ENC_LATIN9))
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6540 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6541 /* Internal utf-8 -> latin9 conversion. */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6542 vcp->vc_type = CONV_TO_LATIN9;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6543 }
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
6544 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6545 /* Win32-specific codepage <-> codepage conversion without iconv. */
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6546 else if ((from_is_utf8 || encname2codepage(from) > 0)
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6547 && (to_is_utf8 || encname2codepage(to) > 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6548 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6549 vcp->vc_type = CONV_CODEPAGE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6550 vcp->vc_factor = 2; /* up to twice as long */
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6551 vcp->vc_cpfrom = from_is_utf8 ? 0 : encname2codepage(from);
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6552 vcp->vc_cpto = to_is_utf8 ? 0 : encname2codepage(to);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6553 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6554 #endif
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12650
diff changeset
6555 #ifdef MACOS_CONVERT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6556 else if ((from_prop & ENC_MACROMAN) && (to_prop & ENC_LATIN1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6557 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6558 vcp->vc_type = CONV_MAC_LATIN1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6559 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6560 else if ((from_prop & ENC_MACROMAN) && to_is_utf8)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6561 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6562 vcp->vc_type = CONV_MAC_UTF8;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6563 vcp->vc_factor = 2; /* up to twice as long */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6564 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6565 else if ((from_prop & ENC_LATIN1) && (to_prop & ENC_MACROMAN))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6566 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6567 vcp->vc_type = CONV_LATIN1_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6568 }
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6569 else if (from_is_utf8 && (to_prop & ENC_MACROMAN))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6570 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6571 vcp->vc_type = CONV_UTF8_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6572 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6573 #endif
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6574 #ifdef USE_ICONV
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6575 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6577 /* Use iconv() for conversion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6578 vcp->vc_fd = (iconv_t)my_iconv_open(
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6579 to_is_utf8 ? (char_u *)"utf-8" : to,
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6580 from_is_utf8 ? (char_u *)"utf-8" : from);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6581 if (vcp->vc_fd != (iconv_t)-1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6583 vcp->vc_type = CONV_ICONV;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6584 vcp->vc_factor = 4; /* could be longer too... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6586 }
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
6587 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6588 if (vcp->vc_type == CONV_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6589 return FAIL;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 140
diff changeset
6590
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6591 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6593
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
6594 #if defined(FEAT_GUI) || defined(AMIGA) || defined(MSWIN) \
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
6595 || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6596 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6597 * Do conversion on typed input characters in-place.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6598 * The input and output are not NUL terminated!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6599 * Returns the length after conversion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6600 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6601 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6602 convert_input(char_u *ptr, int len, int maxlen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6604 return convert_input_safe(ptr, len, maxlen, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6605 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6606 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6608 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6609 * Like convert_input(), but when there is an incomplete byte sequence at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6610 * end return that as an allocated string in "restp" and set "*restlenp" to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6611 * the length. If "restp" is NULL it is not used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6612 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6613 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6614 convert_input_safe(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6615 char_u *ptr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6616 int len,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6617 int maxlen,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6618 char_u **restp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6619 int *restlenp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6620 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6621 char_u *d;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6622 int dlen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6623 int unconvertlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6625 d = string_convert_ext(&input_conv, ptr, &dlen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6626 restp == NULL ? NULL : &unconvertlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6627 if (d != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6628 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6629 if (dlen <= maxlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6631 if (unconvertlen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6633 /* Move the unconverted characters to allocated memory. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6634 *restp = alloc(unconvertlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6635 if (*restp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6636 mch_memmove(*restp, ptr + len - unconvertlen, unconvertlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6637 *restlenp = unconvertlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6639 mch_memmove(ptr, d, dlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6641 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6642 /* result is too long, keep the unconverted text (the caller must
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6643 * have done something wrong!) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6644 dlen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6645 vim_free(d);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6647 return dlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6648 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6649
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6650 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6651 * Convert text "ptr[*lenp]" according to "vcp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6652 * Returns the result in allocated memory and sets "*lenp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6653 * When "lenp" is NULL, use NUL terminated strings.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6654 * Illegal chars are often changed to "?", unless vcp->vc_fail is set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6655 * When something goes wrong, NULL is returned and "*lenp" is unchanged.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6656 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6657 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6658 string_convert(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6659 vimconv_T *vcp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6660 char_u *ptr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6661 int *lenp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6663 return string_convert_ext(vcp, ptr, lenp, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6664 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6665
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6666 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6667 * Like string_convert(), but when "unconvlenp" is not NULL and there are is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6668 * an incomplete sequence at the end it is not converted and "*unconvlenp" is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6669 * set to the number of remaining bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6670 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6671 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6672 string_convert_ext(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6673 vimconv_T *vcp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6674 char_u *ptr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6675 int *lenp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
6676 int *unconvlenp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6678 char_u *retval = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6679 char_u *d;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6680 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6681 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6682 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6683 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6685 if (lenp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6686 len = (int)STRLEN(ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6687 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6688 len = *lenp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6689 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6690 return vim_strsave((char_u *)"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6692 switch (vcp->vc_type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6694 case CONV_TO_UTF8: /* latin1 to utf-8 conversion */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6695 retval = alloc(len * 2 + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6696 if (retval == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6697 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6698 d = retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6699 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6700 {
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6701 c = ptr[i];
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6702 if (c < 0x80)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6703 *d++ = c;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6704 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6705 {
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6706 *d++ = 0xc0 + ((unsigned)c >> 6);
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6707 *d++ = 0x80 + (c & 0x3f);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6709 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6710 *d = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6711 if (lenp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6712 *lenp = (int)(d - retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6713 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6714
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6715 case CONV_9_TO_UTF8: /* latin9 to utf-8 conversion */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6716 retval = alloc(len * 3 + 1);
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6717 if (retval == NULL)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6718 break;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6719 d = retval;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6720 for (i = 0; i < len; ++i)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6721 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6722 c = ptr[i];
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6723 switch (c)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6724 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6725 case 0xa4: c = 0x20ac; break; /* euro */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6726 case 0xa6: c = 0x0160; break; /* S hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6727 case 0xa8: c = 0x0161; break; /* S -hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6728 case 0xb4: c = 0x017d; break; /* Z hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6729 case 0xb8: c = 0x017e; break; /* Z -hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6730 case 0xbc: c = 0x0152; break; /* OE */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6731 case 0xbd: c = 0x0153; break; /* oe */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6732 case 0xbe: c = 0x0178; break; /* Y */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6733 }
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6734 d += utf_char2bytes(c, d);
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6735 }
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6736 *d = NUL;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6737 if (lenp != NULL)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6738 *lenp = (int)(d - retval);
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6739 break;
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6740
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6741 case CONV_TO_LATIN1: /* utf-8 to latin1 conversion */
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6742 case CONV_TO_LATIN9: /* utf-8 to latin9 conversion */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6743 retval = alloc(len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6744 if (retval == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6745 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6746 d = retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6747 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6748 {
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6749 l = utf_ptr2len_len(ptr + i, len - i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6750 if (l == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6751 *d++ = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6752 else if (l == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6753 {
2015
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6754 int l_w = utf8len_tab_zero[ptr[i]];
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6755
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6756 if (l_w == 0)
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6757 {
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6758 /* Illegal utf-8 byte cannot be converted */
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6759 vim_free(retval);
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6760 return NULL;
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6761 }
89189f7aaad9 updated for version 7.2-312
vimboss
parents: 1904
diff changeset
6762 if (unconvlenp != NULL && l_w > len - i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6764 /* Incomplete sequence at the end. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6765 *unconvlenp = len - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6766 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6767 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6768 *d++ = ptr[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6770 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6771 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6772 c = utf_ptr2char(ptr + i);
26
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6773 if (vcp->vc_type == CONV_TO_LATIN9)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6774 switch (c)
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6775 {
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6776 case 0x20ac: c = 0xa4; break; /* euro */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6777 case 0x0160: c = 0xa6; break; /* S hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6778 case 0x0161: c = 0xa8; break; /* S -hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6779 case 0x017d: c = 0xb4; break; /* Z hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6780 case 0x017e: c = 0xb8; break; /* Z -hat */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6781 case 0x0152: c = 0xbc; break; /* OE */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6782 case 0x0153: c = 0xbd; break; /* oe */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6783 case 0x0178: c = 0xbe; break; /* Y */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6784 case 0xa4:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6785 case 0xa6:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6786 case 0xa8:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6787 case 0xb4:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6788 case 0xb8:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6789 case 0xbc:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6790 case 0xbd:
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6791 case 0xbe: c = 0x100; break; /* not in latin9 */
404aac550f35 updated for version 7.0017
vimboss
parents: 23
diff changeset
6792 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6793 if (!utf_iscomposing(c)) /* skip composing chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6794 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6795 if (c < 0x100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6796 *d++ = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6797 else if (vcp->vc_fail)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6798 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6799 vim_free(retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6800 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6801 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6802 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6803 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6804 *d++ = 0xbf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6805 if (utf_char2cells(c) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6806 *d++ = '?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6807 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6809 i += l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6812 *d = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6813 if (lenp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 *lenp = (int)(d - retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816
765
335444c09581 updated for version 7.0225
vimboss
parents: 740
diff changeset
6817 # ifdef MACOS_CONVERT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6818 case CONV_MAC_LATIN1:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6819 retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
18
293621502c4d updated for version 7.0010
vimboss
parents: 11
diff changeset
6820 'm', 'l', unconvlenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6821 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6822
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6823 case CONV_LATIN1_MAC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6824 retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
18
293621502c4d updated for version 7.0010
vimboss
parents: 11
diff changeset
6825 'l', 'm', unconvlenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6826 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6828 case CONV_MAC_UTF8:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6829 retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
18
293621502c4d updated for version 7.0010
vimboss
parents: 11
diff changeset
6830 'm', 'u', unconvlenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6832
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833 case CONV_UTF8_MAC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6834 retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
18
293621502c4d updated for version 7.0010
vimboss
parents: 11
diff changeset
6835 'u', 'm', unconvlenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6836 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6837 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 # ifdef USE_ICONV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6840 case CONV_ICONV: /* conversion with output_conv.vc_fd */
1904
062104a823df updated for version 7.2-201
vimboss
parents: 1903
diff changeset
6841 retval = iconv_string(vcp, ptr, len, unconvlenp, lenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6842 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 # endif
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15636
diff changeset
6844 # ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6845 case CONV_CODEPAGE: /* codepage -> codepage */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6847 int retlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848 int tmp_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6849 short_u *tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6851 /* 1. codepage/UTF-8 -> ucs-2. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6852 if (vcp->vc_cpfrom == 0)
1752
a8aae2e1d2ae updated for version 7.2-049
vimboss
parents: 1749
diff changeset
6853 tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6854 else
4122
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6855 {
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6856 tmp_len = MultiByteToWideChar(vcp->vc_cpfrom,
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6857 unconvlenp ? MB_ERR_INVALID_CHARS : 0,
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
6858 (char *)ptr, len, 0, 0);
4122
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6859 if (tmp_len == 0
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6860 && GetLastError() == ERROR_NO_UNICODE_TRANSLATION)
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6861 {
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6862 if (lenp != NULL)
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6863 *lenp = 0;
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6864 if (unconvlenp != NULL)
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6865 *unconvlenp = len;
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6866 retval = alloc(1);
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6867 if (retval)
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6868 retval[0] = NUL;
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6869 return retval;
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6870 }
d5b1d6177b37 updated for version 7.3.814
Bram Moolenaar <bram@vim.org>
parents: 4069
diff changeset
6871 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6872 tmp = (short_u *)alloc(sizeof(short_u) * tmp_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6873 if (tmp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6874 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875 if (vcp->vc_cpfrom == 0)
1752
a8aae2e1d2ae updated for version 7.2-049
vimboss
parents: 1749
diff changeset
6876 utf8_to_utf16(ptr, len, tmp, unconvlenp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6877 else
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
6878 MultiByteToWideChar(vcp->vc_cpfrom, 0,
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
6879 (char *)ptr, len, tmp, tmp_len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6880
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6881 /* 2. ucs-2 -> codepage/UTF-8. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6882 if (vcp->vc_cpto == 0)
1752
a8aae2e1d2ae updated for version 7.2-049
vimboss
parents: 1749
diff changeset
6883 retlen = utf16_to_utf8(tmp, tmp_len, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6884 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6885 retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6886 tmp, tmp_len, 0, 0, 0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6887 retval = alloc(retlen + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6888 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6889 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6890 if (vcp->vc_cpto == 0)
1752
a8aae2e1d2ae updated for version 7.2-049
vimboss
parents: 1749
diff changeset
6891 utf16_to_utf8(tmp, tmp_len, retval);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6892 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6893 WideCharToMultiByte(vcp->vc_cpto, 0,
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
6894 tmp, tmp_len,
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7827
diff changeset
6895 (char *)retval, retlen, 0, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6896 retval[retlen] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6897 if (lenp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6898 *lenp = retlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6900 vim_free(tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6901 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6902 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6903 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6904 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6906 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6907 }