xref: /vim-8.2.3635/src/testdir/test_arabic.vim (revision 588cf754)
1b5e83773SBram Moolenaar" Simplistic testing of Arabic mode.
23ff2f095SBram Moolenaar" NOTE: This just checks if the code works. If you know Arabic please add
33ff2f095SBram Moolenaar" functional tests that check the shaping works with real text.
4b5e83773SBram Moolenaar
5b46fecd3SBram Moolenaarsource check.vim
6b46fecd3SBram MoolenaarCheckFeature arabic
7b5e83773SBram Moolenaar
85342f00fSBram Moolenaarsource view_util.vim
9b5e83773SBram Moolenaar
105342f00fSBram Moolenaar" Return list of Unicode characters at line lnum.
11b5e83773SBram Moolenaar" Combining characters are treated as a single item.
125342f00fSBram Moolenaarfunc s:get_chars(lnum)
13b5e83773SBram Moolenaar  call cursor(a:lnum, 1)
14b5e83773SBram Moolenaar  let chars = []
15b5e83773SBram Moolenaar  let numchars = strchars(getline('.'), 1)
16b5e83773SBram Moolenaar  for i in range(1, numchars)
17b5e83773SBram Moolenaar    exe 'norm ' i . '|'
185342f00fSBram Moolenaar    let c = execute('ascii')
195342f00fSBram Moolenaar    let c = substitute(c, '\n\?<.\{-}Hex\s*', 'U+', 'g')
205f73ef8dSBram Moolenaar    let c = substitute(c, ',\s*Oct\(al\)\=\s\d*\(, Digr ..\)\=', '', 'g')
215342f00fSBram Moolenaar    call add(chars, c)
22b5e83773SBram Moolenaar  endfor
23b5e83773SBram Moolenaar  return chars
24b5e83773SBram Moolenaarendfunc
25b5e83773SBram Moolenaar
26b5e83773SBram Moolenaarfunc Test_arabic_toggle()
27b5e83773SBram Moolenaar  set arabic
28b5e83773SBram Moolenaar  call assert_equal(1, &rightleft)
29b5e83773SBram Moolenaar  call assert_equal(1, &arabicshape)
30b5e83773SBram Moolenaar  call assert_equal('arabic', &keymap)
31b5e83773SBram Moolenaar  call assert_equal(1, &delcombine)
32b5e83773SBram Moolenaar
33b5e83773SBram Moolenaar  set iminsert=1 imsearch=1
34b5e83773SBram Moolenaar  set arabic&
35b5e83773SBram Moolenaar  call assert_equal(0, &rightleft)
36b5e83773SBram Moolenaar  call assert_equal(1, &arabicshape)
37b5e83773SBram Moolenaar  call assert_equal('arabic', &keymap)
38b5e83773SBram Moolenaar  call assert_equal(1, &delcombine)
39b5e83773SBram Moolenaar  call assert_equal(0, &iminsert)
40b5e83773SBram Moolenaar  call assert_equal(-1, &imsearch)
41b5e83773SBram Moolenaar
42b5e83773SBram Moolenaar  set arabicshape& keymap= delcombine&
43b5e83773SBram Moolenaarendfunc
44b5e83773SBram Moolenaar
45b5e83773SBram Moolenaarfunc Test_arabic_input()
46b5e83773SBram Moolenaar  new
47b5e83773SBram Moolenaar  set arabic
48b5e83773SBram Moolenaar  " Typing sghl in Arabic insert mode should show the
495342f00fSBram Moolenaar  " Arabic word 'Salaam' i.e. 'peace', spelled:
505342f00fSBram Moolenaar  " SEEN, LAM, ALEF, MEEM.
515342f00fSBram Moolenaar  " See: https://www.mediawiki.org/wiki/VisualEditor/Typing/Right-to-left
525342f00fSBram Moolenaar  call feedkeys('isghl!', 'tx')
535342f00fSBram Moolenaar  call assert_match("^ *!\uFEE1\uFEFC\uFEB3$", ScreenLines(1, &columns)[0])
54b5e83773SBram Moolenaar  call assert_equal([
555342f00fSBram Moolenaar  \ 'U+0633',
565342f00fSBram Moolenaar  \ 'U+0644 U+0627',
575342f00fSBram Moolenaar  \ 'U+0645',
585342f00fSBram Moolenaar  \ 'U+21'], s:get_chars(1))
59b5e83773SBram Moolenaar
60b5e83773SBram Moolenaar  " Without shaping, it should give individual Arabic letters.
61b5e83773SBram Moolenaar  set noarabicshape
625342f00fSBram Moolenaar  call assert_match("^ *!\u0645\u0627\u0644\u0633$", ScreenLines(1, &columns)[0])
63b5e83773SBram Moolenaar  call assert_equal([
645342f00fSBram Moolenaar  \ 'U+0633',
655342f00fSBram Moolenaar  \ 'U+0644',
665342f00fSBram Moolenaar  \ 'U+0627',
675342f00fSBram Moolenaar  \ 'U+0645',
685342f00fSBram Moolenaar  \ 'U+21'], s:get_chars(1))
69b5e83773SBram Moolenaar
705342f00fSBram Moolenaar  set arabic& arabicshape&
71b5e83773SBram Moolenaar  bwipe!
72b5e83773SBram Moolenaarendfunc
73b5e83773SBram Moolenaar
74b5e83773SBram Moolenaarfunc Test_arabic_toggle_keymap()
75b5e83773SBram Moolenaar  new
76b5e83773SBram Moolenaar  set arabic
77b5e83773SBram Moolenaar  call feedkeys("i12\<C-^>12\<C-^>12", 'tx')
785342f00fSBram Moolenaar  call assert_match("^ *٢١21٢١$", ScreenLines(1, &columns)[0])
79b5e83773SBram Moolenaar  call assert_equal('١٢12١٢', getline('.'))
80b5e83773SBram Moolenaar  set arabic&
81b5e83773SBram Moolenaar  bwipe!
82b5e83773SBram Moolenaarendfunc
83b5e83773SBram Moolenaar
84b5e83773SBram Moolenaarfunc Test_delcombine()
85b5e83773SBram Moolenaar  new
86b5e83773SBram Moolenaar  set arabic
87b5e83773SBram Moolenaar  call feedkeys("isghl\<BS>\<BS>", 'tx')
885342f00fSBram Moolenaar  call assert_match("^ *\uFEDE\uFEB3$", ScreenLines(1, &columns)[0])
895342f00fSBram Moolenaar  call assert_equal(['U+0633', 'U+0644'], s:get_chars(1))
90b5e83773SBram Moolenaar
915342f00fSBram Moolenaar  " Now the same with 'nodelcombine'
92b5e83773SBram Moolenaar  set nodelcombine
93b5e83773SBram Moolenaar  %d
94b5e83773SBram Moolenaar  call feedkeys("isghl\<BS>\<BS>", 'tx')
955342f00fSBram Moolenaar  call assert_match("^ *\uFEB1$", ScreenLines(1, &columns)[0])
965342f00fSBram Moolenaar  call assert_equal(['U+0633'], s:get_chars(1))
97b5e83773SBram Moolenaar  set arabic&
98b5e83773SBram Moolenaar  bwipe!
99b5e83773SBram Moolenaarendfunc
1005342f00fSBram Moolenaar
1015f53dd3fSBram Moolenaar" Values from src/arabic.h (not all used yet)
1025f53dd3fSBram Moolenaarlet s:a_COMMA = "\u060C"
1035f53dd3fSBram Moolenaarlet s:a_SEMICOLON = "\u061B"
1045f53dd3fSBram Moolenaarlet s:a_QUESTION = "\u061F"
1055342f00fSBram Moolenaarlet s:a_HAMZA = "\u0621"
1065342f00fSBram Moolenaarlet s:a_ALEF_MADDA = "\u0622"
1075342f00fSBram Moolenaarlet s:a_ALEF_HAMZA_ABOVE = "\u0623"
1085f53dd3fSBram Moolenaarlet s:a_WAW_HAMZA = "\u0624"
1095f53dd3fSBram Moolenaarlet s:a_ALEF_HAMZA_BELOW = "\u0625"
1105f53dd3fSBram Moolenaarlet s:a_YEH_HAMZA = "\u0626"
1115f53dd3fSBram Moolenaarlet s:a_ALEF = "\u0627"
1125f53dd3fSBram Moolenaarlet s:a_BEH = "\u0628"
1135f53dd3fSBram Moolenaarlet s:a_TEH_MARBUTA = "\u0629"
1145f53dd3fSBram Moolenaarlet s:a_TEH = "\u062a"
1155f53dd3fSBram Moolenaarlet s:a_THEH = "\u062b"
1165f53dd3fSBram Moolenaarlet s:a_JEEM = "\u062c"
1175f53dd3fSBram Moolenaarlet s:a_HAH = "\u062d"
1185f53dd3fSBram Moolenaarlet s:a_KHAH = "\u062e"
1195f53dd3fSBram Moolenaarlet s:a_DAL = "\u062f"
1205f53dd3fSBram Moolenaarlet s:a_THAL = "\u0630"
1215f53dd3fSBram Moolenaarlet s:a_REH = "\u0631"
1225f53dd3fSBram Moolenaarlet s:a_ZAIN = "\u0632"
1235f53dd3fSBram Moolenaarlet s:a_SEEN = "\u0633"
1245f53dd3fSBram Moolenaarlet s:a_SHEEN = "\u0634"
1255f53dd3fSBram Moolenaarlet s:a_SAD = "\u0635"
1265f53dd3fSBram Moolenaarlet s:a_DAD = "\u0636"
1275f53dd3fSBram Moolenaarlet s:a_TAH = "\u0637"
1285f53dd3fSBram Moolenaarlet s:a_ZAH = "\u0638"
1295f53dd3fSBram Moolenaarlet s:a_AIN = "\u0639"
1305342f00fSBram Moolenaarlet s:a_GHAIN = "\u063a"
1315f53dd3fSBram Moolenaarlet s:a_TATWEEL = "\u0640"
1325f53dd3fSBram Moolenaarlet s:a_FEH = "\u0641"
1335f53dd3fSBram Moolenaarlet s:a_QAF = "\u0642"
1345f53dd3fSBram Moolenaarlet s:a_KAF = "\u0643"
1355f53dd3fSBram Moolenaarlet s:a_LAM = "\u0644"
1365f53dd3fSBram Moolenaarlet s:a_MEEM = "\u0645"
1375f53dd3fSBram Moolenaarlet s:a_NOON = "\u0646"
1385f53dd3fSBram Moolenaarlet s:a_HEH = "\u0647"
1395f53dd3fSBram Moolenaarlet s:a_WAW = "\u0648"
1405f53dd3fSBram Moolenaarlet s:a_ALEF_MAKSURA = "\u0649"
1415f53dd3fSBram Moolenaarlet s:a_YEH = "\u064a"
1425f53dd3fSBram Moolenaar
1435f53dd3fSBram Moolenaarlet s:a_FATHATAN = "\u064b"
1445f53dd3fSBram Moolenaarlet s:a_DAMMATAN = "\u064c"
1455f53dd3fSBram Moolenaarlet s:a_KASRATAN = "\u064d"
1465f53dd3fSBram Moolenaarlet s:a_FATHA = "\u064e"
1475f53dd3fSBram Moolenaarlet s:a_DAMMA = "\u064f"
1485f53dd3fSBram Moolenaarlet s:a_KASRA = "\u0650"
1495f53dd3fSBram Moolenaarlet s:a_SHADDA = "\u0651"
1505f53dd3fSBram Moolenaarlet s:a_SUKUN = "\u0652"
1515f53dd3fSBram Moolenaar
1525f53dd3fSBram Moolenaarlet s:a_MADDA_ABOVE = "\u0653"
1535f53dd3fSBram Moolenaarlet s:a_HAMZA_ABOVE = "\u0654"
1545f53dd3fSBram Moolenaarlet s:a_HAMZA_BELOW = "\u0655"
1555f53dd3fSBram Moolenaar
1565f53dd3fSBram Moolenaarlet s:a_ZERO = "\u0660"
1575f53dd3fSBram Moolenaarlet s:a_ONE = "\u0661"
1585f53dd3fSBram Moolenaarlet s:a_TWO = "\u0662"
1595f53dd3fSBram Moolenaarlet s:a_THREE = "\u0663"
1605f53dd3fSBram Moolenaarlet s:a_FOUR = "\u0664"
1615f53dd3fSBram Moolenaarlet s:a_FIVE = "\u0665"
1625f53dd3fSBram Moolenaarlet s:a_SIX = "\u0666"
1635f53dd3fSBram Moolenaarlet s:a_SEVEN = "\u0667"
1645f53dd3fSBram Moolenaarlet s:a_EIGHT = "\u0668"
1655f53dd3fSBram Moolenaarlet s:a_NINE = "\u0669"
1665f53dd3fSBram Moolenaarlet s:a_PERCENT = "\u066a"
1675f53dd3fSBram Moolenaarlet s:a_DECIMAL = "\u066b"
1685f53dd3fSBram Moolenaarlet s:a_THOUSANDS = "\u066c"
1695f53dd3fSBram Moolenaarlet s:a_STAR = "\u066d"
1705f53dd3fSBram Moolenaarlet s:a_MINI_ALEF = "\u0670"
1715f53dd3fSBram Moolenaar
1725f53dd3fSBram Moolenaarlet s:a_s_FATHATAN = "\ufe70"
1735f53dd3fSBram Moolenaarlet s:a_m_TATWEEL_FATHATAN = "\ufe71"
1745f53dd3fSBram Moolenaarlet s:a_s_DAMMATAN = "\ufe72"
1755f53dd3fSBram Moolenaar
1765f53dd3fSBram Moolenaarlet s:a_s_KASRATAN = "\ufe74"
1775f53dd3fSBram Moolenaar
1785f53dd3fSBram Moolenaarlet s:a_s_FATHA = "\ufe76"
1795f53dd3fSBram Moolenaarlet s:a_m_FATHA = "\ufe77"
1805f53dd3fSBram Moolenaarlet s:a_s_DAMMA = "\ufe78"
1815f53dd3fSBram Moolenaarlet s:a_m_DAMMA = "\ufe79"
1825f53dd3fSBram Moolenaarlet s:a_s_KASRA = "\ufe7a"
1835f53dd3fSBram Moolenaarlet s:a_m_KASRA = "\ufe7b"
1845f53dd3fSBram Moolenaarlet s:a_s_SHADDA = "\ufe7c"
1855f53dd3fSBram Moolenaarlet s:a_m_SHADDA = "\ufe7d"
1865f53dd3fSBram Moolenaarlet s:a_s_SUKUN = "\ufe7e"
1875f53dd3fSBram Moolenaarlet s:a_m_SUKUN = "\ufe7f"
1885f53dd3fSBram Moolenaar
1895f53dd3fSBram Moolenaarlet s:a_s_HAMZA = "\ufe80"
1905f53dd3fSBram Moolenaarlet s:a_s_ALEF_MADDA = "\ufe81"
1915f53dd3fSBram Moolenaarlet s:a_f_ALEF_MADDA = "\ufe82"
1925f53dd3fSBram Moolenaarlet s:a_s_ALEF_HAMZA_ABOVE = "\ufe83"
1935f53dd3fSBram Moolenaarlet s:a_f_ALEF_HAMZA_ABOVE = "\ufe84"
1945f53dd3fSBram Moolenaarlet s:a_s_WAW_HAMZA = "\ufe85"
1955f53dd3fSBram Moolenaarlet s:a_f_WAW_HAMZA = "\ufe86"
1965f53dd3fSBram Moolenaarlet s:a_s_ALEF_HAMZA_BELOW = "\ufe87"
1975f53dd3fSBram Moolenaarlet s:a_f_ALEF_HAMZA_BELOW = "\ufe88"
1985f53dd3fSBram Moolenaarlet s:a_s_YEH_HAMZA = "\ufe89"
1995f53dd3fSBram Moolenaarlet s:a_f_YEH_HAMZA = "\ufe8a"
2005f53dd3fSBram Moolenaarlet s:a_i_YEH_HAMZA = "\ufe8b"
2015f53dd3fSBram Moolenaarlet s:a_m_YEH_HAMZA = "\ufe8c"
2025f53dd3fSBram Moolenaarlet s:a_s_ALEF = "\ufe8d"
2035f53dd3fSBram Moolenaarlet s:a_f_ALEF = "\ufe8e"
2045f53dd3fSBram Moolenaarlet s:a_s_BEH = "\ufe8f"
2055f53dd3fSBram Moolenaarlet s:a_f_BEH = "\ufe90"
2065f53dd3fSBram Moolenaarlet s:a_i_BEH = "\ufe91"
2075f53dd3fSBram Moolenaarlet s:a_m_BEH = "\ufe92"
2085f53dd3fSBram Moolenaarlet s:a_s_TEH_MARBUTA = "\ufe93"
2095f53dd3fSBram Moolenaarlet s:a_f_TEH_MARBUTA = "\ufe94"
2105f53dd3fSBram Moolenaarlet s:a_s_TEH = "\ufe95"
2115f53dd3fSBram Moolenaarlet s:a_f_TEH = "\ufe96"
2125f53dd3fSBram Moolenaarlet s:a_i_TEH = "\ufe97"
2135f53dd3fSBram Moolenaarlet s:a_m_TEH = "\ufe98"
2145f53dd3fSBram Moolenaarlet s:a_s_THEH = "\ufe99"
2155f53dd3fSBram Moolenaarlet s:a_f_THEH = "\ufe9a"
2165f53dd3fSBram Moolenaarlet s:a_i_THEH = "\ufe9b"
2175f53dd3fSBram Moolenaarlet s:a_m_THEH = "\ufe9c"
2185f53dd3fSBram Moolenaarlet s:a_s_JEEM = "\ufe9d"
2195f53dd3fSBram Moolenaarlet s:a_f_JEEM = "\ufe9e"
2205f53dd3fSBram Moolenaarlet s:a_i_JEEM = "\ufe9f"
2215f53dd3fSBram Moolenaarlet s:a_m_JEEM = "\ufea0"
2225f53dd3fSBram Moolenaarlet s:a_s_HAH = "\ufea1"
2235f53dd3fSBram Moolenaarlet s:a_f_HAH = "\ufea2"
2245f53dd3fSBram Moolenaarlet s:a_i_HAH = "\ufea3"
2255f53dd3fSBram Moolenaarlet s:a_m_HAH = "\ufea4"
2265f53dd3fSBram Moolenaarlet s:a_s_KHAH = "\ufea5"
2275f53dd3fSBram Moolenaarlet s:a_f_KHAH = "\ufea6"
2285f53dd3fSBram Moolenaarlet s:a_i_KHAH = "\ufea7"
2295f53dd3fSBram Moolenaarlet s:a_m_KHAH = "\ufea8"
2305f53dd3fSBram Moolenaarlet s:a_s_DAL = "\ufea9"
2315f53dd3fSBram Moolenaarlet s:a_f_DAL = "\ufeaa"
2325f53dd3fSBram Moolenaarlet s:a_s_THAL = "\ufeab"
2335f53dd3fSBram Moolenaarlet s:a_f_THAL = "\ufeac"
2345f53dd3fSBram Moolenaarlet s:a_s_REH = "\ufead"
2355f53dd3fSBram Moolenaarlet s:a_f_REH = "\ufeae"
2365f53dd3fSBram Moolenaarlet s:a_s_ZAIN = "\ufeaf"
2375f53dd3fSBram Moolenaarlet s:a_f_ZAIN = "\ufeb0"
2385f53dd3fSBram Moolenaarlet s:a_s_SEEN = "\ufeb1"
2395f53dd3fSBram Moolenaarlet s:a_f_SEEN = "\ufeb2"
2405f53dd3fSBram Moolenaarlet s:a_i_SEEN = "\ufeb3"
2415f53dd3fSBram Moolenaarlet s:a_m_SEEN = "\ufeb4"
2425f53dd3fSBram Moolenaarlet s:a_s_SHEEN = "\ufeb5"
2435f53dd3fSBram Moolenaarlet s:a_f_SHEEN = "\ufeb6"
2445f53dd3fSBram Moolenaarlet s:a_i_SHEEN = "\ufeb7"
2455f53dd3fSBram Moolenaarlet s:a_m_SHEEN = "\ufeb8"
2465f53dd3fSBram Moolenaarlet s:a_s_SAD = "\ufeb9"
2475f53dd3fSBram Moolenaarlet s:a_f_SAD = "\ufeba"
2485f53dd3fSBram Moolenaarlet s:a_i_SAD = "\ufebb"
2495f53dd3fSBram Moolenaarlet s:a_m_SAD = "\ufebc"
2505f53dd3fSBram Moolenaarlet s:a_s_DAD = "\ufebd"
2515f53dd3fSBram Moolenaarlet s:a_f_DAD = "\ufebe"
2525f53dd3fSBram Moolenaarlet s:a_i_DAD = "\ufebf"
2535f53dd3fSBram Moolenaarlet s:a_m_DAD = "\ufec0"
2545f53dd3fSBram Moolenaarlet s:a_s_TAH = "\ufec1"
2555f53dd3fSBram Moolenaarlet s:a_f_TAH = "\ufec2"
2565f53dd3fSBram Moolenaarlet s:a_i_TAH = "\ufec3"
2575f53dd3fSBram Moolenaarlet s:a_m_TAH = "\ufec4"
2585f53dd3fSBram Moolenaarlet s:a_s_ZAH = "\ufec5"
2595f53dd3fSBram Moolenaarlet s:a_f_ZAH = "\ufec6"
2605f53dd3fSBram Moolenaarlet s:a_i_ZAH = "\ufec7"
2615f53dd3fSBram Moolenaarlet s:a_m_ZAH = "\ufec8"
2625f53dd3fSBram Moolenaarlet s:a_s_AIN = "\ufec9"
2635f53dd3fSBram Moolenaarlet s:a_f_AIN = "\ufeca"
2645f53dd3fSBram Moolenaarlet s:a_i_AIN = "\ufecb"
2655f53dd3fSBram Moolenaarlet s:a_m_AIN = "\ufecc"
2665342f00fSBram Moolenaarlet s:a_s_GHAIN = "\ufecd"
2675f53dd3fSBram Moolenaarlet s:a_f_GHAIN = "\ufece"
2685f53dd3fSBram Moolenaarlet s:a_i_GHAIN = "\ufecf"
2695f53dd3fSBram Moolenaarlet s:a_m_GHAIN = "\ufed0"
2705f53dd3fSBram Moolenaarlet s:a_s_FEH = "\ufed1"
2715f53dd3fSBram Moolenaarlet s:a_f_FEH = "\ufed2"
2725f53dd3fSBram Moolenaarlet s:a_i_FEH = "\ufed3"
2735f53dd3fSBram Moolenaarlet s:a_m_FEH = "\ufed4"
2745f53dd3fSBram Moolenaarlet s:a_s_QAF = "\ufed5"
2755f53dd3fSBram Moolenaarlet s:a_f_QAF = "\ufed6"
2765f53dd3fSBram Moolenaarlet s:a_i_QAF = "\ufed7"
2775f53dd3fSBram Moolenaarlet s:a_m_QAF = "\ufed8"
2785f53dd3fSBram Moolenaarlet s:a_s_KAF = "\ufed9"
2795f53dd3fSBram Moolenaarlet s:a_f_KAF = "\ufeda"
2805f53dd3fSBram Moolenaarlet s:a_i_KAF = "\ufedb"
2815f53dd3fSBram Moolenaarlet s:a_m_KAF = "\ufedc"
2825f53dd3fSBram Moolenaarlet s:a_s_LAM = "\ufedd"
2835f53dd3fSBram Moolenaarlet s:a_f_LAM = "\ufede"
2845f53dd3fSBram Moolenaarlet s:a_i_LAM = "\ufedf"
2855f53dd3fSBram Moolenaarlet s:a_m_LAM = "\ufee0"
2865f53dd3fSBram Moolenaarlet s:a_s_MEEM = "\ufee1"
2875f53dd3fSBram Moolenaarlet s:a_f_MEEM = "\ufee2"
2885f53dd3fSBram Moolenaarlet s:a_i_MEEM = "\ufee3"
2895f53dd3fSBram Moolenaarlet s:a_m_MEEM = "\ufee4"
2905f53dd3fSBram Moolenaarlet s:a_s_NOON = "\ufee5"
2915f53dd3fSBram Moolenaarlet s:a_f_NOON = "\ufee6"
2925f53dd3fSBram Moolenaarlet s:a_i_NOON = "\ufee7"
2935f53dd3fSBram Moolenaarlet s:a_m_NOON = "\ufee8"
2945f53dd3fSBram Moolenaarlet s:a_s_HEH = "\ufee9"
2955f53dd3fSBram Moolenaarlet s:a_f_HEH = "\ufeea"
2965f53dd3fSBram Moolenaarlet s:a_i_HEH = "\ufeeb"
2975f53dd3fSBram Moolenaarlet s:a_m_HEH = "\ufeec"
2985f53dd3fSBram Moolenaarlet s:a_s_WAW = "\ufeed"
2995f53dd3fSBram Moolenaarlet s:a_f_WAW = "\ufeee"
3005f53dd3fSBram Moolenaarlet s:a_s_ALEF_MAKSURA = "\ufeef"
3015f53dd3fSBram Moolenaarlet s:a_f_ALEF_MAKSURA = "\ufef0"
3025f53dd3fSBram Moolenaarlet s:a_s_YEH = "\ufef1"
3035f53dd3fSBram Moolenaarlet s:a_f_YEH = "\ufef2"
3045f53dd3fSBram Moolenaarlet s:a_i_YEH = "\ufef3"
3055f53dd3fSBram Moolenaarlet s:a_m_YEH = "\ufef4"
3065f53dd3fSBram Moolenaarlet s:a_s_LAM_ALEF_MADDA_ABOVE = "\ufef5"
3075f53dd3fSBram Moolenaarlet s:a_f_LAM_ALEF_MADDA_ABOVE = "\ufef6"
3085f53dd3fSBram Moolenaarlet s:a_s_LAM_ALEF_HAMZA_ABOVE = "\ufef7"
3095f53dd3fSBram Moolenaarlet s:a_f_LAM_ALEF_HAMZA_ABOVE = "\ufef8"
3105f53dd3fSBram Moolenaarlet s:a_s_LAM_ALEF_HAMZA_BELOW = "\ufef9"
3115f53dd3fSBram Moolenaarlet s:a_f_LAM_ALEF_HAMZA_BELOW = "\ufefa"
3125f53dd3fSBram Moolenaarlet s:a_s_LAM_ALEF = "\ufefb"
3135f53dd3fSBram Moolenaarlet s:a_f_LAM_ALEF = "\ufefc"
3145f53dd3fSBram Moolenaar
3155f53dd3fSBram Moolenaarlet s:a_BYTE_ORDER_MARK = "\ufeff"
3165342f00fSBram Moolenaar
3175342f00fSBram Moolenaarfunc Test_shape_initial()
3185342f00fSBram Moolenaar  new
3195342f00fSBram Moolenaar  set arabicshape
3205342f00fSBram Moolenaar
3215f53dd3fSBram Moolenaar  " Shaping arabic {testchar} non-arabic   Tests chg_c_a2i().
3225342f00fSBram Moolenaar  " pair[0] = testchar, pair[1] = next-result, pair[2] = current-result
3235342f00fSBram Moolenaar  for pair in [[s:a_YEH_HAMZA, s:a_f_GHAIN, s:a_i_YEH_HAMZA],
3245342f00fSBram Moolenaar	\ [s:a_HAMZA, s:a_s_GHAIN, s:a_s_HAMZA],
3255342f00fSBram Moolenaar	\ [s:a_ALEF_MADDA, s:a_s_GHAIN, s:a_s_ALEF_MADDA],
3265342f00fSBram Moolenaar	\ [s:a_ALEF_HAMZA_ABOVE, s:a_s_GHAIN, s:a_s_ALEF_HAMZA_ABOVE],
3275f53dd3fSBram Moolenaar	\ [s:a_WAW_HAMZA, s:a_s_GHAIN, s:a_s_WAW_HAMZA],
3285f53dd3fSBram Moolenaar	\ [s:a_ALEF_HAMZA_BELOW, s:a_s_GHAIN, s:a_s_ALEF_HAMZA_BELOW],
3295f53dd3fSBram Moolenaar	\ [s:a_ALEF, s:a_s_GHAIN, s:a_s_ALEF],
3305f53dd3fSBram Moolenaar	\ [s:a_TEH_MARBUTA, s:a_s_GHAIN, s:a_s_TEH_MARBUTA],
3315f53dd3fSBram Moolenaar	\ [s:a_DAL, s:a_s_GHAIN, s:a_s_DAL],
3325f53dd3fSBram Moolenaar	\ [s:a_THAL, s:a_s_GHAIN, s:a_s_THAL],
3335f53dd3fSBram Moolenaar	\ [s:a_REH, s:a_s_GHAIN, s:a_s_REH],
3345f53dd3fSBram Moolenaar	\ [s:a_ZAIN, s:a_s_GHAIN, s:a_s_ZAIN],
3355f53dd3fSBram Moolenaar	\ [s:a_TATWEEL, s:a_f_GHAIN, s:a_TATWEEL],
3365f53dd3fSBram Moolenaar	\ [s:a_WAW, s:a_s_GHAIN, s:a_s_WAW],
3375f53dd3fSBram Moolenaar	\ [s:a_ALEF_MAKSURA, s:a_s_GHAIN, s:a_s_ALEF_MAKSURA],
3385f53dd3fSBram Moolenaar	\ [s:a_BEH, s:a_f_GHAIN, s:a_i_BEH],
3395f53dd3fSBram Moolenaar	\ [s:a_TEH, s:a_f_GHAIN, s:a_i_TEH],
3405f53dd3fSBram Moolenaar	\ [s:a_THEH, s:a_f_GHAIN, s:a_i_THEH],
3415f53dd3fSBram Moolenaar	\ [s:a_JEEM, s:a_f_GHAIN, s:a_i_JEEM],
3425f53dd3fSBram Moolenaar	\ [s:a_HAH, s:a_f_GHAIN, s:a_i_HAH],
3435f53dd3fSBram Moolenaar	\ [s:a_KHAH, s:a_f_GHAIN, s:a_i_KHAH],
3445f53dd3fSBram Moolenaar	\ [s:a_SEEN, s:a_f_GHAIN, s:a_i_SEEN],
3455f53dd3fSBram Moolenaar	\ [s:a_SHEEN, s:a_f_GHAIN, s:a_i_SHEEN],
3465f53dd3fSBram Moolenaar	\ [s:a_SAD, s:a_f_GHAIN, s:a_i_SAD],
3475f53dd3fSBram Moolenaar	\ [s:a_DAD, s:a_f_GHAIN, s:a_i_DAD],
3485f53dd3fSBram Moolenaar	\ [s:a_TAH, s:a_f_GHAIN, s:a_i_TAH],
3495f53dd3fSBram Moolenaar	\ [s:a_ZAH, s:a_f_GHAIN, s:a_i_ZAH],
3505f53dd3fSBram Moolenaar	\ [s:a_AIN, s:a_f_GHAIN, s:a_i_AIN],
3515f53dd3fSBram Moolenaar	\ [s:a_GHAIN, s:a_f_GHAIN, s:a_i_GHAIN],
3525f53dd3fSBram Moolenaar	\ [s:a_FEH, s:a_f_GHAIN, s:a_i_FEH],
3535f53dd3fSBram Moolenaar	\ [s:a_QAF, s:a_f_GHAIN, s:a_i_QAF],
3545f53dd3fSBram Moolenaar	\ [s:a_KAF, s:a_f_GHAIN, s:a_i_KAF],
3555f53dd3fSBram Moolenaar	\ [s:a_LAM, s:a_f_GHAIN, s:a_i_LAM],
3565f53dd3fSBram Moolenaar	\ [s:a_MEEM, s:a_f_GHAIN, s:a_i_MEEM],
3575f53dd3fSBram Moolenaar	\ [s:a_NOON, s:a_f_GHAIN, s:a_i_NOON],
3585f53dd3fSBram Moolenaar	\ [s:a_HEH, s:a_f_GHAIN, s:a_i_HEH],
3595f53dd3fSBram Moolenaar	\ [s:a_YEH, s:a_f_GHAIN, s:a_i_YEH],
3605342f00fSBram Moolenaar	\ ]
3615342f00fSBram Moolenaar    call setline(1, s:a_GHAIN . pair[0] . ' ')
3625342f00fSBram Moolenaar    call assert_equal([pair[1] . pair[2] . ' '], ScreenLines(1, 3))
3635342f00fSBram Moolenaar  endfor
3645342f00fSBram Moolenaar
3655342f00fSBram Moolenaar  set arabicshape&
3665342f00fSBram Moolenaar  bwipe!
3675342f00fSBram Moolenaarendfunc
3685f53dd3fSBram Moolenaar
3695f53dd3fSBram Moolenaarfunc Test_shape_isolated()
3705f53dd3fSBram Moolenaar  new
3715f53dd3fSBram Moolenaar  set arabicshape
3725f53dd3fSBram Moolenaar
3735f53dd3fSBram Moolenaar  " Shaping non-arabic {testchar} non-arabic   Tests chg_c_a2s().
3745f53dd3fSBram Moolenaar  " pair[0] = testchar, pair[1] = current-result
3755f53dd3fSBram Moolenaar  for pair in [[s:a_HAMZA, s:a_s_HAMZA],
3765f53dd3fSBram Moolenaar	\ [s:a_ALEF_MADDA, s:a_s_ALEF_MADDA],
3775f53dd3fSBram Moolenaar	\ [s:a_ALEF_HAMZA_ABOVE, s:a_s_ALEF_HAMZA_ABOVE],
3785f53dd3fSBram Moolenaar	\ [s:a_WAW_HAMZA, s:a_s_WAW_HAMZA],
3795f53dd3fSBram Moolenaar	\ [s:a_ALEF_HAMZA_BELOW, s:a_s_ALEF_HAMZA_BELOW],
3805f53dd3fSBram Moolenaar	\ [s:a_YEH_HAMZA, s:a_s_YEH_HAMZA],
3815f53dd3fSBram Moolenaar	\ [s:a_ALEF, s:a_s_ALEF],
3825f53dd3fSBram Moolenaar	\ [s:a_TEH_MARBUTA, s:a_s_TEH_MARBUTA],
3835f53dd3fSBram Moolenaar	\ [s:a_DAL, s:a_s_DAL],
3845f53dd3fSBram Moolenaar	\ [s:a_THAL, s:a_s_THAL],
3855f53dd3fSBram Moolenaar	\ [s:a_REH, s:a_s_REH],
3865f53dd3fSBram Moolenaar	\ [s:a_ZAIN, s:a_s_ZAIN],
3875f53dd3fSBram Moolenaar	\ [s:a_TATWEEL, s:a_TATWEEL],
3885f53dd3fSBram Moolenaar	\ [s:a_WAW, s:a_s_WAW],
3895f53dd3fSBram Moolenaar	\ [s:a_ALEF_MAKSURA, s:a_s_ALEF_MAKSURA],
3905f53dd3fSBram Moolenaar	\ [s:a_BEH, s:a_s_BEH],
3915f53dd3fSBram Moolenaar	\ [s:a_TEH, s:a_s_TEH],
3925f53dd3fSBram Moolenaar	\ [s:a_THEH, s:a_s_THEH],
3935f53dd3fSBram Moolenaar	\ [s:a_JEEM, s:a_s_JEEM],
3945f53dd3fSBram Moolenaar	\ [s:a_HAH, s:a_s_HAH],
3955f53dd3fSBram Moolenaar	\ [s:a_KHAH, s:a_s_KHAH],
3965f53dd3fSBram Moolenaar	\ [s:a_SEEN, s:a_s_SEEN],
3975f53dd3fSBram Moolenaar	\ [s:a_SHEEN, s:a_s_SHEEN],
3985f53dd3fSBram Moolenaar	\ [s:a_SAD, s:a_s_SAD],
3995f53dd3fSBram Moolenaar	\ [s:a_DAD, s:a_s_DAD],
4005f53dd3fSBram Moolenaar	\ [s:a_TAH, s:a_s_TAH],
4015f53dd3fSBram Moolenaar	\ [s:a_ZAH, s:a_s_ZAH],
4025f53dd3fSBram Moolenaar	\ [s:a_AIN, s:a_s_AIN],
4035f53dd3fSBram Moolenaar	\ [s:a_GHAIN, s:a_s_GHAIN],
4045f53dd3fSBram Moolenaar	\ [s:a_FEH, s:a_s_FEH],
4055f53dd3fSBram Moolenaar	\ [s:a_QAF, s:a_s_QAF],
4065f53dd3fSBram Moolenaar	\ [s:a_KAF, s:a_s_KAF],
4075f53dd3fSBram Moolenaar	\ [s:a_LAM, s:a_s_LAM],
4085f53dd3fSBram Moolenaar	\ [s:a_MEEM, s:a_s_MEEM],
4095f53dd3fSBram Moolenaar	\ [s:a_NOON, s:a_s_NOON],
4105f53dd3fSBram Moolenaar	\ [s:a_HEH, s:a_s_HEH],
4115f53dd3fSBram Moolenaar	\ [s:a_YEH, s:a_s_YEH],
4125f53dd3fSBram Moolenaar	\ ]
4135f53dd3fSBram Moolenaar    call setline(1, ' ' . pair[0] . ' ')
4145f53dd3fSBram Moolenaar    call assert_equal([' ' . pair[1] . ' '], ScreenLines(1, 3))
4155f53dd3fSBram Moolenaar  endfor
4165f53dd3fSBram Moolenaar
4175f53dd3fSBram Moolenaar  set arabicshape&
4185f53dd3fSBram Moolenaar  bwipe!
4195f53dd3fSBram Moolenaarendfunc
4205f53dd3fSBram Moolenaar
4213ff2f095SBram Moolenaarfunc Test_shape_iso_to_medial()
4225f53dd3fSBram Moolenaar  new
4235f53dd3fSBram Moolenaar  set arabicshape
4245f53dd3fSBram Moolenaar
4255f53dd3fSBram Moolenaar  " Shaping arabic {testchar} arabic   Tests chg_c_a2m().
4265f53dd3fSBram Moolenaar  " pair[0] = testchar, pair[1] = next-result, pair[2] = current-result,
4275f53dd3fSBram Moolenaar  " pair[3] = previous-result
4285f53dd3fSBram Moolenaar  for pair in [[s:a_HAMZA, s:a_s_GHAIN, s:a_s_HAMZA, s:a_s_BEH],
4295f53dd3fSBram Moolenaar	\[s:a_ALEF_MADDA, s:a_s_GHAIN, s:a_f_ALEF_MADDA, s:a_i_BEH],
4305f53dd3fSBram Moolenaar	\[s:a_ALEF_HAMZA_ABOVE, s:a_s_GHAIN, s:a_f_ALEF_HAMZA_ABOVE, s:a_i_BEH],
4315f53dd3fSBram Moolenaar	\[s:a_WAW_HAMZA, s:a_s_GHAIN, s:a_f_WAW_HAMZA, s:a_i_BEH],
4325f53dd3fSBram Moolenaar	\[s:a_ALEF_HAMZA_BELOW, s:a_s_GHAIN, s:a_f_ALEF_HAMZA_BELOW, s:a_i_BEH],
4335f53dd3fSBram Moolenaar	\[s:a_YEH_HAMZA, s:a_f_GHAIN, s:a_m_YEH_HAMZA, s:a_i_BEH],
4345f53dd3fSBram Moolenaar	\[s:a_ALEF, s:a_s_GHAIN, s:a_f_ALEF, s:a_i_BEH],
4355f53dd3fSBram Moolenaar	\[s:a_BEH, s:a_f_GHAIN, s:a_m_BEH, s:a_i_BEH],
4365f53dd3fSBram Moolenaar	\[s:a_TEH_MARBUTA, s:a_s_GHAIN, s:a_f_TEH_MARBUTA, s:a_i_BEH],
4375f53dd3fSBram Moolenaar	\[s:a_TEH, s:a_f_GHAIN, s:a_m_TEH, s:a_i_BEH],
4385f53dd3fSBram Moolenaar	\[s:a_THEH, s:a_f_GHAIN, s:a_m_THEH, s:a_i_BEH],
4395f53dd3fSBram Moolenaar	\[s:a_JEEM, s:a_f_GHAIN, s:a_m_JEEM, s:a_i_BEH],
4405f53dd3fSBram Moolenaar	\[s:a_HAH, s:a_f_GHAIN, s:a_m_HAH, s:a_i_BEH],
4415f53dd3fSBram Moolenaar	\[s:a_KHAH, s:a_f_GHAIN, s:a_m_KHAH, s:a_i_BEH],
4425f53dd3fSBram Moolenaar	\[s:a_DAL, s:a_s_GHAIN, s:a_f_DAL, s:a_i_BEH],
4435f53dd3fSBram Moolenaar	\[s:a_THAL, s:a_s_GHAIN, s:a_f_THAL, s:a_i_BEH],
4445f53dd3fSBram Moolenaar	\[s:a_REH, s:a_s_GHAIN, s:a_f_REH, s:a_i_BEH],
4455f53dd3fSBram Moolenaar	\[s:a_ZAIN, s:a_s_GHAIN, s:a_f_ZAIN, s:a_i_BEH],
4465f53dd3fSBram Moolenaar	\[s:a_SEEN, s:a_f_GHAIN, s:a_m_SEEN, s:a_i_BEH],
4475f53dd3fSBram Moolenaar	\[s:a_SHEEN, s:a_f_GHAIN, s:a_m_SHEEN, s:a_i_BEH],
4485f53dd3fSBram Moolenaar	\[s:a_SAD, s:a_f_GHAIN, s:a_m_SAD, s:a_i_BEH],
4495f53dd3fSBram Moolenaar	\[s:a_DAD, s:a_f_GHAIN, s:a_m_DAD, s:a_i_BEH],
4505f53dd3fSBram Moolenaar	\[s:a_TAH, s:a_f_GHAIN, s:a_m_TAH, s:a_i_BEH],
4515f53dd3fSBram Moolenaar	\[s:a_ZAH, s:a_f_GHAIN, s:a_m_ZAH, s:a_i_BEH],
4525f53dd3fSBram Moolenaar	\[s:a_AIN, s:a_f_GHAIN, s:a_m_AIN, s:a_i_BEH],
4535f53dd3fSBram Moolenaar	\[s:a_GHAIN, s:a_f_GHAIN, s:a_m_GHAIN, s:a_i_BEH],
4545f53dd3fSBram Moolenaar	\[s:a_TATWEEL, s:a_f_GHAIN, s:a_TATWEEL, s:a_i_BEH],
4555f53dd3fSBram Moolenaar	\[s:a_FEH, s:a_f_GHAIN, s:a_m_FEH, s:a_i_BEH],
4565f53dd3fSBram Moolenaar	\[s:a_QAF, s:a_f_GHAIN, s:a_m_QAF, s:a_i_BEH],
4575f53dd3fSBram Moolenaar	\[s:a_KAF, s:a_f_GHAIN, s:a_m_KAF, s:a_i_BEH],
4585f53dd3fSBram Moolenaar	\[s:a_LAM, s:a_f_GHAIN, s:a_m_LAM, s:a_i_BEH],
4595f53dd3fSBram Moolenaar	\[s:a_MEEM, s:a_f_GHAIN, s:a_m_MEEM, s:a_i_BEH],
4605f53dd3fSBram Moolenaar	\[s:a_NOON, s:a_f_GHAIN, s:a_m_NOON, s:a_i_BEH],
4615f53dd3fSBram Moolenaar	\[s:a_HEH, s:a_f_GHAIN, s:a_m_HEH, s:a_i_BEH],
4625f53dd3fSBram Moolenaar	\[s:a_WAW, s:a_s_GHAIN, s:a_f_WAW, s:a_i_BEH],
4635f53dd3fSBram Moolenaar	\[s:a_ALEF_MAKSURA, s:a_s_GHAIN, s:a_f_ALEF_MAKSURA, s:a_i_BEH],
4645f53dd3fSBram Moolenaar	\[s:a_YEH, s:a_f_GHAIN, s:a_m_YEH, s:a_i_BEH],
4655f53dd3fSBram Moolenaar	\ ]
4665f53dd3fSBram Moolenaar    call setline(1, s:a_GHAIN . pair[0] . s:a_BEH)
4675f53dd3fSBram Moolenaar    call assert_equal([pair[1] . pair[2] . pair[3]], ScreenLines(1, 3))
4685f53dd3fSBram Moolenaar  endfor
4695f53dd3fSBram Moolenaar
4705f53dd3fSBram Moolenaar  set arabicshape&
4715f53dd3fSBram Moolenaar  bwipe!
4725f53dd3fSBram Moolenaarendfunc
4735f53dd3fSBram Moolenaar
4743ff2f095SBram Moolenaarfunc Test_shape_final()
4753ff2f095SBram Moolenaar  new
4763ff2f095SBram Moolenaar  set arabicshape
4773ff2f095SBram Moolenaar
4783ff2f095SBram Moolenaar  " Shaping arabic {testchar} arabic   Tests chg_c_a2f().
4793ff2f095SBram Moolenaar  " pair[0] = testchar,  pair[1] = current-result, pair[2] = previous-result
4803ff2f095SBram Moolenaar  for pair in [[s:a_HAMZA, s:a_s_HAMZA, s:a_s_BEH],
4813ff2f095SBram Moolenaar	\[s:a_ALEF_MADDA, s:a_f_ALEF_MADDA, s:a_i_BEH],
4823ff2f095SBram Moolenaar	\[s:a_ALEF_HAMZA_ABOVE, s:a_f_ALEF_HAMZA_ABOVE, s:a_i_BEH],
4833ff2f095SBram Moolenaar	\[s:a_WAW_HAMZA, s:a_f_WAW_HAMZA, s:a_i_BEH],
4843ff2f095SBram Moolenaar	\[s:a_ALEF_HAMZA_BELOW, s:a_f_ALEF_HAMZA_BELOW, s:a_i_BEH],
4853ff2f095SBram Moolenaar	\[s:a_YEH_HAMZA, s:a_f_YEH_HAMZA, s:a_i_BEH],
4863ff2f095SBram Moolenaar	\[s:a_ALEF, s:a_f_ALEF, s:a_i_BEH],
4873ff2f095SBram Moolenaar	\[s:a_BEH, s:a_f_BEH, s:a_i_BEH],
4883ff2f095SBram Moolenaar	\[s:a_TEH_MARBUTA, s:a_f_TEH_MARBUTA, s:a_i_BEH],
4893ff2f095SBram Moolenaar	\[s:a_TEH, s:a_f_TEH, s:a_i_BEH],
4903ff2f095SBram Moolenaar	\[s:a_THEH, s:a_f_THEH, s:a_i_BEH],
4913ff2f095SBram Moolenaar	\[s:a_JEEM, s:a_f_JEEM, s:a_i_BEH],
4923ff2f095SBram Moolenaar	\[s:a_HAH, s:a_f_HAH, s:a_i_BEH],
4933ff2f095SBram Moolenaar	\[s:a_KHAH, s:a_f_KHAH, s:a_i_BEH],
4943ff2f095SBram Moolenaar	\[s:a_DAL, s:a_f_DAL, s:a_i_BEH],
4953ff2f095SBram Moolenaar	\[s:a_THAL, s:a_f_THAL, s:a_i_BEH],
4963ff2f095SBram Moolenaar	\[s:a_REH, s:a_f_REH, s:a_i_BEH],
4973ff2f095SBram Moolenaar	\[s:a_ZAIN, s:a_f_ZAIN, s:a_i_BEH],
4983ff2f095SBram Moolenaar	\[s:a_SEEN, s:a_f_SEEN, s:a_i_BEH],
4993ff2f095SBram Moolenaar	\[s:a_SHEEN, s:a_f_SHEEN, s:a_i_BEH],
5003ff2f095SBram Moolenaar	\[s:a_SAD, s:a_f_SAD, s:a_i_BEH],
5013ff2f095SBram Moolenaar	\[s:a_DAD, s:a_f_DAD, s:a_i_BEH],
5023ff2f095SBram Moolenaar	\[s:a_TAH, s:a_f_TAH, s:a_i_BEH],
5033ff2f095SBram Moolenaar	\[s:a_ZAH, s:a_f_ZAH, s:a_i_BEH],
5043ff2f095SBram Moolenaar	\[s:a_AIN, s:a_f_AIN, s:a_i_BEH],
5053ff2f095SBram Moolenaar	\[s:a_GHAIN, s:a_f_GHAIN, s:a_i_BEH],
5063ff2f095SBram Moolenaar	\[s:a_TATWEEL, s:a_TATWEEL, s:a_i_BEH],
5073ff2f095SBram Moolenaar	\[s:a_FEH, s:a_f_FEH, s:a_i_BEH],
5083ff2f095SBram Moolenaar	\[s:a_QAF, s:a_f_QAF, s:a_i_BEH],
5093ff2f095SBram Moolenaar	\[s:a_KAF, s:a_f_KAF, s:a_i_BEH],
5103ff2f095SBram Moolenaar	\[s:a_LAM, s:a_f_LAM, s:a_i_BEH],
5113ff2f095SBram Moolenaar	\[s:a_MEEM, s:a_f_MEEM, s:a_i_BEH],
5123ff2f095SBram Moolenaar	\[s:a_NOON, s:a_f_NOON, s:a_i_BEH],
5133ff2f095SBram Moolenaar	\[s:a_HEH, s:a_f_HEH, s:a_i_BEH],
5143ff2f095SBram Moolenaar	\[s:a_WAW, s:a_f_WAW, s:a_i_BEH],
5153ff2f095SBram Moolenaar	\[s:a_ALEF_MAKSURA, s:a_f_ALEF_MAKSURA, s:a_i_BEH],
5163ff2f095SBram Moolenaar	\[s:a_YEH, s:a_f_YEH, s:a_i_BEH],
5173ff2f095SBram Moolenaar	\ ]
5183ff2f095SBram Moolenaar    call setline(1, ' ' . pair[0] . s:a_BEH)
5193ff2f095SBram Moolenaar    call assert_equal([' ' . pair[1] . pair[2]], ScreenLines(1, 3))
5203ff2f095SBram Moolenaar  endfor
5213ff2f095SBram Moolenaar
5223ff2f095SBram Moolenaar  set arabicshape&
5233ff2f095SBram Moolenaar  bwipe!
5243ff2f095SBram Moolenaarendfunc
5253ff2f095SBram Moolenaar
5263ff2f095SBram Moolenaarfunc Test_shape_combination_final()
5273ff2f095SBram Moolenaar  new
5283ff2f095SBram Moolenaar  set arabicshape
5293ff2f095SBram Moolenaar
5303ff2f095SBram Moolenaar  " Shaping arabic {testchar} arabic   Tests chg_c_laa2f().
5313ff2f095SBram Moolenaar  " pair[0] = testchar,  pair[1] = current-result
5323ff2f095SBram Moolenaar  for pair in [[s:a_ALEF_MADDA, s:a_f_LAM_ALEF_MADDA_ABOVE],
5333ff2f095SBram Moolenaar	\ [s:a_ALEF_HAMZA_ABOVE, s:a_f_LAM_ALEF_HAMZA_ABOVE],
5343ff2f095SBram Moolenaar	\ [s:a_ALEF_HAMZA_BELOW, s:a_f_LAM_ALEF_HAMZA_BELOW],
5353ff2f095SBram Moolenaar	\ [s:a_ALEF, s:a_f_LAM_ALEF],
5363ff2f095SBram Moolenaar	\ ]
5373ff2f095SBram Moolenaar    " The test char is a composing char, put on s:a_LAM.
5383ff2f095SBram Moolenaar    call setline(1, ' ' . s:a_LAM . pair[0] . s:a_BEH)
5393ff2f095SBram Moolenaar    call assert_equal([' ' . pair[1] . s:a_i_BEH], ScreenLines(1, 3))
5403ff2f095SBram Moolenaar  endfor
5413ff2f095SBram Moolenaar
5423ff2f095SBram Moolenaar  set arabicshape&
5433ff2f095SBram Moolenaar  bwipe!
5443ff2f095SBram Moolenaarendfunc
5453ff2f095SBram Moolenaar
5463ff2f095SBram Moolenaarfunc Test_shape_combination_isolated()
5473ff2f095SBram Moolenaar  new
5483ff2f095SBram Moolenaar  set arabicshape
5493ff2f095SBram Moolenaar
5503ff2f095SBram Moolenaar  " Shaping arabic {testchar} arabic   Tests chg_c_laa2i().
5513ff2f095SBram Moolenaar  " pair[0] = testchar,  pair[1] = current-result
5523ff2f095SBram Moolenaar  for pair in [[s:a_ALEF_MADDA, s:a_s_LAM_ALEF_MADDA_ABOVE],
5533ff2f095SBram Moolenaar	\ [s:a_ALEF_HAMZA_ABOVE, s:a_s_LAM_ALEF_HAMZA_ABOVE],
5543ff2f095SBram Moolenaar	\ [s:a_ALEF_HAMZA_BELOW, s:a_s_LAM_ALEF_HAMZA_BELOW],
5553ff2f095SBram Moolenaar	\ [s:a_ALEF, s:a_s_LAM_ALEF],
5563ff2f095SBram Moolenaar	\ ]
5573ff2f095SBram Moolenaar    " The test char is a composing char, put on s:a_LAM.
5583ff2f095SBram Moolenaar    call setline(1, ' ' . s:a_LAM . pair[0] . ' ')
5593ff2f095SBram Moolenaar    call assert_equal([' ' . pair[1] . ' '], ScreenLines(1, 3))
5603ff2f095SBram Moolenaar  endfor
5613ff2f095SBram Moolenaar
5623ff2f095SBram Moolenaar  set arabicshape&
5633ff2f095SBram Moolenaar  bwipe!
5643ff2f095SBram Moolenaarendfunc
565d30ae2fcSBram Moolenaar
566d30ae2fcSBram Moolenaar" Test for entering arabic character in a search command
567d30ae2fcSBram Moolenaarfunc Test_arabic_chars_in_search_cmd()
568d30ae2fcSBram Moolenaar  new
569d30ae2fcSBram Moolenaar  set arabic
570d30ae2fcSBram Moolenaar  call feedkeys("i\nsghl!\<C-^>vim\<C-^>", 'tx')
571d30ae2fcSBram Moolenaar  call cursor(1, 1)
572d30ae2fcSBram Moolenaar  call feedkeys("/^sghl!\<C-^>vim$\<C-^>\<CR>", 'tx')
573d30ae2fcSBram Moolenaar  call assert_equal([2, 1], [line('.'), col('.')])
574d30ae2fcSBram Moolenaar
575d30ae2fcSBram Moolenaar  " Try searching in left-to-right mode
576d30ae2fcSBram Moolenaar  set rightleftcmd=
577d30ae2fcSBram Moolenaar  call cursor(1, 1)
578d30ae2fcSBram Moolenaar  call feedkeys("/^sghl!\<C-^>vim$\<CR>", 'tx')
579d30ae2fcSBram Moolenaar  call assert_equal([2, 1], [line('.'), col('.')])
580d30ae2fcSBram Moolenaar
581d30ae2fcSBram Moolenaar  set rightleftcmd&
582d30ae2fcSBram Moolenaar  set rightleft&
583d30ae2fcSBram Moolenaar  set arabic&
584d30ae2fcSBram Moolenaar  bwipe!
585d30ae2fcSBram Moolenaarendfunc
586d30ae2fcSBram Moolenaar
587*588cf754SDominique Pellefunc Test_W17_arabic_requires_utf8()
588*588cf754SDominique Pelle  let save_enc = &encoding
589*588cf754SDominique Pelle  set encoding=latin1 arabic
590*588cf754SDominique Pelle  call assert_match('^W17:', GetMessages()[-1])
591*588cf754SDominique Pelle  set arabic&
592*588cf754SDominique Pelle  let &encoding = save_enc
593*588cf754SDominique Pelleendfunc
594*588cf754SDominique Pelle
595d30ae2fcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
596