1" Tests for digraphs 2 3if !has("digraphs") || !has("multi_byte") 4 finish 5endif 6 7set enc=utf-8 8scriptencoding utf-8 9 10func! Put_Dig(chars) 11 exe "norm! o\<c-k>".a:chars 12endfu 13 14func! Put_Dig_BS(char1, char2) 15 exe "norm! o".a:char1."\<bs>".a:char2 16endfu 17 18func! Test_digraphs() 19 new 20 call Put_Dig("00") 21 call assert_equal("∞", getline('.')) 22 " not a digraph 23 call Put_Dig("el") 24 call assert_equal("l", getline('.')) 25 call Put_Dig("ht") 26 call assert_equal("þ", getline('.')) 27 " digraph "ab" is the same as "ba" 28 call Put_Dig("ab") 29 call Put_Dig("ba") 30 call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 31 " Euro sign 32 call Put_Dig("e=") 33 call Put_Dig("=e") 34 call Put_Dig("Eu") 35 call Put_Dig("uE") 36 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 37 " Rouble sign 38 call Put_Dig("R=") 39 call Put_Dig("=R") 40 call Put_Dig("=P") 41 call Put_Dig("P=") 42 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 43 " Not a digraph 44 call Put_Dig("a\<bs>") 45 call Put_Dig("\<bs>a") 46 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.'))) 47 " Grave 48 call Put_Dig("a!") 49 call Put_Dig("!e") 50 call Put_Dig("b!") " not defined 51 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.'))) 52 " Acute accent 53 call Put_Dig("a'") 54 call Put_Dig("'e") 55 call Put_Dig("b'") " not defined 56 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.'))) 57 " Cicumflex 58 call Put_Dig("a>") 59 call Put_Dig(">e") 60 call Put_Dig("b>") " not defined 61 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 62 " Tilde 63 call Put_Dig("o~") 64 call Put_Dig("~u") " not defined 65 call Put_Dig("z~") " not defined 66 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 67 " Tilde 68 call Put_Dig("o?") 69 call Put_Dig("?u") 70 call Put_Dig("z?") " not defined 71 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.'))) 72 " Macron 73 call Put_Dig("o-") 74 call Put_Dig("-u") 75 call Put_Dig("z-") " not defined 76 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.'))) 77 " Breve 78 call Put_Dig("o(") 79 call Put_Dig("(u") 80 call Put_Dig("z(") " not defined 81 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 82 " Dot above 83 call Put_Dig("b.") 84 call Put_Dig(".e") 85 call Put_Dig("a.") " not defined 86 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 87 " Diaresis 88 call Put_Dig("a:") 89 call Put_Dig(":u") 90 call Put_Dig("b:") " not defined 91 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 92 " Cedilla 93 call Put_Dig("',") 94 call Put_Dig(",C") 95 call Put_Dig("b,") " not defined 96 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 97 " Underline 98 call Put_Dig("B_") 99 call Put_Dig("_t") 100 call Put_Dig("a_") " not defined 101 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 102 " Stroke 103 call Put_Dig("j/") 104 call Put_Dig("/l") 105 call Put_Dig("b/") " not defined 106 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 107 " Double acute 108 call Put_Dig('O"') 109 call Put_Dig('"y') 110 call Put_Dig('b"') " not defined 111 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 112 " Ogonek 113 call Put_Dig('u;') 114 call Put_Dig(';E') 115 call Put_Dig('b;') " not defined 116 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.'))) 117 " Caron 118 call Put_Dig('u<') 119 call Put_Dig('<E') 120 call Put_Dig('b<') " not defined 121 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 122 " Ring above 123 call Put_Dig('u0') 124 call Put_Dig('0E') " not defined 125 call Put_Dig('b0') " not defined 126 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 127 " Hook 128 call Put_Dig('u2') 129 call Put_Dig('2E') 130 call Put_Dig('b2') " not defined 131 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 132 " Horn 133 call Put_Dig('u9') 134 call Put_Dig('9E') " not defined 135 call Put_Dig('b9') " not defined 136 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 137 " Cyrillic 138 call Put_Dig('u=') 139 call Put_Dig('=b') 140 call Put_Dig('=_') 141 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 142 " Greek 143 call Put_Dig('u*') 144 call Put_Dig('*b') 145 call Put_Dig('*_') 146 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 147 " Greek/Cyrillic special 148 call Put_Dig('u%') 149 call Put_Dig('%b') " not defined 150 call Put_Dig('%_') " not defined 151 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 152 " Arabic 153 call Put_Dig('u+') 154 call Put_Dig('+b') 155 call Put_Dig('+_') " japanese industrial symbol 156 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 157 " Hebrew 158 call Put_Dig('Q+') 159 call Put_Dig('+B') 160 call Put_Dig('+X') 161 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 162 " Latin 163 call Put_Dig('a3') 164 call Put_Dig('A3') 165 call Put_Dig('3X') 166 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 167 " Bopomofo 168 call Put_Dig('a4') 169 call Put_Dig('A4') 170 call Put_Dig('4X') 171 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 172 " Hiragana 173 call Put_Dig('a5') 174 call Put_Dig('A5') 175 call Put_Dig('5X') 176 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 177 " Katakana 178 call Put_Dig('a6') 179 call Put_Dig('A6') 180 call Put_Dig('6X') 181 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 182 " Superscripts 183 call Put_Dig('1S') 184 call Put_Dig('2S') 185 call Put_Dig('3S') 186 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 187 " Subscripts 188 call Put_Dig('1s') 189 call Put_Dig('2s') 190 call Put_Dig('3s') 191 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 192 " Eszet (only lowercase) 193 call Put_Dig("ss") 194 call Put_Dig("SS") " start of string 195 call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 196 " High bit set 197 call Put_Dig("a ") 198 call Put_Dig(" A") 199 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.'))) 200 " Escape is not part of a digraph 201 call Put_Dig("a\<esc>") 202 call Put_Dig("\<esc>A") 203 call assert_equal(['', 'A'], getline(line('.')-1,line('.'))) 204 " define some custom digraphs 205 " old: 00 ∞ 206 " old: el l 207 digraph 00 9216 208 digraph el 0252 209 call Put_Dig("00") 210 call Put_Dig("el") 211 " Reset digraphs 212 digraph 00 8734 213 digraph el 108 214 call Put_Dig("00") 215 call Put_Dig("el") 216 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 217 bw! 218endfunc 219 220func! Test_digraphs_option() 221 " reset whichwrap option, so that testing <esc><bs>A works, 222 " without moving up a line 223 set digraph ww= 224 new 225 call Put_Dig_BS("0","0") 226 call assert_equal("∞", getline('.')) 227 " not a digraph 228 call Put_Dig_BS("e","l") 229 call assert_equal("l", getline('.')) 230 call Put_Dig_BS("h","t") 231 call assert_equal("þ", getline('.')) 232 " digraph "ab" is the same as "ba" 233 call Put_Dig_BS("a","b") 234 call Put_Dig_BS("b","a") 235 call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 236 " Euro sign 237 call Put_Dig_BS("e","=") 238 call Put_Dig_BS("=","e") 239 call Put_Dig_BS("E","u") 240 call Put_Dig_BS("u","E") 241 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 242 " Rouble sign 243 call Put_Dig_BS("R","=") 244 call Put_Dig_BS("=","R") 245 call Put_Dig_BS("=","P") 246 call Put_Dig_BS("P","=") 247 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 248 " Not a digraph: this is different from <c-k>! 249 call Put_Dig_BS("a","\<bs>") 250 call Put_Dig_BS("\<bs>","a") 251 call assert_equal(['','a'], getline(line('.')-1,line('.'))) 252 " Grave 253 call Put_Dig_BS("a","!") 254 call Put_Dig_BS("!","e") 255 call Put_Dig_BS("b","!") " not defined 256 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.'))) 257 " Acute accent 258 call Put_Dig_BS("a","'") 259 call Put_Dig_BS("'","e") 260 call Put_Dig_BS("b","'") " not defined 261 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.'))) 262 " Cicumflex 263 call Put_Dig_BS("a",">") 264 call Put_Dig_BS(">","e") 265 call Put_Dig_BS("b",">") " not defined 266 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 267 " Tilde 268 call Put_Dig_BS("o","~") 269 call Put_Dig_BS("~","u") " not defined 270 call Put_Dig_BS("z","~") " not defined 271 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 272 " Tilde 273 call Put_Dig_BS("o","?") 274 call Put_Dig_BS("?","u") 275 call Put_Dig_BS("z","?") " not defined 276 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.'))) 277 " Macron 278 call Put_Dig_BS("o","-") 279 call Put_Dig_BS("-","u") 280 call Put_Dig_BS("z","-") " not defined 281 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.'))) 282 " Breve 283 call Put_Dig_BS("o","(") 284 call Put_Dig_BS("(","u") 285 call Put_Dig_BS("z","(") " not defined 286 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 287 " Dot above 288 call Put_Dig_BS("b",".") 289 call Put_Dig_BS(".","e") 290 call Put_Dig_BS("a",".") " not defined 291 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 292 " Diaresis 293 call Put_Dig_BS("a",":") 294 call Put_Dig_BS(":","u") 295 call Put_Dig_BS("b",":") " not defined 296 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 297 " Cedilla 298 call Put_Dig_BS("'",",") 299 call Put_Dig_BS(",","C") 300 call Put_Dig_BS("b",",") " not defined 301 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 302 " Underline 303 call Put_Dig_BS("B","_") 304 call Put_Dig_BS("_","t") 305 call Put_Dig_BS("a","_") " not defined 306 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 307 " Stroke 308 call Put_Dig_BS("j","/") 309 call Put_Dig_BS("/","l") 310 call Put_Dig_BS("b","/") " not defined 311 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 312 " Double acute 313 call Put_Dig_BS('O','"') 314 call Put_Dig_BS('"','y') 315 call Put_Dig_BS('b','"') " not defined 316 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 317 " Ogonek 318 call Put_Dig_BS('u',';') 319 call Put_Dig_BS(';','E') 320 call Put_Dig_BS('b',';') " not defined 321 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.'))) 322 " Caron 323 call Put_Dig_BS('u','<') 324 call Put_Dig_BS('<','E') 325 call Put_Dig_BS('b','<') " not defined 326 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 327 " Ring above 328 call Put_Dig_BS('u','0') 329 call Put_Dig_BS('0','E') " not defined 330 call Put_Dig_BS('b','0') " not defined 331 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 332 " Hook 333 call Put_Dig_BS('u','2') 334 call Put_Dig_BS('2','E') 335 call Put_Dig_BS('b','2') " not defined 336 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 337 " Horn 338 call Put_Dig_BS('u','9') 339 call Put_Dig_BS('9','E') " not defined 340 call Put_Dig_BS('b','9') " not defined 341 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 342 " Cyrillic 343 call Put_Dig_BS('u','=') 344 call Put_Dig_BS('=','b') 345 call Put_Dig_BS('=','_') 346 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 347 " Greek 348 call Put_Dig_BS('u','*') 349 call Put_Dig_BS('*','b') 350 call Put_Dig_BS('*','_') 351 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 352 " Greek/Cyrillic special 353 call Put_Dig_BS('u','%') 354 call Put_Dig_BS('%','b') " not defined 355 call Put_Dig_BS('%','_') " not defined 356 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 357 " Arabic 358 call Put_Dig_BS('u','+') 359 call Put_Dig_BS('+','b') 360 call Put_Dig_BS('+','_') " japanese industrial symbol 361 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 362 " Hebrew 363 call Put_Dig_BS('Q','+') 364 call Put_Dig_BS('+','B') 365 call Put_Dig_BS('+','X') 366 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 367 " Latin 368 call Put_Dig_BS('a','3') 369 call Put_Dig_BS('A','3') 370 call Put_Dig_BS('3','X') 371 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 372 " Bopomofo 373 call Put_Dig_BS('a','4') 374 call Put_Dig_BS('A','4') 375 call Put_Dig_BS('4','X') 376 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 377 " Hiragana 378 call Put_Dig_BS('a','5') 379 call Put_Dig_BS('A','5') 380 call Put_Dig_BS('5','X') 381 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 382 " Katakana 383 call Put_Dig_BS('a','6') 384 call Put_Dig_BS('A','6') 385 call Put_Dig_BS('6','X') 386 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 387 " Superscripts 388 call Put_Dig_BS('1','S') 389 call Put_Dig_BS('2','S') 390 call Put_Dig_BS('3','S') 391 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 392 " Subscripts 393 call Put_Dig_BS('1','s') 394 call Put_Dig_BS('2','s') 395 call Put_Dig_BS('3','s') 396 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 397 " Eszet (only lowercase) 398 call Put_Dig_BS("s","s") 399 call Put_Dig_BS("S","S") " start of string 400 call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 401 " High bit set (different from <c-k>) 402 call Put_Dig_BS("a"," ") 403 call Put_Dig_BS(" ","A") 404 call assert_equal([' ', 'A'], getline(line('.')-1,line('.'))) 405 " Escape is not part of a digraph (different from <c-k>) 406 call Put_Dig_BS("a","\<esc>") 407 call Put_Dig_BS("\<esc>","A") 408 call assert_equal(['', ''], getline(line('.')-1,line('.'))) 409 " define some custom digraphs 410 " old: 00 ∞ 411 " old: el l 412 digraph 00 9216 413 digraph el 0252 414 call Put_Dig_BS("0","0") 415 call Put_Dig_BS("e","l") 416 " Reset digraphs 417 digraph 00 8734 418 digraph el 108 419 call Put_Dig_BS("0","0") 420 call Put_Dig_BS("e","l") 421 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 422 set nodigraph ww&vim 423 bw! 424endfunc 425 426" vim: tabstop=2 shiftwidth=0 sts=-1 expandtab 427