eric6/ThirdParty/EditorConfig/editorconfig/ini.py

Thu, 14 Jan 2021 18:01:59 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 14 Jan 2021 18:01:59 +0100
changeset 7981
89e8d8d8a9b5
parent 6996
7d5a103bdb76
permissions
-rw-r--r--

Third Party packages
- updated editorconfig to 0.12.3

6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 """EditorConfig file parser
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 Based on code from ConfigParser.py file distributed with Python 2.6.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4
6996
7d5a103bdb76 EditorConfig: updated to version 0.12.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
5 Licensed under PSF License (see LICENSE.PSF file).
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Changes to original ConfigParser:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 - Special characters can be used in section names
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 - Octothorpe can be used for comments (not just at beginning of line)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 - Only track INI options in sections that match target filename
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 - Stop parsing files with when ``root = true`` is found
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 """
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
6161
91456f5321b5 Updated editorconfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6099
diff changeset
16 import posixpath
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 import re
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from codecs import open
6161
91456f5321b5 Updated editorconfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6099
diff changeset
19 from collections import OrderedDict
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from os import sep
6161
91456f5321b5 Updated editorconfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6099
diff changeset
21 from os.path import dirname, normpath
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
6161
91456f5321b5 Updated editorconfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6099
diff changeset
23 from editorconfig.compat import u
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from editorconfig.exceptions import ParsingError
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from editorconfig.fnmatch import fnmatch
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 __all__ = ["ParsingError", "EditorConfigParser"]
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
7981
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
30 MAX_SECTION_LENGTH = 4096
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
31 MAX_PROPERTY_LENGTH= 50
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
32 MAX_VALUE_LENGTH = 255
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
33
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 class EditorConfigParser(object):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """Parser for EditorConfig-style configuration files
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Based on RawConfigParser from ConfigParser.py in Python 2.6.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 # Regular expressions for parsing section headers and options.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 # Allow ``]`` and escaped ``;`` and ``#`` characters in section headers
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 SECTCRE = re.compile(
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 r"""
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 \s * # Optional whitespace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 \[ # Opening square brace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 (?P<header> # One or more characters excluding
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 ( [^\#;] | \\\# | \\; ) + # unescaped # and ; characters
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 \] # Closing square brace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """, re.VERBOSE
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 # Regular expression for parsing option name/values.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 # Allow any amount of whitespaces, followed by separator
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 # (either ``:`` or ``=``), followed by any amount of whitespace and then
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 # any characters to eol
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 OPTCRE = re.compile(
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 r"""
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 \s * # Optional whitespace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 (?P<option> # One or more characters excluding
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 [^:=\s] # : a = characters (and first
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 [^:=] * # must not be whitespace)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 \s * # Optional whitespace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 (?P<vi>
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 [:=] # Single = or : character
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 \s * # Optional whitespace
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 (?P<value>
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 . * # One or more characters
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 $
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 """, re.VERBOSE
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 )
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 def __init__(self, filename):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.filename = filename
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.options = OrderedDict()
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.root_file = False
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 def matches_filename(self, config_filename, glob):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """Return True if section glob matches filename"""
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 config_dirname = normpath(dirname(config_filename)).replace(sep, '/')
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 glob = glob.replace("\\#", "#")
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 glob = glob.replace("\\;", ";")
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 if '/' in glob:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 if glob.find('/') == 0:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 glob = glob[1:]
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 glob = posixpath.join(config_dirname, glob)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 else:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 glob = posixpath.join('**/', glob)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 return fnmatch(self.filename, glob)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def read(self, filename):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """Read and parse single EditorConfig file"""
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 try:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 fp = open(filename, encoding='utf-8')
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 except IOError:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 return
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 self._read(fp, filename)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 fp.close()
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def _read(self, fp, fpname):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """Parse a sectioned setup file.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 The sections in setup file contains a title line at the top,
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 indicated by a name in square brackets (`[]'), plus key/value
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 options lines, indicated by `name: value' format lines.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Continuations are represented by an embedded newline then
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 leading whitespace. Blank lines, lines beginning with a '#',
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 and just about everything else are ignored.
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 """
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 in_section = False
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 matching_section = False
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 optname = None
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 lineno = 0
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 e = None # None, or an exception
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 while True:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 line = fp.readline()
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 if not line:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 break
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if lineno == 0 and line.startswith(u('\ufeff')):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 line = line[1:] # Strip UTF-8 BOM
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 lineno = lineno + 1
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 # comment or blank line?
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if line.strip() == '' or line[0] in '#;':
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 continue
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 # a section header or option header?
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 else:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 # is it a section header?
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 mo = self.SECTCRE.match(line)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if mo:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 sectname = mo.group('header')
7981
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
141 if len(sectname) > MAX_SECTION_LENGTH:
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
142 continue
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 in_section = True
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 matching_section = self.matches_filename(fpname, sectname)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 # So sections can't start with a continuation line
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 optname = None
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 # an option line?
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 else:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 mo = self.OPTCRE.match(line)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if mo:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 optname, vi, optval = mo.group('option', 'vi', 'value')
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 if ';' in optval or '#' in optval:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 # ';' and '#' are comment delimiters only if
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 # preceeded by a spacing character
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 m = re.search('(.*?) [;#]', optval)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 if m:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 optval = m.group(1)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 optval = optval.strip()
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 # allow empty values
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 if optval == '""':
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 optval = ''
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 optname = self.optionxform(optname.rstrip())
7981
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
163 if (len(optname) > MAX_PROPERTY_LENGTH or
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
164 len(optval) > MAX_VALUE_LENGTH):
89e8d8d8a9b5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6996
diff changeset
165 continue
6099
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 if not in_section and optname == 'root':
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.root_file = (optval.lower() == 'true')
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 if matching_section:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.options[optname] = optval
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 else:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 # a non-fatal parsing error occurred. set up the
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 # exception but keep going. the exception will be
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 # raised at the end of the file and will contain a
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 # list of all bogus lines
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 if not e:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 e = ParsingError(fpname)
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 e.append(lineno, repr(line))
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 # if any parsing errors occurred, raise an exception
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 if e:
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 raise e
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 def optionxform(self, optionstr):
a7fecbc392d7 Started implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 return optionstr.lower()

eric ide

mercurial