utf8←{⎕IO ⎕ML←0 1 ⍝ UTF-8 ←→ ⎕AV translation.
utab←{ ⍝ 256-item encoding vector.
⍵<128:⍵ ⍝ 0000 .. 007f
⍵<2048:192 128+0 64⊤⍵ ⍝ 0080 .. 07ff
224 128 128+0 64 64⊤⍵ ⍝ 0800 .. ffff
}¨∘{ ⍝ Unicode codepoints / ⎕AV char.
16⊥'0123456789abcdef'⍳⍉⍵ ⍝ hex to decimal.
}∘{ ⍝
↑(1↓¨(' '=⍵)⊂⍵)~⊂'' ⍝ 256×4 char matrix.
}∘{
' 0000 0008 000a 000d 0020 000c e000 e001 ',⍵}∘{ ⍝ 00-07 ········
' 001b 0009 2336 026b 0025 0027 237a 2375 ',⍵}∘{ ⍝ 08-0f ··⌶ɫ%'⍺⍵
' 005f 0061 0062 0063 0064 0065 0066 0067 ',⍵}∘{ ⍝ 10-17 _abcdefg
' 0068 0069 006a 006b 006c 006d 006e 006f ',⍵}∘{ ⍝ 18-1f hijklmno
' 0070 0071 0072 0073 0074 0075 0076 0077 ',⍵}∘{ ⍝ 20-27 pqrstuvw
' 0078 0079 007a e002 e003 00af 002e 236c ',⍵}∘{ ⍝ 28-2f xyz¯.⍬
' 0030 0031 0032 0033 0034 0035 0036 0037 ',⍵}∘{ ⍝ 30-37 01234567
' 0038 0039 e004 00a4 00a5 0024 00a3 00a2 ',⍵}∘{ ⍝ 38-3f 89⊢¥$£¢
' 2206 0041 0042 0043 0044 0045 0046 0047 ',⍵}∘{ ⍝ 40-47 ∆ABCDEFG
' 0048 0049 004a 004b 004c 004d 004e 004f ',⍵}∘{ ⍝ 48-4f HIJKLMNO
' 0050 0051 0052 0053 0054 0055 0056 0057 ',⍵}∘{ ⍝ 50-57 PQRSTUVW
' 0058 0059 005a e005 e006 00fd 00b7 e007 ',⍵}∘{ ⍝ 58-5f XYZý·
' 2359 00c1 00c2 00c3 00c7 00c8 00ca 00cb ',⍵}∘{ ⍝ 60-67 ⍙ÁÂÃÇÈÊË
' 00cc 00cd 00ce 00cf 00d0 00d2 00d3 00d4 ',⍵}∘{ ⍝ 68-6f ÌÍÎÏÐÒÓÔ
' 00d5 00d9 00da 00db 00dd 00fe 00e3 00ec ',⍵}∘{ ⍝ 70-77 ÕÙÚÛÝþãì
' 00f0 00f2 00f5 007b 22a2 007d 22a3 2337 ',⍵}∘{ ⍝ 78-7f ðòõ{⊢}⊣⌷
' 00a8 00c0 00c4 00c5 00c6 2368 00c9 00d1 ',⍵}∘{ ⍝ 80-87 ¨ÀÄÅÆ⍨ÉÑ
' 00d6 00d8 00dc 00df 00e0 00e1 00e2 00e4 ',⍵}∘{ ⍝ 88-8f ÖØÜßàáâä
' 00e5 00e6 00e7 00e8 00e9 00ea 00eb 00ed ',⍵}∘{ ⍝ 90-97 åæçèéêëí
' 00ee 00ef 00f1 005b 002f 233f 005c 2340 ',⍵}∘{ ⍝ 98-9f îïñ[/⌿\⍀
' 003c 2264 003d 2265 003e 2260 2228 005e ',⍵}∘{ ⍝ a0-a7 <≤=≥>≠∨^
' 002d 002b 00f7 00d7 003f 220a 2374 007e ',⍵}∘{ ⍝ a8-af -+÷×?∊⍴~
' 2191 2193 2373 25cb 002a 2308 230a 2207 ',⍵}∘{ ⍝ b0-b7 ↑↓⍳○*⌈⌊∇
' 2218 0028 2282 2283 2229 222a 22a5 22a4 ',⍵}∘{ ⍝ b8-bf ∘(⊂⊃∩∪⊥⊤
' 007c 003b 002c 2371 2372 2352 234b 2349 ',⍵}∘{ ⍝ c0-c7 |;,⍱⍲⍒⍋⍉
' 233d 2296 235f 2339 0021 2355 234e 236b ',⍵}∘{ ⍝ c8-cf ⌽⊖⍟⌹!⍕⍎⍫
' 236a 2261 2262 00f3 00f4 00f6 00f8 0022 ',⍵}∘{ ⍝ d0-d7 ⍪≡≢óôöø"
' 0023 e008 0026 2019 2518 2510 250c 2514 ',⍵}∘{ ⍝ d8-df #&’┘┐┌└
' 253c 2500 251c 2524 2534 252c 2502 0040 ',⍵}∘{ ⍝ e0-e7 ┼─├┤┴┬│@
' 00f9 00fa 00fb 2227 00fc 2018 2223 00b6 ',⍵}∘{ ⍝ e8-ef ùúû∧ü‘∣¶
' 003a 2377 00bf 00a1 22c4 2190 2192 235d ',⍵}∘{ ⍝ f0-f7 :⍷¿¡⋄←→⍝
' 0029 005d e009 e00a 00a7 2395 235e 2363 ',⍵}∘{ ⍝ f8-ff )]§⎕⍞⍣
''}
⍺←utab'' ⍝ monadic, build table.
0=⍴⍺:utab'' ⍝ null ⍺: return table.
^/⍵∊⎕AV:∊⍺[⎕AV⍳⍵] ⍝ all ⍵ in ⎕AV: UTF-8.
3≠10|⎕DR ⍵:⎕SIGNAL 11 ⍝ not simple int: error.
seqs←¯1+↑257|1+⍺∘⍳¨1 2 3,/¨⊂⍵ ⍝ sequences per sequence length.
⎕AV[+⌿0⌈(∨⌿¯1≠seqs)/seqs] ⍝ ⍵ is UTF-8: ⎕AV.
}
test script
Back to: notes
Back to: Workspaces
Trouble seeing APL font?