1 ! Copyright (C) 2008 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel strings values io.files assocs
4 splitting sequences io namespaces sets io.encodings.utf8 ;
13 ERROR: missing-encoding name ;
15 : name>encoding ( name -- encoding )
16 dup n>e-table get-global at [ ] [ missing-encoding ] ?if ;
18 ERROR: missing-name encoding ;
20 : encoding>name ( encoding -- name )
21 dup e>n-table get-global at [ ] [ missing-name ] ?if ;
24 : parse-iana ( file -- synonym-set )
25 utf8 file-lines { "" } split [
27 [ first { "Name:" "Alias:" } member? ] filter
28 [ second ] map { "None" } diff
31 : make-aliases ( file -- n>e )
32 parse-iana [ [ first ] [ ] bi ] H{ } map>assoc ;
34 : initial-n>e ( -- assoc )
42 : initial-e>n ( -- assoc )
43 H{ { utf8 "UTF-8" } } clone ;
47 "vocab:io/encodings/iana/character-sets"
48 make-aliases aliases set-global
50 n>e-table [ initial-n>e ] initialize
51 e>n-table [ initial-e>n ] initialize
53 : register-encoding ( descriptor name -- )
56 [ n>e-table get-global set-at ] with each
57 ] [ "Bad encoding registration" throw ] if*
58 ] [ swap e>n-table get-global set-at ] 2bi ;