| """Provides access to configuration information""" | 
 |  | 
 | import os | 
 | import sys | 
 | from ConfigParser import ConfigParser, NoOptionError, NoSectionError | 
 |  | 
 | class IdleConfParser(ConfigParser): | 
 |  | 
 |     # these conf sections do not define extensions! | 
 |     builtin_sections = {} | 
 |     for section in ('EditorWindow', 'Colors'): | 
 |         builtin_sections[section] = section | 
 |  | 
 |     def getcolor(self, sec, name): | 
 |         """Return a dictionary with foreground and background colors | 
 |  | 
 |         The return value is appropriate for passing to Tkinter in, e.g., | 
 |         a tag_config call. | 
 |         """ | 
 |         fore = self.getdef(sec, name + "-foreground") | 
 |         back = self.getdef(sec, name + "-background") | 
 |         return {"foreground": fore, | 
 |                 "background": back} | 
 |  | 
 |     def getdef(self, sec, options, raw=0, vars=None, default=None): | 
 |         """Get an option value for given section or return default""" | 
 |         try: | 
 |             return self.get(sec, options, raw, vars) | 
 |         except (NoSectionError, NoOptionError): | 
 |             return default | 
 |  | 
 |     def getsection(self, section): | 
 |         """Return a SectionConfigParser object""" | 
 |         return SectionConfigParser(section, self) | 
 |  | 
 |     def getextensions(self): | 
 |         exts = [] | 
 |         for sec in self.sections(): | 
 |             if self.builtin_sections.has_key(sec): | 
 |                 continue | 
 |             # enable is a bool, but it may not be defined | 
 |             if self.getdef(sec, 'enable') != '0': | 
 |                 exts.append(sec) | 
 |         return exts | 
 |  | 
 |     def reload(self): | 
 |         global idleconf | 
 |         idleconf = IdleConfParser() | 
 |         load(_dir) # _dir is a global holding the last directory loaded | 
 |  | 
 | class SectionConfigParser: | 
 |     """A ConfigParser object specialized for one section | 
 |  | 
 |     This class has all the get methods that a regular ConfigParser does, | 
 |     but without requiring a section argument. | 
 |     """ | 
 |     def __init__(self, section, config): | 
 |         self.section = section | 
 |         self.config = config | 
 |  | 
 |     def options(self): | 
 |         return self.config.options(self.section) | 
 |  | 
 |     def get(self, options, raw=0, vars=None): | 
 |         return self.config.get(self.section, options, raw, vars) | 
 |  | 
 |     def getdef(self, options, raw=0, vars=None, default=None): | 
 |         return self.config.getdef(self.section, options, raw, vars, default) | 
 |  | 
 |     def getint(self, option): | 
 |         return self.config.getint(self.section, option) | 
 |  | 
 |     def getfloat(self, option): | 
 |         return self.config.getint(self.section, option) | 
 |  | 
 |     def getboolean(self, option): | 
 |         return self.config.getint(self.section, option) | 
 |  | 
 |     def getcolor(self, option): | 
 |         return self.config.getcolor(self.section, option) | 
 |  | 
 | def load(dir): | 
 |     """Load IDLE configuration files based on IDLE install in dir | 
 |  | 
 |     Attempts to load two config files: | 
 |     dir/config.txt | 
 |     dir/config-[win/mac/unix].txt | 
 |     dir/config-%(sys.platform)s.txt | 
 |     ~/.idle | 
 |     """ | 
 |     global _dir | 
 |     _dir = dir | 
 |  | 
 |     if sys.platform[:3] == 'win': | 
 |         genplatfile = os.path.join(dir, "config-win.txt") | 
 |     # XXX don't know what the platform string is on a Mac | 
 |     elif sys.platform[:3] == 'mac': | 
 |         genplatfile = os.path.join(dir, "config-mac.txt") | 
 |     else: | 
 |         genplatfile = os.path.join(dir, "config-unix.txt") | 
 |  | 
 |     platfile = os.path.join(dir, "config-%s.txt" % sys.platform) | 
 |  | 
 |     try: | 
 |         homedir = os.environ['HOME'] | 
 |     except KeyError: | 
 |         homedir = os.getcwd() | 
 |  | 
 |     idleconf.read((os.path.join(dir, "config.txt"), genplatfile, platfile, | 
 |                    os.path.join(homedir, ".idle"))) | 
 |  | 
 | idleconf = IdleConfParser() | 
 | load(os.path.dirname(__file__)) |