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