diff options
| author | Fred Drake <fdrake@acm.org> | 2000-02-28 20:59:03 +0000 |
|---|---|---|
| committer | Fred Drake <fdrake@acm.org> | 2000-02-28 20:59:03 +0000 |
| commit | b0c4485136b08b51e99be244f297de322b617611 (patch) | |
| tree | 8def9694084996bc673e67eefd38f018dbbd0a6d | |
| parent | 194e01f951e08c41b7a164bfa3f02f51f1656d19 (diff) | |
| download | cpython-b0c4485136b08b51e99be244f297de322b617611.tar.gz | |
(Finally!) Changes related to the ConfigParser/INI-file topics
discussed on c.l.py last January. Specifically:
- more characters allowed in section & option names
- if '=' is used to separate the option & value, the value can be
followed by a comment of the form '\s;'
| -rw-r--r-- | Lib/ConfigParser.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index f0611f6879..e871cc5478 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -292,12 +292,12 @@ class ConfigParser: # of \w, _ is allowed in section header names. SECTCRE = re.compile( r'\[' # [ - r'(?P<header>[-\w]+)' # `-', `_' or any alphanum + r'(?P<header>[-\w_.*,(){}]+)' # `-', `_' or any alphanum r'\]' # ] ) OPTCRE = re.compile( - r'(?P<option>[-.\w]+)' # - . _ alphanum - r'[ \t]*[:=][ \t]*' # any number of space/tab, + r'(?P<option>[-\w_.*,(){}]+)' # - . _ alphanum + r'[ \t]*(?P<vi>[:=])[ \t]*' # any number of space/tab, # followed by separator # (either : or =), followed # by any # space/tab @@ -327,7 +327,7 @@ class ConfigParser: if string.strip(line) == '' or line[0] in '#;': continue if string.lower(string.split(line)[0]) == 'rem' \ - and line[0] == "r": # no leading whitespace + and line[0] in "rR": # no leading whitespace continue # continuation line? if line[0] in ' \t' and cursect is not None and optname: @@ -356,8 +356,14 @@ class ConfigParser: else: mo = self.OPTCRE.match(line) if mo: - optname, optval = mo.group('option', 'value') + optname, vi, optval = mo.group('option', 'vi', 'value') optname = string.lower(optname) + if vi == '=' and ';' in optval: + # ';' is a comment delimiter only if it follows + # a spacing character + pos = string.find(optval, ';') + if pos and optval[pos-1] in string.whitespace: + optval = optval[:pos] optval = string.strip(optval) # allow empty values if optval == '""': |
