]> gitweb.factorcode.org Git - factor.git/blob - basis/io/encodings/iana/iana.factor
Fix permission bits
[factor.git] / basis / io / encodings / iana / iana.factor
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.8-bit
5 io.encodings.ascii io.encodings.utf8 io.encodings.utf16  ;
6 IN: io.encodings.iana
7
8 <PRIVATE
9 VALUE: n>e-table
10
11 : e>n-table H{
12     { ascii "US-ASCII" }
13     { utf8 "UTF-8" }
14     { utf16 "UTF-16" }
15     { utf16be "UTF-16BE" }
16     { utf16le "UTF-16LE" }
17     { latin1 "ISO-8859-1" }
18     { latin2 "ISO-8859-2" }
19     { latin3 "ISO-8859-3" }
20     { latin4 "ISO-8859-4" }
21     { latin/cyrillic "ISO-8859-5" }
22     { latin/arabic "ISO-8859-6" }
23     { latin/greek "ISO-8859-7" }
24     { latin/hebrew "ISO-8859-8" }
25     { latin5 "ISO-8859-9" }
26     { latin6 "ISO-8859-10" }
27 } ;
28 PRIVATE>
29
30 : name>encoding ( name -- encoding )
31     n>e-table at ;
32
33 : encoding>name ( encoding -- name )
34     e>n-table at ;
35
36 <PRIVATE
37 : parse-iana ( stream -- synonym-set )
38     lines { "" } split [
39         [ " " split ] map
40         [ first { "Name:" "Alias:" } member? ] filter
41         [ second ] map { "None" } diff
42     ] map ;
43
44 : more-aliases ( -- assoc )
45     H{
46         { "UTF8" utf8 }
47         { "utf8" utf8 }
48         { "utf-8" utf8 }
49     } ;
50
51 : make-n>e ( stream -- n>e )
52     parse-iana [ [
53         dup [
54             e>n-table value-at
55             [ swap [ set ] with each ]
56             [ drop ] if*
57         ] with each
58     ] each ] H{ } make-assoc more-aliases assoc-union ;
59 PRIVATE>
60
61 "resource:basis/io/encodings/iana/character-sets"
62 ascii <file-reader> make-n>e to: n>e-table