]> granicus.if.org Git - python/commitdiff
(Finally!) Changes related to the ConfigParser/INI-file topics
authorFred Drake <fdrake@acm.org>
Mon, 28 Feb 2000 20:59:03 +0000 (20:59 +0000)
committerFred Drake <fdrake@acm.org>
Mon, 28 Feb 2000 20:59:03 +0000 (20:59 +0000)
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;'

Lib/ConfigParser.py

index f0611f687996abd7d9abc37d291e1d68a9503e1f..e871cc547877e8fb996ff937c9ea0684ab8c4c2a 100644 (file)
@@ -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 == '""':