Call iconv -l
authorFrançois Pinard <pinard@iro.umontreal.ca>
Sun, 9 Mar 2008 19:10:13 +0000 (15:10 -0400)
committerFrançois Pinard <pinard@iro.umontreal.ca>
Sun, 9 Mar 2008 19:10:13 +0000 (15:10 -0400)
ChangeLog
tables.py

index fa26de416de8597ffa8f612dcb9111e0aeeba985..c97b6026dc46dd058e95edc5b70be91c67c1d425 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-09  François Pinard  <pinard@iro.umontreal.ca>
+
+       * tables.py (Iconv.__init__): Call iconv -l to get information.
+
 2008-03-08  François Pinard  <pinard@iro.umontreal.ca>
 
         * NEWS, README, THANKS, TODO, configure.ac, Makefile.am: Write
index 3a4569939bf027d2ba762991e562581e40ae8a19..5c42f211ca410024d00ddb6c6cbaea7574ae3a7d 100755 (executable)
--- a/tables.py
+++ b/tables.py
@@ -457,13 +457,23 @@ class Iconv(Options):
             canonical[charset.upper()] = charset
 
         # Read in the encodings.def file.
-        for line in file('/home/pinard/entretien/recode/admin/charset-list-libiconv'):
-            aliases = []
-            for alias in line.split():
-                if alias in canonical:
-                    alias = canonical[alias]
-                aliases.append(alias)
-            self.data.append((aliases[0], aliases[1:]))
+        #for line in file('/home/pinard/entretien/recode/admin/charset-list-libiconv'):
+        libc = None
+        import os
+        for line in os.popen('iconv -l'):
+            if libc is None:
+                libc = len(line.split('/')) == 3
+            if libc:
+                first, second, empty = line.split('/')
+                assert empty == '\n', repr(line)
+                self.data.append((second or first, ()))
+            else:
+                aliases = []
+                for alias in line.split():
+                    if alias in canonical:
+                        alias = canonical[alias]
+                    aliases.append(alias)
+                self.data.append((aliases[0], aliases[1:]))
 
     def complete(self, french):
         if not self.do_sources: