Mercurial > vim
annotate src/farsi.c @ 9399:43b8570abbec v7.4.1981
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jul 2 18:25:34 2016 +0200
patch 7.4.1981
Problem: No testing for Farsi code.
Solution: Add a minimal test. Clean up Farsi code.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 02 Jul 2016 18:30:05 +0200 |
parents | d7e1526ae1b9 |
children | 9b048dced116 |
rev | line source |
---|---|
7 | 1 /* vi:set ts=8 sts=4 sw=4: |
2 * | |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 * See README.txt for an overview of the Vim source code. | |
8 */ | |
9 | |
10 /* | |
11 * farsi.c: functions for Farsi language | |
12 * | |
13 * Included by main.c, when FEAT_FKMAP is defined. | |
14 */ | |
15 | |
7801
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
16 static int toF_Xor_X_(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
17 static int F_is_TyE(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
18 static int F_is_TyC_TyD(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
19 static int F_is_TyB_TyC_TyD(int src, int offset); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
20 static int toF_TyB(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
21 static void put_curr_and_l_to_X(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
22 static void put_and_redo(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
23 static void chg_c_toX_orX(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
24 static void chg_c_to_X_orX_(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
25 static void chg_c_to_X_or_X(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
26 static void chg_l_to_X_orX_(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
27 static void chg_l_toXor_X(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
28 static void chg_r_to_Xor_X_(void); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
29 static int toF_leading(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
30 static int toF_Rjoin(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
31 static int canF_Ljoin(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
32 static int canF_Rjoin(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
33 static int F_isterm(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
34 static int toF_ending(int c); |
a1e71a01dbd6
commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents:
4352
diff
changeset
|
35 static void lrswapbuf(char_u *buf, int len); |
7 | 36 |
37 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
38 * Convert the given Farsi character into a _X or _X_ type |
7 | 39 */ |
40 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
41 toF_Xor_X_(int c) |
7 | 42 { |
43 int tempc; | |
44 | |
45 switch (c) | |
46 { | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
47 case BE: return _BE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
48 case PE: return _PE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
49 case TE: return _TE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
50 case SE: return _SE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
51 case JIM: return _JIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
52 case CHE: return _CHE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
53 case HE_J: return _HE_J; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
54 case XE: return _XE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
55 case SIN: return _SIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
56 case SHIN: return _SHIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
57 case SAD: return _SAD; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
58 case ZAD: return _ZAD; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
59 case AYN: return _AYN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
60 case AYN_: return _AYN_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
61 case GHAYN: return _GHAYN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
62 case GHAYN_: return _GHAYN_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
63 case FE: return _FE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
64 case GHAF: return _GHAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
65 case KAF: return _KAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
66 case GAF: return _GAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
67 case LAM: return _LAM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
68 case MIM: return _MIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
69 case NOON: return _NOON; |
7 | 70 case YE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
71 case YE_: return _YE; |
7 | 72 case YEE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
73 case YEE_: return _YEE; |
7 | 74 case IE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
75 case IE_: return _IE; |
7 | 76 case F_HE: |
77 tempc = _HE; | |
78 | |
1880 | 79 if (p_ri && (curwin->w_cursor.col + 1 |
80 < (colnr_T)STRLEN(ml_get_curline()))) | |
7 | 81 { |
82 inc_cursor(); | |
83 | |
84 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
85 tempc = _HE_; | |
86 | |
87 dec_cursor(); | |
88 } | |
89 if (!p_ri && STRLEN(ml_get_curline())) | |
90 { | |
91 dec_cursor(); | |
92 | |
93 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
94 tempc = _HE_; | |
95 | |
96 inc_cursor(); | |
97 } | |
98 | |
99 return tempc; | |
100 } | |
101 return 0; | |
102 } | |
103 | |
104 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
105 * Convert the given Farsi character into Farsi capital character. |
7 | 106 */ |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
107 static int |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
108 toF_TyA(int c) |
7 | 109 { |
110 switch (c) | |
111 { | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
112 case ALEF_: return ALEF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
113 case ALEF_U_H_: return ALEF_U_H; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
114 case _BE: return BE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
115 case _PE: return PE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
116 case _TE: return TE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
117 case _SE: return SE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
118 case _JIM: return JIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
119 case _CHE: return CHE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
120 case _HE_J: return HE_J; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
121 case _XE: return XE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
122 case _SIN: return SIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
123 case _SHIN: return SHIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
124 case _SAD: return SAD; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
125 case _ZAD: return ZAD; |
7 | 126 case _AYN: |
127 case AYN_: | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
128 case _AYN_: return AYN; |
7 | 129 case _GHAYN: |
130 case GHAYN_: | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
131 case _GHAYN_: return GHAYN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
132 case _FE: return FE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
133 case _GHAF: return GHAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
134 /* I am not sure what it is !!! case _KAF_H: */ |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
135 case _KAF: return KAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
136 case _GAF: return GAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
137 case _LAM: return LAM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
138 case _MIM: return MIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
139 case _NOON: return NOON; |
7 | 140 case _YE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
141 case YE_: return YE; |
7 | 142 case _YEE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
143 case YEE_: return YEE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
144 case TEE_: return TEE; |
7 | 145 case _IE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
146 case IE_: return IE; |
7 | 147 case _HE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
148 case _HE_: return F_HE; |
7 | 149 } |
150 return c; | |
151 } | |
152 | |
153 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
154 * Is the character under the cursor+offset in the given buffer a join type. |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
155 * That is a character that is combined with the others. |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
156 * Note: the offset is used only for command line buffer. |
7 | 157 */ |
158 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
159 F_is_TyB_TyC_TyD(int src, int offset) |
7 | 160 { |
161 int c; | |
162 | |
163 if (src == SRC_EDT) | |
164 c = gchar_cursor(); | |
165 else | |
166 c = cmd_gchar(AT_CURSOR+offset); | |
167 | |
168 switch (c) | |
169 { | |
170 case _LAM: | |
171 case _BE: | |
172 case _PE: | |
173 case _TE: | |
174 case _SE: | |
175 case _JIM: | |
176 case _CHE: | |
177 case _HE_J: | |
178 case _XE: | |
179 case _SIN: | |
180 case _SHIN: | |
181 case _SAD: | |
182 case _ZAD: | |
183 case _TA: | |
184 case _ZA: | |
185 case _AYN: | |
186 case _AYN_: | |
187 case _GHAYN: | |
188 case _GHAYN_: | |
189 case _FE: | |
190 case _GHAF: | |
191 case _KAF: | |
192 case _KAF_H: | |
193 case _GAF: | |
194 case _MIM: | |
195 case _NOON: | |
196 case _YE: | |
197 case _YEE: | |
198 case _IE: | |
199 case _HE_: | |
200 case _HE: | |
201 return TRUE; | |
202 } | |
203 return FALSE; | |
204 } | |
205 | |
206 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
207 * Is the Farsi character one of the terminating only type. |
7 | 208 */ |
209 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
210 F_is_TyE(int c) |
7 | 211 { |
212 switch (c) | |
213 { | |
214 case ALEF_A: | |
215 case ALEF_D_H: | |
216 case DAL: | |
217 case ZAL: | |
218 case RE: | |
219 case ZE: | |
220 case JE: | |
221 case WAW: | |
222 case WAW_H: | |
223 case HAMZE: | |
224 return TRUE; | |
225 } | |
226 return FALSE; | |
227 } | |
228 | |
229 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
230 * Is the Farsi character one of the none leading type. |
7 | 231 */ |
232 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
233 F_is_TyC_TyD(int c) |
7 | 234 { |
235 switch (c) | |
236 { | |
237 case ALEF_: | |
238 case ALEF_U_H_: | |
239 case _AYN_: | |
240 case AYN_: | |
241 case _GHAYN_: | |
242 case GHAYN_: | |
243 case _HE_: | |
244 case YE_: | |
245 case IE_: | |
246 case TEE_: | |
247 case YEE_: | |
248 return TRUE; | |
249 } | |
250 return FALSE; | |
251 } | |
252 | |
253 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
254 * Convert a none leading Farsi char into a leading type. |
7 | 255 */ |
256 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
257 toF_TyB(int c) |
7 | 258 { |
259 switch (c) | |
260 { | |
261 case ALEF_: return ALEF; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
262 case ALEF_U_H_: return ALEF_U_H; |
7 | 263 case _AYN_: return _AYN; |
264 case AYN_: return AYN; /* exception - there are many of them */ | |
265 case _GHAYN_: return _GHAYN; | |
266 case GHAYN_: return GHAYN; /* exception - there are many of them */ | |
267 case _HE_: return _HE; | |
268 case YE_: return YE; | |
269 case IE_: return IE; | |
270 case TEE_: return TEE; | |
271 case YEE_: return YEE; | |
272 } | |
273 return c; | |
274 } | |
275 | |
276 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
277 * Overwrite the current redo and cursor characters + left adjust. |
7 | 278 */ |
279 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
280 put_curr_and_l_to_X(int c) |
7 | 281 { |
282 int tempc; | |
283 | |
284 if (curwin->w_p_rl && p_ri) | |
285 return; | |
286 | |
1880 | 287 if ((curwin->w_cursor.col < (colnr_T)STRLEN(ml_get_curline()))) |
7 | 288 { |
289 if ((p_ri && curwin->w_cursor.col) || !p_ri) | |
290 { | |
291 if (p_ri) | |
292 dec_cursor(); | |
293 else | |
294 inc_cursor(); | |
295 | |
296 if (F_is_TyC_TyD((tempc = gchar_cursor()))) | |
297 { | |
298 pchar_cursor(toF_TyB(tempc)); | |
299 AppendCharToRedobuff(K_BS); | |
300 AppendCharToRedobuff(tempc); | |
301 } | |
302 | |
303 if (p_ri) | |
304 inc_cursor(); | |
305 else | |
306 dec_cursor(); | |
307 } | |
308 } | |
309 | |
310 put_and_redo(c); | |
311 } | |
312 | |
313 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
314 put_and_redo(int c) |
7 | 315 { |
316 pchar_cursor(c); | |
317 AppendCharToRedobuff(K_BS); | |
318 AppendCharToRedobuff(c); | |
319 } | |
320 | |
321 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
322 * Change the char. under the cursor to a X_ or X type |
7 | 323 */ |
324 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
325 chg_c_toX_orX(void) |
7 | 326 { |
327 int tempc, curc; | |
328 | |
329 switch ((curc = gchar_cursor())) | |
330 { | |
331 case _BE: | |
332 tempc = BE; | |
333 break; | |
334 case _PE: | |
335 tempc = PE; | |
336 break; | |
337 case _TE: | |
338 tempc = TE; | |
339 break; | |
340 case _SE: | |
341 tempc = SE; | |
342 break; | |
343 case _JIM: | |
344 tempc = JIM; | |
345 break; | |
346 case _CHE: | |
347 tempc = CHE; | |
348 break; | |
349 case _HE_J: | |
350 tempc = HE_J; | |
351 break; | |
352 case _XE: | |
353 tempc = XE; | |
354 break; | |
355 case _SIN: | |
356 tempc = SIN; | |
357 break; | |
358 case _SHIN: | |
359 tempc = SHIN; | |
360 break; | |
361 case _SAD: | |
362 tempc = SAD; | |
363 break; | |
364 case _ZAD: | |
365 tempc = ZAD; | |
366 break; | |
367 case _FE: | |
368 tempc = FE; | |
369 break; | |
370 case _GHAF: | |
371 tempc = GHAF; | |
372 break; | |
373 case _KAF_H: | |
374 case _KAF: | |
375 tempc = KAF; | |
376 break; | |
377 case _GAF: | |
378 tempc = GAF; | |
379 break; | |
380 case _AYN: | |
381 tempc = AYN; | |
382 break; | |
383 case _AYN_: | |
384 tempc = AYN_; | |
385 break; | |
386 case _GHAYN: | |
387 tempc = GHAYN; | |
388 break; | |
389 case _GHAYN_: | |
390 tempc = GHAYN_; | |
391 break; | |
392 case _LAM: | |
393 tempc = LAM; | |
394 break; | |
395 case _MIM: | |
396 tempc = MIM; | |
397 break; | |
398 case _NOON: | |
399 tempc = NOON; | |
400 break; | |
401 case _HE: | |
402 case _HE_: | |
403 tempc = F_HE; | |
404 break; | |
405 case _YE: | |
406 case _IE: | |
407 case _YEE: | |
408 if (p_ri) | |
409 { | |
410 inc_cursor(); | |
411 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
412 tempc = (curc == _YE ? YE_ : | |
413 (curc == _IE ? IE_ : YEE_)); | |
414 else | |
415 tempc = (curc == _YE ? YE : | |
416 (curc == _IE ? IE : YEE)); | |
417 dec_cursor(); | |
418 } | |
419 else | |
420 { | |
421 if (curwin->w_cursor.col) | |
422 { | |
423 dec_cursor(); | |
424 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
425 tempc = (curc == _YE ? YE_ : | |
426 (curc == _IE ? IE_ : YEE_)); | |
427 else | |
428 tempc = (curc == _YE ? YE : | |
429 (curc == _IE ? IE : YEE)); | |
430 inc_cursor(); | |
431 } | |
432 else | |
433 tempc = (curc == _YE ? YE : | |
434 (curc == _IE ? IE : YEE)); | |
435 } | |
436 break; | |
437 default: | |
438 tempc = 0; | |
439 } | |
440 | |
441 if (tempc) | |
442 put_and_redo(tempc); | |
443 } | |
444 | |
445 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
446 * Change the char. under the cursor to a _X_ or X_ type |
7 | 447 */ |
448 | |
449 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
450 chg_c_to_X_orX_(void) |
7 | 451 { |
452 int tempc; | |
453 | |
454 switch (gchar_cursor()) | |
455 { | |
456 case ALEF: | |
457 tempc = ALEF_; | |
458 break; | |
459 case ALEF_U_H: | |
460 tempc = ALEF_U_H_; | |
461 break; | |
462 case _AYN: | |
463 tempc = _AYN_; | |
464 break; | |
465 case AYN: | |
466 tempc = AYN_; | |
467 break; | |
468 case _GHAYN: | |
469 tempc = _GHAYN_; | |
470 break; | |
471 case GHAYN: | |
472 tempc = GHAYN_; | |
473 break; | |
474 case _HE: | |
475 tempc = _HE_; | |
476 break; | |
477 case YE: | |
478 tempc = YE_; | |
479 break; | |
480 case IE: | |
481 tempc = IE_; | |
482 break; | |
483 case TEE: | |
484 tempc = TEE_; | |
485 break; | |
486 case YEE: | |
487 tempc = YEE_; | |
488 break; | |
489 default: | |
490 tempc = 0; | |
491 } | |
492 | |
493 if (tempc) | |
494 put_and_redo(tempc); | |
495 } | |
496 | |
497 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
498 * Change the char. under the cursor to a _X_ or _X type |
7 | 499 */ |
500 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
501 chg_c_to_X_or_X (void) |
7 | 502 { |
503 int tempc; | |
504 | |
505 tempc = gchar_cursor(); | |
506 | |
1880 | 507 if (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline())) |
7 | 508 { |
509 inc_cursor(); | |
510 | |
511 if ((tempc == F_HE) && (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))) | |
512 { | |
513 tempc = _HE_; | |
514 | |
515 dec_cursor(); | |
516 | |
517 put_and_redo(tempc); | |
518 return; | |
519 } | |
520 | |
521 dec_cursor(); | |
522 } | |
523 | |
524 if ((tempc = toF_Xor_X_(tempc)) != 0) | |
525 put_and_redo(tempc); | |
526 } | |
527 | |
528 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
529 * Change the character left to the cursor to a _X_ or X_ type |
7 | 530 */ |
531 static void | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
532 chg_l_to_X_orX_(void) |
7 | 533 { |
534 int tempc; | |
535 | |
1880 | 536 if (curwin->w_cursor.col != 0 && |
537 (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) | |
7 | 538 return; |
539 | |
540 if (!curwin->w_cursor.col && p_ri) | |
541 return; | |
542 | |
543 if (p_ri) | |
544 dec_cursor(); | |
545 else | |
546 inc_cursor(); | |
547 | |
548 switch (gchar_cursor()) | |
549 { | |
550 case ALEF: | |
551 tempc = ALEF_; | |
552 break; | |
553 case ALEF_U_H: | |
554 tempc = ALEF_U_H_; | |
555 break; | |
556 case _AYN: | |
557 tempc = _AYN_; | |
558 break; | |
559 case AYN: | |
560 tempc = AYN_; | |
561 break; | |
562 case _GHAYN: | |
563 tempc = _GHAYN_; | |
564 break; | |
565 case GHAYN: | |
566 tempc = GHAYN_; | |
567 break; | |
568 case _HE: | |
569 tempc = _HE_; | |
570 break; | |
571 case YE: | |
572 tempc = YE_; | |
573 break; | |
574 case IE: | |
575 tempc = IE_; | |
576 break; | |
577 case TEE: | |
578 tempc = TEE_; | |
579 break; | |
580 case YEE: | |
581 tempc = YEE_; | |
582 break; | |
583 default: | |
584 tempc = 0; | |
585 } | |
586 | |
587 if (tempc) | |
588 put_and_redo(tempc); | |
589 | |
590 if (p_ri) | |
591 inc_cursor(); | |
592 else | |
593 dec_cursor(); | |
594 } | |
595 | |
596 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
597 * Change the character left to the cursor to a X or _X type |
7 | 598 */ |
599 | |
600 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
601 chg_l_toXor_X (void) |
7 | 602 { |
603 int tempc; | |
604 | |
1880 | 605 if (curwin->w_cursor.col != 0 && |
606 (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) | |
7 | 607 return; |
608 | |
609 if (!curwin->w_cursor.col && p_ri) | |
610 return; | |
611 | |
612 if (p_ri) | |
613 dec_cursor(); | |
614 else | |
615 inc_cursor(); | |
616 | |
617 switch (gchar_cursor()) | |
618 { | |
619 case ALEF_: | |
620 tempc = ALEF; | |
621 break; | |
622 case ALEF_U_H_: | |
623 tempc = ALEF_U_H; | |
624 break; | |
625 case _AYN_: | |
626 tempc = _AYN; | |
627 break; | |
628 case AYN_: | |
629 tempc = AYN; | |
630 break; | |
631 case _GHAYN_: | |
632 tempc = _GHAYN; | |
633 break; | |
634 case GHAYN_: | |
635 tempc = GHAYN; | |
636 break; | |
637 case _HE_: | |
638 tempc = _HE; | |
639 break; | |
640 case YE_: | |
641 tempc = YE; | |
642 break; | |
643 case IE_: | |
644 tempc = IE; | |
645 break; | |
646 case TEE_: | |
647 tempc = TEE; | |
648 break; | |
649 case YEE_: | |
650 tempc = YEE; | |
651 break; | |
652 default: | |
653 tempc = 0; | |
654 } | |
655 | |
656 if (tempc) | |
657 put_and_redo(tempc); | |
658 | |
659 if (p_ri) | |
660 inc_cursor(); | |
661 else | |
662 dec_cursor(); | |
663 } | |
664 | |
665 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
666 * Change the character right to the cursor to a _X or _X_ type |
7 | 667 */ |
668 | |
669 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
670 chg_r_to_Xor_X_(void) |
7 | 671 { |
672 int tempc, c; | |
673 | |
674 if (curwin->w_cursor.col) | |
675 { | |
676 if (!p_ri) | |
677 dec_cursor(); | |
678 | |
679 tempc = gchar_cursor(); | |
680 | |
681 if ((c = toF_Xor_X_(tempc)) != 0) | |
682 put_and_redo(c); | |
683 | |
684 if (!p_ri) | |
685 inc_cursor(); | |
686 | |
687 } | |
688 } | |
689 | |
690 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
691 * Map Farsi keyboard when in fkmap mode. |
7 | 692 */ |
693 | |
694 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
695 fkmap(int c) |
7 | 696 { |
697 int tempc; | |
698 static int revins; | |
699 | |
700 if (IS_SPECIAL(c)) | |
701 return c; | |
702 | |
703 if (VIM_ISDIGIT(c) || ((c == '.' || c == '+' || c == '-' || | |
704 c == '^' || c == '%' || c == '#' || c == '=') && revins)) | |
705 { | |
706 if (!revins) | |
707 { | |
708 if (curwin->w_cursor.col) | |
709 { | |
710 if (!p_ri) | |
711 dec_cursor(); | |
712 | |
8238
d7e1526ae1b9
commit https://github.com/vim/vim/commit/68c85fcdf31c104db21c96cd5871724e458c95ff
Christian Brabandt <cb@256bit.org>
parents:
7819
diff
changeset
|
713 chg_c_toX_orX (); |
d7e1526ae1b9
commit https://github.com/vim/vim/commit/68c85fcdf31c104db21c96cd5871724e458c95ff
Christian Brabandt <cb@256bit.org>
parents:
7819
diff
changeset
|
714 chg_l_toXor_X (); |
7 | 715 |
716 if (!p_ri) | |
717 inc_cursor(); | |
718 } | |
719 } | |
720 | |
721 arrow_used = TRUE; | |
722 (void)stop_arrow(); | |
723 | |
724 if (!curwin->w_p_rl && revins) | |
725 inc_cursor(); | |
726 | |
727 ++revins; | |
728 p_ri=1; | |
729 } | |
730 else | |
731 { | |
732 if (revins) | |
733 { | |
734 arrow_used = TRUE; | |
735 (void)stop_arrow(); | |
736 | |
737 revins = 0; | |
738 if (curwin->w_p_rl) | |
739 { | |
740 while ((F_isdigit(gchar_cursor()) | |
741 || (gchar_cursor() == F_PERIOD | |
742 || gchar_cursor() == F_PLUS | |
743 || gchar_cursor() == F_MINUS | |
744 || gchar_cursor() == F_MUL | |
745 || gchar_cursor() == F_DIVIDE | |
746 || gchar_cursor() == F_PERCENT | |
747 || gchar_cursor() == F_EQUALS)) | |
748 && gchar_cursor() != NUL) | |
749 ++curwin->w_cursor.col; | |
750 } | |
751 else | |
752 { | |
753 if (curwin->w_cursor.col) | |
754 while ((F_isdigit(gchar_cursor()) | |
755 || (gchar_cursor() == F_PERIOD | |
756 || gchar_cursor() == F_PLUS | |
757 || gchar_cursor() == F_MINUS | |
758 || gchar_cursor() == F_MUL | |
759 || gchar_cursor() == F_DIVIDE | |
760 || gchar_cursor() == F_PERCENT | |
761 || gchar_cursor() == F_EQUALS)) | |
762 && --curwin->w_cursor.col) | |
763 ; | |
764 | |
765 if (!F_isdigit(gchar_cursor())) | |
766 ++curwin->w_cursor.col; | |
767 } | |
768 } | |
769 } | |
770 | |
771 if (!revins) | |
772 { | |
773 if (curwin->w_p_rl) | |
774 p_ri=0; | |
775 if (!curwin->w_p_rl) | |
776 p_ri=1; | |
777 } | |
778 | |
779 if ((c < 0x100) && (isalpha(c) || c == '&' || c == '^' || c == ';' || | |
780 c == '\''|| c == ',' || c == '[' || | |
781 c == ']' || c == '{' || c == '}' )) | |
782 chg_r_to_Xor_X_(); | |
783 | |
784 tempc = 0; | |
785 | |
786 switch (c) | |
787 { | |
788 case '`': | |
789 case ' ': | |
790 case '.': | |
791 case '!': | |
792 case '"': | |
793 case '$': | |
794 case '%': | |
795 case '^': | |
796 case '&': | |
797 case '/': | |
798 case '(': | |
799 case ')': | |
800 case '=': | |
801 case '\\': | |
802 case '?': | |
803 case '+': | |
804 case '-': | |
805 case '_': | |
806 case '*': | |
807 case ':': | |
808 case '#': | |
809 case '~': | |
810 case '@': | |
811 case '<': | |
812 case '>': | |
813 case '{': | |
814 case '}': | |
815 case '|': | |
816 case '0': | |
817 case '1': | |
818 case '2': | |
819 case '3': | |
820 case '4': | |
821 case '5': | |
822 case '6': | |
823 case '7': | |
824 case '8': | |
825 case '9': | |
826 case 'B': | |
827 case 'E': | |
828 case 'F': | |
829 case 'H': | |
830 case 'I': | |
831 case 'K': | |
832 case 'L': | |
833 case 'M': | |
834 case 'O': | |
835 case 'P': | |
836 case 'Q': | |
837 case 'R': | |
838 case 'T': | |
839 case 'U': | |
840 case 'W': | |
841 case 'Y': | |
842 case NL: | |
843 case TAB: | |
844 | |
845 if (p_ri && c == NL && curwin->w_cursor.col) | |
846 { | |
847 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
848 * If the char before the cursor is _X_ or X_ do not change |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
849 * the one under the cursor with X type. |
7 | 850 */ |
851 | |
852 dec_cursor(); | |
853 | |
854 if (F_isalpha(gchar_cursor())) | |
855 { | |
856 inc_cursor(); | |
857 return NL; | |
858 } | |
859 | |
860 inc_cursor(); | |
861 } | |
862 | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
863 if (!p_ri && !curwin->w_cursor.col) |
7 | 864 { |
865 switch (c) | |
866 { | |
867 case '0': return FARSI_0; | |
868 case '1': return FARSI_1; | |
869 case '2': return FARSI_2; | |
870 case '3': return FARSI_3; | |
871 case '4': return FARSI_4; | |
872 case '5': return FARSI_5; | |
873 case '6': return FARSI_6; | |
874 case '7': return FARSI_7; | |
875 case '8': return FARSI_8; | |
876 case '9': return FARSI_9; | |
877 case 'B': return F_PSP; | |
878 case 'E': return JAZR_N; | |
879 case 'F': return ALEF_D_H; | |
880 case 'H': return ALEF_A; | |
881 case 'I': return TASH; | |
882 case 'K': return F_LQUOT; | |
883 case 'L': return F_RQUOT; | |
884 case 'M': return HAMZE; | |
885 case 'O': return '['; | |
886 case 'P': return ']'; | |
887 case 'Q': return OO; | |
888 case 'R': return MAD_N; | |
889 case 'T': return OW; | |
890 case 'U': return MAD; | |
891 case 'W': return OW_OW; | |
892 case 'Y': return JAZR; | |
893 case '`': return F_PCN; | |
894 case '!': return F_EXCL; | |
895 case '@': return F_COMMA; | |
896 case '#': return F_DIVIDE; | |
897 case '$': return F_CURRENCY; | |
898 case '%': return F_PERCENT; | |
899 case '^': return F_MUL; | |
900 case '&': return F_BCOMMA; | |
901 case '*': return F_STAR; | |
902 case '(': return F_LPARENT; | |
903 case ')': return F_RPARENT; | |
904 case '-': return F_MINUS; | |
905 case '_': return F_UNDERLINE; | |
906 case '=': return F_EQUALS; | |
907 case '+': return F_PLUS; | |
908 case '\\': return F_BSLASH; | |
909 case '|': return F_PIPE; | |
910 case ':': return F_DCOLON; | |
911 case '"': return F_SEMICOLON; | |
912 case '.': return F_PERIOD; | |
913 case '/': return F_SLASH; | |
914 case '<': return F_LESS; | |
915 case '>': return F_GREATER; | |
916 case '?': return F_QUESTION; | |
917 case ' ': return F_BLANK; | |
918 } | |
919 break; | |
920 } | |
921 if (!p_ri) | |
922 dec_cursor(); | |
923 | |
924 switch ((tempc = gchar_cursor())) | |
925 { | |
926 case _BE: | |
927 case _PE: | |
928 case _TE: | |
929 case _SE: | |
930 case _JIM: | |
931 case _CHE: | |
932 case _HE_J: | |
933 case _XE: | |
934 case _SIN: | |
935 case _SHIN: | |
936 case _SAD: | |
937 case _ZAD: | |
938 case _FE: | |
939 case _GHAF: | |
940 case _KAF: | |
941 case _KAF_H: | |
942 case _GAF: | |
943 case _LAM: | |
944 case _MIM: | |
945 case _NOON: | |
946 case _HE: | |
947 case _HE_: | |
948 case _TA: | |
949 case _ZA: | |
950 put_curr_and_l_to_X(toF_TyA(tempc)); | |
951 break; | |
952 case _AYN: | |
953 case _AYN_: | |
954 | |
955 if (!p_ri) | |
956 if (!curwin->w_cursor.col) | |
957 { | |
958 put_curr_and_l_to_X(AYN); | |
959 break; | |
960 } | |
961 | |
962 if (p_ri) | |
963 inc_cursor(); | |
964 else | |
965 dec_cursor(); | |
966 | |
967 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
968 tempc = AYN_; | |
969 else | |
970 tempc = AYN; | |
971 | |
972 if (p_ri) | |
973 dec_cursor(); | |
974 else | |
975 inc_cursor(); | |
976 | |
977 put_curr_and_l_to_X(tempc); | |
978 | |
979 break; | |
980 case _GHAYN: | |
981 case _GHAYN_: | |
982 | |
983 if (!p_ri) | |
984 if (!curwin->w_cursor.col) | |
985 { | |
986 put_curr_and_l_to_X(GHAYN); | |
987 break; | |
988 } | |
989 | |
990 if (p_ri) | |
991 inc_cursor(); | |
992 else | |
993 dec_cursor(); | |
994 | |
995 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
996 tempc = GHAYN_; | |
997 else | |
998 tempc = GHAYN; | |
999 | |
1000 if (p_ri) | |
1001 dec_cursor(); | |
1002 else | |
1003 inc_cursor(); | |
1004 | |
1005 put_curr_and_l_to_X(tempc); | |
1006 break; | |
1007 case _YE: | |
1008 case _IE: | |
1009 case _YEE: | |
1010 if (!p_ri) | |
1011 if (!curwin->w_cursor.col) | |
1012 { | |
1013 put_curr_and_l_to_X((tempc == _YE ? YE : | |
1014 (tempc == _IE ? IE : YEE))); | |
1015 break; | |
1016 } | |
1017 | |
1018 if (p_ri) | |
1019 inc_cursor(); | |
1020 else | |
1021 dec_cursor(); | |
1022 | |
1023 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
1024 tempc = (tempc == _YE ? YE_ : | |
1025 (tempc == _IE ? IE_ : YEE_)); | |
1026 else | |
1027 tempc = (tempc == _YE ? YE : | |
1028 (tempc == _IE ? IE : YEE)); | |
1029 | |
1030 if (p_ri) | |
1031 dec_cursor(); | |
1032 else | |
1033 inc_cursor(); | |
1034 | |
1035 put_curr_and_l_to_X(tempc); | |
1036 break; | |
1037 } | |
1038 | |
1039 if (!p_ri) | |
1040 inc_cursor(); | |
1041 | |
1042 tempc = 0; | |
1043 | |
1044 switch (c) | |
1045 { | |
1046 case '0': return FARSI_0; | |
1047 case '1': return FARSI_1; | |
1048 case '2': return FARSI_2; | |
1049 case '3': return FARSI_3; | |
1050 case '4': return FARSI_4; | |
1051 case '5': return FARSI_5; | |
1052 case '6': return FARSI_6; | |
1053 case '7': return FARSI_7; | |
1054 case '8': return FARSI_8; | |
1055 case '9': return FARSI_9; | |
1056 case 'B': return F_PSP; | |
1057 case 'E': return JAZR_N; | |
1058 case 'F': return ALEF_D_H; | |
1059 case 'H': return ALEF_A; | |
1060 case 'I': return TASH; | |
1061 case 'K': return F_LQUOT; | |
1062 case 'L': return F_RQUOT; | |
1063 case 'M': return HAMZE; | |
1064 case 'O': return '['; | |
1065 case 'P': return ']'; | |
1066 case 'Q': return OO; | |
1067 case 'R': return MAD_N; | |
1068 case 'T': return OW; | |
1069 case 'U': return MAD; | |
1070 case 'W': return OW_OW; | |
1071 case 'Y': return JAZR; | |
1072 case '`': return F_PCN; | |
1073 case '!': return F_EXCL; | |
1074 case '@': return F_COMMA; | |
1075 case '#': return F_DIVIDE; | |
1076 case '$': return F_CURRENCY; | |
1077 case '%': return F_PERCENT; | |
1078 case '^': return F_MUL; | |
1079 case '&': return F_BCOMMA; | |
1080 case '*': return F_STAR; | |
1081 case '(': return F_LPARENT; | |
1082 case ')': return F_RPARENT; | |
1083 case '-': return F_MINUS; | |
1084 case '_': return F_UNDERLINE; | |
1085 case '=': return F_EQUALS; | |
1086 case '+': return F_PLUS; | |
1087 case '\\': return F_BSLASH; | |
1088 case '|': return F_PIPE; | |
1089 case ':': return F_DCOLON; | |
1090 case '"': return F_SEMICOLON; | |
1091 case '.': return F_PERIOD; | |
1092 case '/': return F_SLASH; | |
1093 case '<': return F_LESS; | |
1094 case '>': return F_GREATER; | |
1095 case '?': return F_QUESTION; | |
1096 case ' ': return F_BLANK; | |
1097 } | |
1098 break; | |
1099 | |
1100 case 'a': | |
1101 tempc = _SHIN; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1102 break; |
7 | 1103 case 'A': |
1104 tempc = WAW_H; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1105 break; |
7 | 1106 case 'b': |
1107 tempc = ZAL; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1108 break; |
7 | 1109 case 'c': |
1110 tempc = ZE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1111 break; |
7 | 1112 case 'C': |
1113 tempc = JE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1114 break; |
7 | 1115 case 'd': |
1116 tempc = _YE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1117 break; |
7 | 1118 case 'D': |
1119 tempc = _YEE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1120 break; |
7 | 1121 case 'e': |
1122 tempc = _SE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1123 break; |
7 | 1124 case 'f': |
1125 tempc = _BE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1126 break; |
7 | 1127 case 'g': |
1128 tempc = _LAM; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1129 break; |
7 | 1130 case 'G': |
1131 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1132 { |
7 | 1133 |
1134 if (gchar_cursor() == _LAM) | |
1135 chg_c_toX_orX (); | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1136 else if (p_ri) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1137 chg_c_to_X_or_X (); |
7 | 1138 } |
1139 | |
1140 if (!p_ri) | |
1141 if (!curwin->w_cursor.col) | |
1142 return ALEF_U_H; | |
1143 | |
1144 if (!p_ri) | |
1145 dec_cursor(); | |
1146 | |
1147 if (gchar_cursor() == _LAM) | |
1148 { | |
1149 chg_c_toX_orX (); | |
1150 chg_l_toXor_X (); | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1151 tempc = ALEF_U_H; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1152 } |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1153 else if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1154 { |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1155 tempc = ALEF_U_H_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1156 chg_l_toXor_X (); |
7 | 1157 } |
1158 else | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1159 tempc = ALEF_U_H; |
7 | 1160 |
1161 if (!p_ri) | |
1162 inc_cursor(); | |
1163 | |
1164 return tempc; | |
1165 case 'h': | |
1166 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
1167 { | |
1168 if (p_ri) | |
1169 chg_c_to_X_or_X (); | |
1170 | |
1171 } | |
1172 | |
1173 if (!p_ri) | |
1174 if (!curwin->w_cursor.col) | |
1175 return ALEF; | |
1176 | |
1177 if (!p_ri) | |
1178 dec_cursor(); | |
1179 | |
1180 if (gchar_cursor() == _LAM) | |
1181 { | |
1182 chg_l_toXor_X(); | |
1183 del_char(FALSE); | |
1184 AppendCharToRedobuff(K_BS); | |
1185 | |
1186 if (!p_ri) | |
1187 dec_cursor(); | |
1188 | |
8238
d7e1526ae1b9
commit https://github.com/vim/vim/commit/68c85fcdf31c104db21c96cd5871724e458c95ff
Christian Brabandt <cb@256bit.org>
parents:
7819
diff
changeset
|
1189 tempc = LA; |
7 | 1190 } |
1191 else | |
1192 { | |
1193 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
1194 { | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1195 tempc = ALEF_; |
7 | 1196 chg_l_toXor_X (); |
1197 } | |
1198 else | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1199 tempc = ALEF; |
7 | 1200 } |
1201 | |
1202 if (!p_ri) | |
1203 inc_cursor(); | |
1204 | |
1205 return tempc; | |
1206 case 'i': | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1207 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1208 { |
7 | 1209 if (!p_ri && !F_is_TyE(tempc)) |
1210 chg_c_to_X_orX_ (); | |
1211 if (p_ri) | |
1212 chg_c_to_X_or_X (); | |
1213 | |
1214 } | |
1215 | |
1216 if (!p_ri && !curwin->w_cursor.col) | |
1217 return _HE; | |
1218 | |
1219 if (!p_ri) | |
1220 dec_cursor(); | |
1221 | |
1222 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1223 tempc = _HE_; |
7 | 1224 else |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1225 tempc = _HE; |
7 | 1226 |
1227 if (!p_ri) | |
1228 inc_cursor(); | |
1229 break; | |
1230 case 'j': | |
1231 tempc = _TE; | |
1232 break; | |
1233 case 'J': | |
1234 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1235 { |
7 | 1236 if (p_ri) |
1237 chg_c_to_X_or_X (); | |
1238 | |
1239 } | |
1240 | |
1241 if (!p_ri) | |
1242 if (!curwin->w_cursor.col) | |
1243 return TEE; | |
1244 | |
1245 if (!p_ri) | |
1246 dec_cursor(); | |
1247 | |
1248 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
1249 { | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1250 tempc = TEE_; |
7 | 1251 chg_l_toXor_X (); |
1252 } | |
1253 else | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1254 tempc = TEE; |
7 | 1255 |
1256 if (!p_ri) | |
1257 inc_cursor(); | |
1258 | |
1259 return tempc; | |
1260 case 'k': | |
1261 tempc = _NOON; | |
1262 break; | |
1263 case 'l': | |
1264 tempc = _MIM; | |
1265 break; | |
1266 case 'm': | |
1267 tempc = _PE; | |
1268 break; | |
1269 case 'n': | |
1270 case 'N': | |
1271 tempc = DAL; | |
1272 break; | |
1273 case 'o': | |
1274 tempc = _XE; | |
1275 break; | |
1276 case 'p': | |
1277 tempc = _HE_J; | |
1278 break; | |
1279 case 'q': | |
1280 tempc = _ZAD; | |
1281 break; | |
1282 case 'r': | |
1283 tempc = _GHAF; | |
1284 break; | |
1285 case 's': | |
1286 tempc = _SIN; | |
1287 break; | |
1288 case 'S': | |
1289 tempc = _IE; | |
1290 break; | |
1291 case 't': | |
1292 tempc = _FE; | |
1293 break; | |
1294 case 'u': | |
1295 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
1296 { | |
1297 if (!p_ri && !F_is_TyE(tempc)) | |
1298 chg_c_to_X_orX_ (); | |
1299 if (p_ri) | |
1300 chg_c_to_X_or_X (); | |
1301 | |
1302 } | |
1303 | |
1304 if (!p_ri && !curwin->w_cursor.col) | |
1305 return _AYN; | |
1306 | |
1307 if (!p_ri) | |
1308 dec_cursor(); | |
1309 | |
1310 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
1311 tempc = _AYN_; | |
1312 else | |
1313 tempc = _AYN; | |
1314 | |
1315 if (!p_ri) | |
1316 inc_cursor(); | |
1317 break; | |
1318 case 'v': | |
1319 case 'V': | |
1320 tempc = RE; | |
1321 break; | |
1322 case 'w': | |
1323 tempc = _SAD; | |
1324 break; | |
1325 case 'x': | |
1326 case 'X': | |
1327 tempc = _TA; | |
1328 break; | |
1329 case 'y': | |
1330 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1331 { |
7 | 1332 if (!p_ri && !F_is_TyE(tempc)) |
1333 chg_c_to_X_orX_ (); | |
1334 if (p_ri) | |
1335 chg_c_to_X_or_X (); | |
1336 | |
1337 } | |
1338 | |
1339 if (!p_ri && !curwin->w_cursor.col) | |
1340 return _GHAYN; | |
1341 | |
1342 if (!p_ri) | |
1343 dec_cursor(); | |
1344 | |
1345 if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR)) | |
1346 tempc = _GHAYN_; | |
1347 else | |
1348 tempc = _GHAYN; | |
1349 | |
1350 if (!p_ri) | |
1351 inc_cursor(); | |
1352 | |
1353 break; | |
1354 case 'z': | |
1355 tempc = _ZA; | |
1356 break; | |
1357 case 'Z': | |
1358 tempc = _KAF_H; | |
1359 break; | |
1360 case ';': | |
1361 tempc = _KAF; | |
1362 break; | |
1363 case '\'': | |
1364 tempc = _GAF; | |
1365 break; | |
1366 case ',': | |
1367 tempc = WAW; | |
1368 break; | |
1369 case '[': | |
1370 tempc = _JIM; | |
1371 break; | |
1372 case ']': | |
1373 tempc = _CHE; | |
1374 break; | |
1375 } | |
1376 | |
1377 if ((F_isalpha(tempc) || F_isdigit(tempc))) | |
1378 { | |
1379 if (!curwin->w_cursor.col && STRLEN(ml_get_curline())) | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1380 { |
7 | 1381 if (!p_ri && !F_is_TyE(tempc)) |
1382 chg_c_to_X_orX_ (); | |
1383 if (p_ri) | |
1384 chg_c_to_X_or_X (); | |
1385 } | |
1386 | |
1387 if (curwin->w_cursor.col) | |
1388 { | |
1389 if (!p_ri) | |
1390 dec_cursor(); | |
1391 | |
1392 if (F_is_TyE(tempc)) | |
1393 chg_l_toXor_X (); | |
1394 else | |
1395 chg_l_to_X_orX_ (); | |
1396 | |
1397 if (!p_ri) | |
1398 inc_cursor(); | |
1399 } | |
1400 } | |
1401 if (tempc) | |
1402 return tempc; | |
1403 return c; | |
1404 } | |
1405 | |
1406 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1407 * Convert a none leading Farsi char into a leading type. |
7 | 1408 */ |
1409 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1410 toF_leading(int c) |
7 | 1411 { |
1412 switch (c) | |
1413 { | |
1414 case ALEF_: return ALEF; | |
1415 case ALEF_U_H_: return ALEF_U_H; | |
1416 case BE: return _BE; | |
1417 case PE: return _PE; | |
1418 case TE: return _TE; | |
1419 case SE: return _SE; | |
1420 case JIM: return _JIM; | |
1421 case CHE: return _CHE; | |
1422 case HE_J: return _HE_J; | |
1423 case XE: return _XE; | |
1424 case SIN: return _SIN; | |
1425 case SHIN: return _SHIN; | |
1426 case SAD: return _SAD; | |
1427 case ZAD: return _ZAD; | |
1428 | |
1429 case AYN: | |
1430 case AYN_: | |
1431 case _AYN_: return _AYN; | |
1432 | |
1433 case GHAYN: | |
1434 case GHAYN_: | |
1435 case _GHAYN_: return _GHAYN; | |
1436 | |
1437 case FE: return _FE; | |
1438 case GHAF: return _GHAF; | |
1439 case KAF: return _KAF; | |
1440 case GAF: return _GAF; | |
1441 case LAM: return _LAM; | |
1442 case MIM: return _MIM; | |
1443 case NOON: return _NOON; | |
1444 | |
1445 case _HE_: | |
1446 case F_HE: return _HE; | |
1447 | |
1448 case YE: | |
1449 case YE_: return _YE; | |
1450 | |
1451 case IE_: | |
1452 case IE: return _IE; | |
1453 | |
1454 case YEE: | |
1455 case YEE_: return _YEE; | |
1456 } | |
1457 return c; | |
1458 } | |
1459 | |
1460 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1461 * Convert a given Farsi char into right joining type. |
7 | 1462 */ |
1463 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1464 toF_Rjoin(int c) |
7 | 1465 { |
1466 switch (c) | |
1467 { | |
1468 case ALEF: return ALEF_; | |
1469 case ALEF_U_H: return ALEF_U_H_; | |
1470 case BE: return _BE; | |
1471 case PE: return _PE; | |
1472 case TE: return _TE; | |
1473 case SE: return _SE; | |
1474 case JIM: return _JIM; | |
1475 case CHE: return _CHE; | |
1476 case HE_J: return _HE_J; | |
1477 case XE: return _XE; | |
1478 case SIN: return _SIN; | |
1479 case SHIN: return _SHIN; | |
1480 case SAD: return _SAD; | |
1481 case ZAD: return _ZAD; | |
1482 | |
1483 case AYN: | |
1484 case AYN_: | |
1485 case _AYN: return _AYN_; | |
1486 | |
1487 case GHAYN: | |
1488 case GHAYN_: | |
1489 case _GHAYN_: return _GHAYN_; | |
1490 | |
1491 case FE: return _FE; | |
1492 case GHAF: return _GHAF; | |
1493 case KAF: return _KAF; | |
1494 case GAF: return _GAF; | |
1495 case LAM: return _LAM; | |
1496 case MIM: return _MIM; | |
1497 case NOON: return _NOON; | |
1498 | |
1499 case _HE: | |
1500 case F_HE: return _HE_; | |
1501 | |
1502 case YE: | |
1503 case YE_: return _YE; | |
1504 | |
1505 case IE_: | |
1506 case IE: return _IE; | |
1507 | |
1508 case TEE: return TEE_; | |
1509 | |
1510 case YEE: | |
1511 case YEE_: return _YEE; | |
1512 } | |
1513 return c; | |
1514 } | |
1515 | |
1516 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1517 * Can a given Farsi character join via its left edj. |
7 | 1518 */ |
1519 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1520 canF_Ljoin(int c) |
7 | 1521 { |
1522 switch (c) | |
1523 { | |
1524 case _BE: | |
1525 case BE: | |
1526 case PE: | |
1527 case _PE: | |
1528 case TE: | |
1529 case _TE: | |
1530 case SE: | |
1531 case _SE: | |
1532 case JIM: | |
1533 case _JIM: | |
1534 case CHE: | |
1535 case _CHE: | |
1536 case HE_J: | |
1537 case _HE_J: | |
1538 case XE: | |
1539 case _XE: | |
1540 case SIN: | |
1541 case _SIN: | |
1542 case SHIN: | |
1543 case _SHIN: | |
1544 case SAD: | |
1545 case _SAD: | |
1546 case ZAD: | |
1547 case _ZAD: | |
1548 case _TA: | |
1549 case _ZA: | |
1550 case AYN: | |
1551 case _AYN: | |
1552 case _AYN_: | |
1553 case AYN_: | |
1554 case GHAYN: | |
1555 case GHAYN_: | |
1556 case _GHAYN_: | |
1557 case _GHAYN: | |
1558 case FE: | |
1559 case _FE: | |
1560 case GHAF: | |
1561 case _GHAF: | |
1562 case _KAF_H: | |
1563 case KAF: | |
1564 case _KAF: | |
1565 case GAF: | |
1566 case _GAF: | |
1567 case LAM: | |
1568 case _LAM: | |
1569 case MIM: | |
1570 case _MIM: | |
1571 case NOON: | |
1572 case _NOON: | |
1573 case IE: | |
1574 case _IE: | |
1575 case IE_: | |
1576 case YE: | |
1577 case _YE: | |
1578 case YE_: | |
1579 case YEE: | |
1580 case _YEE: | |
1581 case YEE_: | |
1582 case F_HE: | |
1583 case _HE: | |
1584 case _HE_: | |
1585 return TRUE; | |
1586 } | |
1587 return FALSE; | |
1588 } | |
1589 | |
1590 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1591 * Can a given Farsi character join via its right edj. |
7 | 1592 */ |
1593 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1594 canF_Rjoin(int c) |
7 | 1595 { |
1596 switch (c) | |
1597 { | |
1598 case ALEF: | |
1599 case ALEF_: | |
1600 case ALEF_U_H: | |
1601 case ALEF_U_H_: | |
1602 case DAL: | |
1603 case ZAL: | |
1604 case RE: | |
1605 case JE: | |
1606 case ZE: | |
1607 case TEE: | |
1608 case TEE_: | |
1609 case WAW: | |
1610 case WAW_H: | |
1611 return TRUE; | |
1612 } | |
1613 | |
1614 return canF_Ljoin(c); | |
1615 | |
1616 } | |
1617 | |
1618 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1619 * is a given Farsi character a terminating type. |
7 | 1620 */ |
1621 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1622 F_isterm(int c) |
7 | 1623 { |
1624 switch (c) | |
1625 { | |
1626 case ALEF: | |
1627 case ALEF_: | |
1628 case ALEF_U_H: | |
1629 case ALEF_U_H_: | |
1630 case DAL: | |
1631 case ZAL: | |
1632 case RE: | |
1633 case JE: | |
1634 case ZE: | |
1635 case WAW: | |
1636 case WAW_H: | |
1637 case TEE: | |
1638 case TEE_: | |
1639 return TRUE; | |
1640 } | |
1641 | |
1642 return FALSE; | |
1643 } | |
1644 | |
1645 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1646 * Convert the given Farsi character into a ending type . |
7 | 1647 */ |
1648 static int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1649 toF_ending(int c) |
7 | 1650 { |
1651 switch (c) | |
1652 { | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1653 case _BE: return BE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1654 case _PE: return PE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1655 case _TE: return TE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1656 case _SE: return SE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1657 case _JIM: return JIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1658 case _CHE: return CHE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1659 case _HE_J: return HE_J; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1660 case _XE: return XE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1661 case _SIN: return SIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1662 case _SHIN: return SHIN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1663 case _SAD: return SAD; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1664 case _ZAD: return ZAD; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1665 case _AYN: return AYN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1666 case _AYN_: return AYN_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1667 case _GHAYN: return GHAYN; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1668 case _GHAYN_: return GHAYN_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1669 case _FE: return FE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1670 case _GHAF: return GHAF; |
7 | 1671 case _KAF_H: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1672 case _KAF: return KAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1673 case _GAF: return GAF; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1674 case _LAM: return LAM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1675 case _MIM: return MIM; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1676 case _NOON: return NOON; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1677 case _YE: return YE_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1678 case YE_: return YE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1679 case _YEE: return YEE_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1680 case YEE_: return YEE; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1681 case TEE: return TEE_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1682 case _IE: return IE_; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1683 case IE_: return IE; |
7 | 1684 case _HE: |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1685 case _HE_: return F_HE; |
7 | 1686 } |
1687 return c; | |
1688 } | |
1689 | |
1690 /* | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1691 * Convert the Farsi 3342 standard into Farsi VIM. |
7 | 1692 */ |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1693 static void |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1694 conv_to_pvim(void) |
7 | 1695 { |
1696 char_u *ptr; | |
1697 int lnum, llen, i; | |
1698 | |
1699 for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum) | |
1700 { | |
1701 ptr = ml_get((linenr_T)lnum); | |
1702 | |
1703 llen = (int)STRLEN(ptr); | |
1704 | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1705 for (i = 0; i < llen-1; i++) |
7 | 1706 { |
1707 if (canF_Ljoin(ptr[i]) && canF_Rjoin(ptr[i+1])) | |
1708 { | |
1709 ptr[i] = toF_leading(ptr[i]); | |
1710 ++i; | |
1711 | |
3683 | 1712 while (canF_Rjoin(ptr[i]) && i < llen) |
7 | 1713 { |
1714 ptr[i] = toF_Rjoin(ptr[i]); | |
1715 if (F_isterm(ptr[i]) || !F_isalpha(ptr[i])) | |
1716 break; | |
1717 ++i; | |
1718 } | |
1719 if (!F_isalpha(ptr[i]) || !canF_Rjoin(ptr[i])) | |
1720 ptr[i-1] = toF_ending(ptr[i-1]); | |
1721 } | |
1722 else | |
1723 ptr[i] = toF_TyA(ptr[i]); | |
1724 } | |
1725 } | |
1726 | |
1727 /* | |
1728 * Following lines contains Farsi encoded character. | |
1729 */ | |
1730 | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1731 do_cmdline_cmd((char_u *)"%s/\202\231/\232/ge"); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1732 do_cmdline_cmd((char_u *)"%s/\201\231/\370\334/ge"); |
7 | 1733 |
1734 /* Assume the screen has been messed up: clear it and redraw. */ | |
1735 redraw_later(CLEAR); | |
1736 MSG_ATTR(farsi_text_1, hl_attr(HLF_S)); | |
1737 } | |
1738 | |
1739 /* | |
4352 | 1740 * Convert the Farsi VIM into Farsi 3342 standard. |
7 | 1741 */ |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1742 static void |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1743 conv_to_pstd(void) |
7 | 1744 { |
1745 char_u *ptr; | |
1746 int lnum, llen, i; | |
1747 | |
1748 /* | |
1749 * Following line contains Farsi encoded character. | |
1750 */ | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1751 do_cmdline_cmd((char_u *)"%s/\232/\202\231/ge"); |
7 | 1752 |
1753 for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum) | |
1754 { | |
1755 ptr = ml_get((linenr_T)lnum); | |
1756 llen = (int)STRLEN(ptr); | |
1757 | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
1758 for (i = 0; i < llen; i++) |
7 | 1759 ptr[i] = toF_TyA(ptr[i]); |
1760 } | |
1761 | |
1762 /* Assume the screen has been messed up: clear it and redraw. */ | |
1763 redraw_later(CLEAR); | |
1764 MSG_ATTR(farsi_text_2, hl_attr(HLF_S)); | |
1765 } | |
1766 | |
1767 /* | |
1768 * left-right swap the characters in buf[len]. | |
1769 */ | |
1770 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1771 lrswapbuf(char_u *buf, int len) |
7 | 1772 { |
1773 char_u *s, *e; | |
1774 int c; | |
1775 | |
1776 s = buf; | |
1777 e = buf + len - 1; | |
1778 | |
1779 while (e > s) | |
1780 { | |
1781 c = *s; | |
1782 *s = *e; | |
1783 *e = c; | |
1784 ++s; | |
1785 --e; | |
1786 } | |
1787 } | |
1788 | |
1789 /* | |
1790 * swap all the characters in reverse direction | |
1791 */ | |
1792 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1793 lrswap(char_u *ibuf) |
7 | 1794 { |
1795 if (ibuf != NULL && *ibuf != NUL) | |
1796 lrswapbuf(ibuf, (int)STRLEN(ibuf)); | |
1797 return ibuf; | |
1798 } | |
1799 | |
1800 /* | |
1801 * swap all the Farsi characters in reverse direction | |
1802 */ | |
1803 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1804 lrFswap(char_u *cmdbuf, int len) |
7 | 1805 { |
1806 int i, cnt; | |
1807 | |
1808 if (cmdbuf == NULL) | |
1809 return cmdbuf; | |
1810 | |
1811 if (len == 0 && (len = (int)STRLEN(cmdbuf)) == 0) | |
1812 return cmdbuf; | |
1813 | |
1814 for (i = 0; i < len; i++) | |
1815 { | |
1816 for (cnt = 0; i + cnt < len | |
1817 && (F_isalpha(cmdbuf[i + cnt]) | |
1818 || F_isdigit(cmdbuf[i + cnt]) | |
1819 || cmdbuf[i + cnt] == ' '); ++cnt) | |
1820 ; | |
1821 | |
1822 lrswapbuf(cmdbuf + i, cnt); | |
1823 i += cnt; | |
1824 } | |
1825 return cmdbuf; | |
1826 } | |
1827 | |
1828 /* | |
1624 | 1829 * Reverse the characters in the search path and substitute section |
1830 * accordingly. | |
1831 * TODO: handle different separator characters. Use skip_regexp(). | |
7 | 1832 */ |
1833 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1834 lrF_sub(char_u *ibuf) |
7 | 1835 { |
1836 char_u *p, *ep; | |
1837 int i, cnt; | |
1838 | |
1839 p = ibuf; | |
1840 | |
388 | 1841 /* Find the boundary of the search path */ |
396 | 1842 while (((p = vim_strchr(p + 1, '/')) != NULL) && p[-1] == '\\') |
7 | 1843 ; |
1844 | |
1845 if (p == NULL) | |
1846 return ibuf; | |
1847 | |
1848 /* Reverse the Farsi characters in the search path. */ | |
1849 lrFswap(ibuf, (int)(p-ibuf)); | |
1850 | |
388 | 1851 /* Now find the boundary of the substitute section */ |
7 | 1852 if ((ep = (char_u *)strrchr((char *)++p, '/')) != NULL) |
1853 cnt = (int)(ep - p); | |
1854 else | |
1855 cnt = (int)STRLEN(p); | |
1856 | |
1857 /* Reverse the characters in the substitute section and take care of '\' */ | |
1858 for (i = 0; i < cnt-1; i++) | |
1859 if (p[i] == '\\') | |
1860 { | |
1861 p[i] = p[i+1] ; | |
1862 p[++i] = '\\'; | |
1863 } | |
1864 | |
1865 lrswapbuf(p, cnt); | |
1866 | |
1867 return ibuf; | |
1868 } | |
1869 | |
1870 /* | |
1871 * Map Farsi keyboard when in cmd_fkmap mode. | |
1872 */ | |
1873 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
1874 cmdl_fkmap(int c) |
7 | 1875 { |
1876 int tempc; | |
1877 | |
1878 switch (c) | |
1879 { | |
1880 case '0': | |
1881 case '1': | |
1882 case '2': | |
1883 case '3': | |
1884 case '4': | |
1885 case '5': | |
1886 case '6': | |
1887 case '7': | |
1888 case '8': | |
1889 case '9': | |
1890 case '`': | |
1891 case ' ': | |
1892 case '.': | |
1893 case '!': | |
1894 case '"': | |
1895 case '$': | |
1896 case '%': | |
1897 case '^': | |
1898 case '&': | |
1899 case '/': | |
1900 case '(': | |
1901 case ')': | |
1902 case '=': | |
1903 case '\\': | |
1904 case '?': | |
1905 case '+': | |
1906 case '-': | |
1907 case '_': | |
1908 case '*': | |
1909 case ':': | |
1910 case '#': | |
1911 case '~': | |
1912 case '@': | |
1913 case '<': | |
1914 case '>': | |
1915 case '{': | |
1916 case '}': | |
1917 case '|': | |
1918 case 'B': | |
1919 case 'E': | |
1920 case 'F': | |
1921 case 'H': | |
1922 case 'I': | |
1923 case 'K': | |
1924 case 'L': | |
1925 case 'M': | |
1926 case 'O': | |
1927 case 'P': | |
1928 case 'Q': | |
1929 case 'R': | |
1930 case 'T': | |
1931 case 'U': | |
1932 case 'W': | |
1933 case 'Y': | |
1934 case NL: | |
1935 case TAB: | |
1936 | |
1937 switch ((tempc = cmd_gchar(AT_CURSOR))) | |
1938 { | |
1939 case _BE: | |
1940 case _PE: | |
1941 case _TE: | |
1942 case _SE: | |
1943 case _JIM: | |
1944 case _CHE: | |
1945 case _HE_J: | |
1946 case _XE: | |
1947 case _SIN: | |
1948 case _SHIN: | |
1949 case _SAD: | |
1950 case _ZAD: | |
1951 case _AYN: | |
1952 case _GHAYN: | |
1953 case _FE: | |
1954 case _GHAF: | |
1955 case _KAF: | |
1956 case _GAF: | |
1957 case _LAM: | |
1958 case _MIM: | |
1959 case _NOON: | |
1960 case _HE: | |
1961 case _HE_: | |
1962 cmd_pchar(toF_TyA(tempc), AT_CURSOR); | |
1963 break; | |
1964 case _AYN_: | |
1965 cmd_pchar(AYN_, AT_CURSOR); | |
1966 break; | |
1967 case _GHAYN_: | |
1968 cmd_pchar(GHAYN_, AT_CURSOR); | |
1969 break; | |
1970 case _IE: | |
1971 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) | |
1972 cmd_pchar(IE_, AT_CURSOR); | |
1973 else | |
1974 cmd_pchar(IE, AT_CURSOR); | |
1975 break; | |
1976 case _YEE: | |
1977 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) | |
1978 cmd_pchar(YEE_, AT_CURSOR); | |
1979 else | |
1980 cmd_pchar(YEE, AT_CURSOR); | |
1981 break; | |
1982 case _YE: | |
1983 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1)) | |
1984 cmd_pchar(YE_, AT_CURSOR); | |
1985 else | |
1986 cmd_pchar(YE, AT_CURSOR); | |
1987 } | |
1988 | |
1989 switch (c) | |
1990 { | |
1991 case '0': return FARSI_0; | |
1992 case '1': return FARSI_1; | |
1993 case '2': return FARSI_2; | |
1994 case '3': return FARSI_3; | |
1995 case '4': return FARSI_4; | |
1996 case '5': return FARSI_5; | |
1997 case '6': return FARSI_6; | |
1998 case '7': return FARSI_7; | |
1999 case '8': return FARSI_8; | |
2000 case '9': return FARSI_9; | |
2001 case 'B': return F_PSP; | |
2002 case 'E': return JAZR_N; | |
2003 case 'F': return ALEF_D_H; | |
2004 case 'H': return ALEF_A; | |
2005 case 'I': return TASH; | |
2006 case 'K': return F_LQUOT; | |
2007 case 'L': return F_RQUOT; | |
2008 case 'M': return HAMZE; | |
2009 case 'O': return '['; | |
2010 case 'P': return ']'; | |
2011 case 'Q': return OO; | |
2012 case 'R': return MAD_N; | |
2013 case 'T': return OW; | |
2014 case 'U': return MAD; | |
2015 case 'W': return OW_OW; | |
2016 case 'Y': return JAZR; | |
2017 case '`': return F_PCN; | |
2018 case '!': return F_EXCL; | |
2019 case '@': return F_COMMA; | |
2020 case '#': return F_DIVIDE; | |
2021 case '$': return F_CURRENCY; | |
2022 case '%': return F_PERCENT; | |
2023 case '^': return F_MUL; | |
2024 case '&': return F_BCOMMA; | |
2025 case '*': return F_STAR; | |
2026 case '(': return F_LPARENT; | |
2027 case ')': return F_RPARENT; | |
2028 case '-': return F_MINUS; | |
2029 case '_': return F_UNDERLINE; | |
2030 case '=': return F_EQUALS; | |
2031 case '+': return F_PLUS; | |
2032 case '\\': return F_BSLASH; | |
2033 case '|': return F_PIPE; | |
2034 case ':': return F_DCOLON; | |
2035 case '"': return F_SEMICOLON; | |
2036 case '.': return F_PERIOD; | |
2037 case '/': return F_SLASH; | |
2038 case '<': return F_LESS; | |
2039 case '>': return F_GREATER; | |
2040 case '?': return F_QUESTION; | |
2041 case ' ': return F_BLANK; | |
2042 } | |
2043 | |
2044 break; | |
2045 | |
2046 case 'a': return _SHIN; | |
2047 case 'A': return WAW_H; | |
2048 case 'b': return ZAL; | |
2049 case 'c': return ZE; | |
2050 case 'C': return JE; | |
2051 case 'd': return _YE; | |
2052 case 'D': return _YEE; | |
2053 case 'e': return _SE; | |
2054 case 'f': return _BE; | |
2055 case 'g': return _LAM; | |
2056 case 'G': | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2057 if (cmd_gchar(AT_CURSOR) == _LAM) |
7 | 2058 { |
2059 cmd_pchar(LAM, AT_CURSOR); | |
2060 return ALEF_U_H; | |
2061 } | |
2062 | |
2063 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2064 return ALEF_U_H_; | |
2065 else | |
2066 return ALEF_U_H; | |
2067 case 'h': | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2068 if (cmd_gchar(AT_CURSOR) == _LAM) |
7 | 2069 { |
2070 cmd_pchar(LA, AT_CURSOR); | |
2071 redrawcmdline(); | |
2072 return K_IGNORE; | |
2073 } | |
2074 | |
2075 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2076 return ALEF_; | |
2077 else | |
2078 return ALEF; | |
2079 case 'i': | |
2080 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2081 return _HE_; | |
2082 else | |
2083 return _HE; | |
2084 case 'j': return _TE; | |
2085 case 'J': | |
2086 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2087 return TEE_; | |
2088 else | |
2089 return TEE; | |
2090 case 'k': return _NOON; | |
2091 case 'l': return _MIM; | |
2092 case 'm': return _PE; | |
2093 case 'n': | |
2094 case 'N': return DAL; | |
2095 case 'o': return _XE; | |
2096 case 'p': return _HE_J; | |
2097 case 'q': return _ZAD; | |
2098 case 'r': return _GHAF; | |
2099 case 's': return _SIN; | |
2100 case 'S': return _IE; | |
2101 case 't': return _FE; | |
2102 case 'u': | |
2103 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2104 return _AYN_; | |
2105 else | |
2106 return _AYN; | |
2107 case 'v': | |
2108 case 'V': return RE; | |
2109 case 'w': return _SAD; | |
2110 case 'x': | |
2111 case 'X': return _TA; | |
2112 case 'y': | |
2113 if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR)) | |
2114 return _GHAYN_; | |
2115 else | |
2116 return _GHAYN; | |
2117 case 'z': | |
2118 case 'Z': return _ZA; | |
2119 case ';': return _KAF; | |
2120 case '\'': return _GAF; | |
2121 case ',': return WAW; | |
2122 case '[': return _JIM; | |
2123 case ']': return _CHE; | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2124 } |
7 | 2125 |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2126 return c; |
7 | 2127 } |
2128 | |
2129 /* | |
2130 * F_isalpha returns TRUE if 'c' is a Farsi alphabet | |
2131 */ | |
2132 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
2133 F_isalpha(int c) |
7 | 2134 { |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2135 return ((c >= TEE_ && c <= _YE) |
7 | 2136 || (c >= ALEF_A && c <= YE) |
2137 || (c >= _IE && c <= YE_)); | |
2138 } | |
2139 | |
2140 /* | |
2141 * F_isdigit returns TRUE if 'c' is a Farsi digit | |
2142 */ | |
2143 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
2144 F_isdigit(int c) |
7 | 2145 { |
2146 return (c >= FARSI_0 && c <= FARSI_9); | |
2147 } | |
2148 | |
2149 /* | |
2150 * F_ischar returns TRUE if 'c' is a Farsi character. | |
2151 */ | |
2152 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7801
diff
changeset
|
2153 F_ischar(int c) |
7 | 2154 { |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2155 return (c >= TEE_ && c <= YE_); |
7 | 2156 } |
2157 | |
2158 void | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2159 farsi_f8(cmdarg_T *cap UNUSED) |
7 | 2160 { |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2161 if (p_altkeymap) |
7 | 2162 { |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2163 if (curwin->w_farsi & W_R_L) |
7 | 2164 { |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2165 p_fkmap = 0; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2166 do_cmdline_cmd((char_u *)"set norl"); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2167 MSG(""); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2168 } |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2169 else |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2170 { |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2171 p_fkmap = 1; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2172 do_cmdline_cmd((char_u *)"set rl"); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2173 MSG(""); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2174 } |
7 | 2175 |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2176 curwin->w_farsi = curwin->w_farsi ^ W_R_L; |
7 | 2177 } |
2178 } | |
9399
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2179 |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2180 void |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2181 farsi_f9(cmdarg_T *cap UNUSED) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2182 { |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2183 if (p_altkeymap && curwin->w_p_rl) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2184 { |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2185 curwin->w_farsi = curwin->w_farsi ^ W_CONV; |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2186 if (curwin->w_farsi & W_CONV) |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2187 conv_to_pvim(); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2188 else |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2189 conv_to_pstd(); |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2190 } |
43b8570abbec
commit https://github.com/vim/vim/commit/ee2615af64fdcee87d8e4b13b65356e77fbd969b
Christian Brabandt <cb@256bit.org>
parents:
8238
diff
changeset
|
2191 } |