Mercurial > vim
comparison src/arabic.c @ 11004:f91d4c95b696 v8.0.0391
patch 8.0.0391: arabic support is verbose and not well tested
commit https://github.com/vim/vim/commit/5f53dd3f747711be90879fa2f22a207970b86750
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Mar 1 14:02:30 2017 +0100
patch 8.0.0391: arabic support is verbose and not well tested
Problem: Arabic support is verbose and not well tested.
Solution: Simplify the code. Add more tests.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 01 Mar 2017 14:15:04 +0100 |
parents | 4aead6a9b7a9 |
children | 8ae6d6052b14 |
comparison
equal
deleted
inserted
replaced
11003:bf484fd6443a | 11004:f91d4c95b696 |
---|---|
198 * Change shape - from ISO-8859-6/Isolated to Form-B Isolated | 198 * Change shape - from ISO-8859-6/Isolated to Form-B Isolated |
199 */ | 199 */ |
200 static int | 200 static int |
201 chg_c_a2s(int cur_c) | 201 chg_c_a2s(int cur_c) |
202 { | 202 { |
203 int tempc; | |
204 | |
205 switch (cur_c) | 203 switch (cur_c) |
206 { | 204 { |
207 case a_HAMZA: | 205 case a_HAMZA: return a_s_HAMZA; |
208 tempc = a_s_HAMZA; | 206 case a_ALEF_MADDA: return a_s_ALEF_MADDA; |
209 break; | 207 case a_ALEF_HAMZA_ABOVE: return a_s_ALEF_HAMZA_ABOVE; |
210 case a_ALEF_MADDA: | 208 case a_WAW_HAMZA: return a_s_WAW_HAMZA; |
211 tempc = a_s_ALEF_MADDA; | 209 case a_ALEF_HAMZA_BELOW: return a_s_ALEF_HAMZA_BELOW; |
212 break; | 210 case a_YEH_HAMZA: return a_s_YEH_HAMZA; |
213 case a_ALEF_HAMZA_ABOVE: | 211 case a_ALEF: return a_s_ALEF; |
214 tempc = a_s_ALEF_HAMZA_ABOVE; | 212 case a_TEH_MARBUTA: return a_s_TEH_MARBUTA; |
215 break; | 213 case a_DAL: return a_s_DAL; |
216 case a_WAW_HAMZA: | 214 case a_THAL: return a_s_THAL; |
217 tempc = a_s_WAW_HAMZA; | 215 case a_REH: return a_s_REH; |
218 break; | 216 case a_ZAIN: return a_s_ZAIN; |
219 case a_ALEF_HAMZA_BELOW: | 217 case a_TATWEEL: return cur_c; /* exceptions */ |
220 tempc = a_s_ALEF_HAMZA_BELOW; | 218 case a_WAW: return a_s_WAW; |
221 break; | 219 case a_ALEF_MAKSURA: return a_s_ALEF_MAKSURA; |
222 case a_YEH_HAMZA: | 220 case a_BEH: return a_s_BEH; |
223 tempc = a_s_YEH_HAMZA; | 221 case a_TEH: return a_s_TEH; |
224 break; | 222 case a_THEH: return a_s_THEH; |
225 case a_ALEF: | 223 case a_JEEM: return a_s_JEEM; |
226 tempc = a_s_ALEF; | 224 case a_HAH: return a_s_HAH; |
227 break; | 225 case a_KHAH: return a_s_KHAH; |
228 case a_TEH_MARBUTA: | 226 case a_SEEN: return a_s_SEEN; |
229 tempc = a_s_TEH_MARBUTA; | 227 case a_SHEEN: return a_s_SHEEN; |
230 break; | 228 case a_SAD: return a_s_SAD; |
231 case a_DAL: | 229 case a_DAD: return a_s_DAD; |
232 tempc = a_s_DAL; | 230 case a_TAH: return a_s_TAH; |
233 break; | 231 case a_ZAH: return a_s_ZAH; |
234 case a_THAL: | 232 case a_AIN: return a_s_AIN; |
235 tempc = a_s_THAL; | 233 case a_GHAIN: return a_s_GHAIN; |
236 break; | 234 case a_FEH: return a_s_FEH; |
237 case a_REH: | 235 case a_QAF: return a_s_QAF; |
238 tempc = a_s_REH; | 236 case a_KAF: return a_s_KAF; |
239 break; | 237 case a_LAM: return a_s_LAM; |
240 case a_ZAIN: | 238 case a_MEEM: return a_s_MEEM; |
241 tempc = a_s_ZAIN; | 239 case a_NOON: return a_s_NOON; |
242 break; | 240 case a_HEH: return a_s_HEH; |
241 case a_YEH: return a_s_YEH; | |
242 } | |
243 | |
244 return 0; | |
245 } | |
246 | |
247 | |
248 /* | |
249 * Change shape - from ISO-8859-6/Isolated to Initial | |
250 */ | |
251 static int | |
252 chg_c_a2i(int cur_c) | |
253 { | |
254 switch (cur_c) | |
255 { | |
256 case a_YEH_HAMZA: return a_i_YEH_HAMZA; | |
257 case a_HAMZA: /* exceptions */ | |
258 return a_s_HAMZA; | |
259 case a_ALEF_MADDA: /* exceptions */ | |
260 return a_s_ALEF_MADDA; | |
261 case a_ALEF_HAMZA_ABOVE: /* exceptions */ | |
262 return a_s_ALEF_HAMZA_ABOVE; | |
263 case a_WAW_HAMZA: /* exceptions */ | |
264 return a_s_WAW_HAMZA; | |
265 case a_ALEF_HAMZA_BELOW: /* exceptions */ | |
266 return a_s_ALEF_HAMZA_BELOW; | |
267 case a_ALEF: /* exceptions */ | |
268 return a_s_ALEF; | |
269 case a_TEH_MARBUTA: /* exceptions */ | |
270 return a_s_TEH_MARBUTA; | |
271 case a_DAL: /* exceptions */ | |
272 return a_s_DAL; | |
273 case a_THAL: /* exceptions */ | |
274 return a_s_THAL; | |
275 case a_REH: /* exceptions */ | |
276 return a_s_REH; | |
277 case a_ZAIN: /* exceptions */ | |
278 return a_s_ZAIN; | |
243 case a_TATWEEL: /* exceptions */ | 279 case a_TATWEEL: /* exceptions */ |
244 tempc = cur_c; | 280 return cur_c; |
245 break; | 281 case a_WAW: /* exceptions */ |
246 case a_WAW: | 282 return a_s_WAW; |
247 tempc = a_s_WAW; | 283 case a_ALEF_MAKSURA: /* exceptions */ |
248 break; | 284 return a_s_ALEF_MAKSURA; |
249 case a_ALEF_MAKSURA: | 285 case a_BEH: return a_i_BEH; |
250 tempc = a_s_ALEF_MAKSURA; | 286 case a_TEH: return a_i_TEH; |
251 break; | 287 case a_THEH: return a_i_THEH; |
252 case a_BEH: | 288 case a_JEEM: return a_i_JEEM; |
253 tempc = a_s_BEH; | 289 case a_HAH: return a_i_HAH; |
254 break; | 290 case a_KHAH: return a_i_KHAH; |
255 case a_TEH: | 291 case a_SEEN: return a_i_SEEN; |
256 tempc = a_s_TEH; | 292 case a_SHEEN: return a_i_SHEEN; |
257 break; | 293 case a_SAD: return a_i_SAD; |
258 case a_THEH: | 294 case a_DAD: return a_i_DAD; |
259 tempc = a_s_THEH; | 295 case a_TAH: return a_i_TAH; |
260 break; | 296 case a_ZAH: return a_i_ZAH; |
261 case a_JEEM: | 297 case a_AIN: return a_i_AIN; |
262 tempc = a_s_JEEM; | 298 case a_GHAIN: return a_i_GHAIN; |
263 break; | 299 case a_FEH: return a_i_FEH; |
264 case a_HAH: | 300 case a_QAF: return a_i_QAF; |
265 tempc = a_s_HAH; | 301 case a_KAF: return a_i_KAF; |
266 break; | 302 case a_LAM: return a_i_LAM; |
267 case a_KHAH: | 303 case a_MEEM: return a_i_MEEM; |
268 tempc = a_s_KHAH; | 304 case a_NOON: return a_i_NOON; |
269 break; | 305 case a_HEH: return a_i_HEH; |
270 case a_SEEN: | 306 case a_YEH: return a_i_YEH; |
271 tempc = a_s_SEEN; | 307 } |
272 break; | 308 |
273 case a_SHEEN: | 309 return 0; |
274 tempc = a_s_SHEEN; | 310 } |
275 break; | 311 |
276 case a_SAD: | 312 |
277 tempc = a_s_SAD; | 313 /* |
278 break; | 314 * Change shape - from ISO-8859-6/Isolated to Medial |
279 case a_DAD: | 315 */ |
280 tempc = a_s_DAD; | 316 static int |
281 break; | 317 chg_c_a2m(int cur_c) |
282 case a_TAH: | 318 { |
283 tempc = a_s_TAH; | |
284 break; | |
285 case a_ZAH: | |
286 tempc = a_s_ZAH; | |
287 break; | |
288 case a_AIN: | |
289 tempc = a_s_AIN; | |
290 break; | |
291 case a_GHAIN: | |
292 tempc = a_s_GHAIN; | |
293 break; | |
294 case a_FEH: | |
295 tempc = a_s_FEH; | |
296 break; | |
297 case a_QAF: | |
298 tempc = a_s_QAF; | |
299 break; | |
300 case a_KAF: | |
301 tempc = a_s_KAF; | |
302 break; | |
303 case a_LAM: | |
304 tempc = a_s_LAM; | |
305 break; | |
306 case a_MEEM: | |
307 tempc = a_s_MEEM; | |
308 break; | |
309 case a_NOON: | |
310 tempc = a_s_NOON; | |
311 break; | |
312 case a_HEH: | |
313 tempc = a_s_HEH; | |
314 break; | |
315 case a_YEH: | |
316 tempc = a_s_YEH; | |
317 break; | |
318 default: | |
319 tempc = 0; | |
320 } | |
321 | |
322 return tempc; | |
323 } | |
324 | |
325 | |
326 /* | |
327 * Change shape - from ISO-8859-6/Isolated to Initial | |
328 */ | |
329 static int | |
330 chg_c_a2i(int cur_c) | |
331 { | |
332 int tempc; | |
333 | |
334 switch (cur_c) | 319 switch (cur_c) |
335 { | 320 { |
336 case a_YEH_HAMZA: | 321 case a_HAMZA: return a_s_HAMZA; /* exception */ |
337 tempc = a_i_YEH_HAMZA; | 322 case a_ALEF_MADDA: return a_f_ALEF_MADDA; /* exception */ |
338 break; | 323 case a_ALEF_HAMZA_ABOVE: return a_f_ALEF_HAMZA_ABOVE; /* exception */ |
339 case a_HAMZA: /* exceptions */ | 324 case a_WAW_HAMZA: return a_f_WAW_HAMZA; /* exception */ |
340 tempc = a_s_HAMZA; | 325 case a_ALEF_HAMZA_BELOW: return a_f_ALEF_HAMZA_BELOW; /* exception */ |
341 break; | 326 case a_YEH_HAMZA: return a_m_YEH_HAMZA; |
342 case a_ALEF_MADDA: /* exceptions */ | 327 case a_ALEF: return a_f_ALEF; /* exception */ |
343 tempc = a_s_ALEF_MADDA; | 328 case a_BEH: return a_m_BEH; |
344 break; | 329 case a_TEH_MARBUTA: return a_f_TEH_MARBUTA; /* exception */ |
345 case a_ALEF_HAMZA_ABOVE: /* exceptions */ | 330 case a_TEH: return a_m_TEH; |
346 tempc = a_s_ALEF_HAMZA_ABOVE; | 331 case a_THEH: return a_m_THEH; |
347 break; | 332 case a_JEEM: return a_m_JEEM; |
348 case a_WAW_HAMZA: /* exceptions */ | 333 case a_HAH: return a_m_HAH; |
349 tempc = a_s_WAW_HAMZA; | 334 case a_KHAH: return a_m_KHAH; |
350 break; | 335 case a_DAL: return a_f_DAL; /* exception */ |
351 case a_ALEF_HAMZA_BELOW: /* exceptions */ | 336 case a_THAL: return a_f_THAL; /* exception */ |
352 tempc = a_s_ALEF_HAMZA_BELOW; | 337 case a_REH: return a_f_REH; /* exception */ |
353 break; | 338 case a_ZAIN: return a_f_ZAIN; /* exception */ |
354 case a_ALEF: /* exceptions */ | 339 case a_SEEN: return a_m_SEEN; |
355 tempc = a_s_ALEF; | 340 case a_SHEEN: return a_m_SHEEN; |
356 break; | 341 case a_SAD: return a_m_SAD; |
357 case a_TEH_MARBUTA: /* exceptions */ | 342 case a_DAD: return a_m_DAD; |
358 tempc = a_s_TEH_MARBUTA; | 343 case a_TAH: return a_m_TAH; |
359 break; | 344 case a_ZAH: return a_m_ZAH; |
360 case a_DAL: /* exceptions */ | 345 case a_AIN: return a_m_AIN; |
361 tempc = a_s_DAL; | 346 case a_GHAIN: return a_m_GHAIN; |
362 break; | 347 case a_TATWEEL: return cur_c; /* exception */ |
363 case a_THAL: /* exceptions */ | 348 case a_FEH: return a_m_FEH; |
364 tempc = a_s_THAL; | 349 case a_QAF: return a_m_QAF; |
365 break; | 350 case a_KAF: return a_m_KAF; |
366 case a_REH: /* exceptions */ | 351 case a_LAM: return a_m_LAM; |
367 tempc = a_s_REH; | 352 case a_MEEM: return a_m_MEEM; |
368 break; | 353 case a_NOON: return a_m_NOON; |
369 case a_ZAIN: /* exceptions */ | 354 case a_HEH: return a_m_HEH; |
370 tempc = a_s_ZAIN; | 355 case a_WAW: return a_f_WAW; /* exception */ |
371 break; | 356 case a_ALEF_MAKSURA: return a_f_ALEF_MAKSURA; /* exception */ |
372 case a_TATWEEL: /* exceptions */ | 357 case a_YEH: return a_m_YEH; |
373 tempc = cur_c; | 358 } |
374 break; | 359 |
375 case a_WAW: /* exceptions */ | 360 return 0; |
376 tempc = a_s_WAW; | |
377 break; | |
378 case a_ALEF_MAKSURA: /* exceptions */ | |
379 tempc = a_s_ALEF_MAKSURA; | |
380 break; | |
381 case a_BEH: | |
382 tempc = a_i_BEH; | |
383 break; | |
384 case a_TEH: | |
385 tempc = a_i_TEH; | |
386 break; | |
387 case a_THEH: | |
388 tempc = a_i_THEH; | |
389 break; | |
390 case a_JEEM: | |
391 tempc = a_i_JEEM; | |
392 break; | |
393 case a_HAH: | |
394 tempc = a_i_HAH; | |
395 break; | |
396 case a_KHAH: | |
397 tempc = a_i_KHAH; | |
398 break; | |
399 case a_SEEN: | |
400 tempc = a_i_SEEN; | |
401 break; | |
402 case a_SHEEN: | |
403 tempc = a_i_SHEEN; | |
404 break; | |
405 case a_SAD: | |
406 tempc = a_i_SAD; | |
407 break; | |
408 case a_DAD: | |
409 tempc = a_i_DAD; | |
410 break; | |
411 case a_TAH: | |
412 tempc = a_i_TAH; | |
413 break; | |
414 case a_ZAH: | |
415 tempc = a_i_ZAH; | |
416 break; | |
417 case a_AIN: | |
418 tempc = a_i_AIN; | |
419 break; | |
420 case a_GHAIN: | |
421 tempc = a_i_GHAIN; | |
422 break; | |
423 case a_FEH: | |
424 tempc = a_i_FEH; | |
425 break; | |
426 case a_QAF: | |
427 tempc = a_i_QAF; | |
428 break; | |
429 case a_KAF: | |
430 tempc = a_i_KAF; | |
431 break; | |
432 case a_LAM: | |
433 tempc = a_i_LAM; | |
434 break; | |
435 case a_MEEM: | |
436 tempc = a_i_MEEM; | |
437 break; | |
438 case a_NOON: | |
439 tempc = a_i_NOON; | |
440 break; | |
441 case a_HEH: | |
442 tempc = a_i_HEH; | |
443 break; | |
444 case a_YEH: | |
445 tempc = a_i_YEH; | |
446 break; | |
447 default: | |
448 tempc = 0; | |
449 } | |
450 | |
451 return tempc; | |
452 } | |
453 | |
454 | |
455 /* | |
456 * Change shape - from ISO-8859-6/Isolated to Medial | |
457 */ | |
458 static int | |
459 chg_c_a2m(int cur_c) | |
460 { | |
461 int tempc; | |
462 | |
463 switch (cur_c) | |
464 { | |
465 case a_HAMZA: /* exception */ | |
466 tempc = a_s_HAMZA; | |
467 break; | |
468 case a_ALEF_MADDA: /* exception */ | |
469 tempc = a_f_ALEF_MADDA; | |
470 break; | |
471 case a_ALEF_HAMZA_ABOVE: /* exception */ | |
472 tempc = a_f_ALEF_HAMZA_ABOVE; | |
473 break; | |
474 case a_WAW_HAMZA: /* exception */ | |
475 tempc = a_f_WAW_HAMZA; | |
476 break; | |
477 case a_ALEF_HAMZA_BELOW: /* exception */ | |
478 tempc = a_f_ALEF_HAMZA_BELOW; | |
479 break; | |
480 case a_YEH_HAMZA: | |
481 tempc = a_m_YEH_HAMZA; | |
482 break; | |
483 case a_ALEF: /* exception */ | |
484 tempc = a_f_ALEF; | |
485 break; | |
486 case a_BEH: | |
487 tempc = a_m_BEH; | |
488 break; | |
489 case a_TEH_MARBUTA: /* exception */ | |
490 tempc = a_f_TEH_MARBUTA; | |
491 break; | |
492 case a_TEH: | |
493 tempc = a_m_TEH; | |
494 break; | |
495 case a_THEH: | |
496 tempc = a_m_THEH; | |
497 break; | |
498 case a_JEEM: | |
499 tempc = a_m_JEEM; | |
500 break; | |
501 case a_HAH: | |
502 tempc = a_m_HAH; | |
503 break; | |
504 case a_KHAH: | |
505 tempc = a_m_KHAH; | |
506 break; | |
507 case a_DAL: /* exception */ | |
508 tempc = a_f_DAL; | |
509 break; | |
510 case a_THAL: /* exception */ | |
511 tempc = a_f_THAL; | |
512 break; | |
513 case a_REH: /* exception */ | |
514 tempc = a_f_REH; | |
515 break; | |
516 case a_ZAIN: /* exception */ | |
517 tempc = a_f_ZAIN; | |
518 break; | |
519 case a_SEEN: | |
520 tempc = a_m_SEEN; | |
521 break; | |
522 case a_SHEEN: | |
523 tempc = a_m_SHEEN; | |
524 break; | |
525 case a_SAD: | |
526 tempc = a_m_SAD; | |
527 break; | |
528 case a_DAD: | |
529 tempc = a_m_DAD; | |
530 break; | |
531 case a_TAH: | |
532 tempc = a_m_TAH; | |
533 break; | |
534 case a_ZAH: | |
535 tempc = a_m_ZAH; | |
536 break; | |
537 case a_AIN: | |
538 tempc = a_m_AIN; | |
539 break; | |
540 case a_GHAIN: | |
541 tempc = a_m_GHAIN; | |
542 break; | |
543 case a_TATWEEL: /* exception */ | |
544 tempc = cur_c; | |
545 break; | |
546 case a_FEH: | |
547 tempc = a_m_FEH; | |
548 break; | |
549 case a_QAF: | |
550 tempc = a_m_QAF; | |
551 break; | |
552 case a_KAF: | |
553 tempc = a_m_KAF; | |
554 break; | |
555 case a_LAM: | |
556 tempc = a_m_LAM; | |
557 break; | |
558 case a_MEEM: | |
559 tempc = a_m_MEEM; | |
560 break; | |
561 case a_NOON: | |
562 tempc = a_m_NOON; | |
563 break; | |
564 case a_HEH: | |
565 tempc = a_m_HEH; | |
566 break; | |
567 case a_WAW: /* exception */ | |
568 tempc = a_f_WAW; | |
569 break; | |
570 case a_ALEF_MAKSURA: /* exception */ | |
571 tempc = a_f_ALEF_MAKSURA; | |
572 break; | |
573 case a_YEH: | |
574 tempc = a_m_YEH; | |
575 break; | |
576 default: | |
577 tempc = 0; | |
578 } | |
579 | |
580 return tempc; | |
581 } | 361 } |
582 | 362 |
583 | 363 |
584 /* | 364 /* |
585 * Change shape - from ISO-8859-6/Isolated to final | 365 * Change shape - from ISO-8859-6/Isolated to final |