1 ! Copyright (C) 2008 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel strings io.files assocs
4 splitting sequences io namespaces sets
5 io.encodings.ascii io.encodings.utf8 io.encodings.utf16 ;
14 : name>encoding ( name -- encoding )
15 n>e-table get-global at ;
17 : encoding>name ( encoding -- name )
18 e>n-table get-global at ;
21 : parse-iana ( file -- synonym-set )
22 utf8 file-lines { "" } split [
24 [ first { "Name:" "Alias:" } member? ] filter
25 values { "None" } diff
28 : make-aliases ( file -- n>e )
29 parse-iana [ [ first ] [ ] bi ] H{ } map>assoc ;
31 : initial-n>e ( -- assoc )
39 : initial-e>n ( -- assoc )
40 H{ { utf8 "UTF-8" } } clone ;
44 "vocab:io/encodings/iana/character-sets"
45 make-aliases aliases set-global
47 n>e-table [ initial-n>e ] initialize
48 e>n-table [ initial-e>n ] initialize
50 : register-encoding ( descriptor name -- )
53 [ n>e-table get-global set-at ] with each
54 ] [ "Bad encoding registration" throw ] if*
55 ] [ swap e>n-table get-global set-at ] 2bi ;
57 ascii "ANSI_X3.4-1968" register-encoding
58 utf16be "UTF-16BE" register-encoding
59 utf16le "UTF-16LE" register-encoding
60 utf16 "UTF-16" register-encoding