equal
deleted
inserted
replaced
1 from i18n import _ |
1 from i18n import _ |
2 import re, error |
2 import re, error, os |
3 |
3 |
4 class sortdict(dict): |
4 class sortdict(dict): |
5 'a simple append-only sorted dictionary' |
5 'a simple append-only sorted dictionary' |
6 def __init__(self, data=None): |
6 def __init__(self, data=None): |
7 self._list = [] |
7 self._list = [] |
60 def read(self, path, fp=None): |
60 def read(self, path, fp=None): |
61 sectionre = re.compile(r'\[([^\[]+)\]') |
61 sectionre = re.compile(r'\[([^\[]+)\]') |
62 itemre = re.compile(r'([^=\s]+)\s*=\s*(.*)') |
62 itemre = re.compile(r'([^=\s]+)\s*=\s*(.*)') |
63 contre = re.compile(r'\s+(\S.*)') |
63 contre = re.compile(r'\s+(\S.*)') |
64 emptyre = re.compile(r'(;|#|\s*$)') |
64 emptyre = re.compile(r'(;|#|\s*$)') |
|
65 includere = re.compile(r'%include\s+(\S.*)') |
65 section = "" |
66 section = "" |
66 item = None |
67 item = None |
67 line = 0 |
68 line = 0 |
68 cont = 0 |
69 cont = 0 |
69 |
70 |
77 if m: |
78 if m: |
78 v = self.get(section, item) + "\n" + m.group(1) |
79 v = self.get(section, item) + "\n" + m.group(1) |
79 self.set(section, item, v, "%s:%d" % (path, line)) |
80 self.set(section, item, v, "%s:%d" % (path, line)) |
80 continue |
81 continue |
81 item = None |
82 item = None |
|
83 m = includere.match(l) |
|
84 if m: |
|
85 inc = m.group(1) |
|
86 base = os.path.dirname(path) |
|
87 inc = os.path.normpath(os.path.join(base, inc)) |
|
88 incfp = open(inc) |
|
89 self.read(inc, incfp) |
|
90 continue |
82 if emptyre.match(l): |
91 if emptyre.match(l): |
83 continue |
92 continue |
84 m = sectionre.match(l) |
93 m = sectionre.match(l) |
85 if m: |
94 if m: |
86 section = m.group(1) |
95 section = m.group(1) |