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