8
8
9
9
10
10
logger = logging .getLogger (__name__ )
11
+ COMMENT_PREFIX = '__comment'
11
12
12
13
13
14
class Parser :
14
15
"""SAX-style parser for the configuration of corosync"""
15
16
16
- _SPLIT_RE = re .compile ('\\ s*({|:|})\\ s*' )
17
+ _SPLIT_RE = re .compile ('\\ s*(#| {|:|})\\ s*' )
17
18
18
19
def __init__ (self , ifile ):
19
20
"""Parse data form a file-like object."""
@@ -34,14 +35,15 @@ def _parse(self, ifile):
34
35
line = line .strip ()
35
36
if not line :
36
37
continue
37
- if line [0 ] == '#' :
38
- continue
39
38
try :
40
39
tokens = self ._tokenize (line )
41
40
except ValueError as e :
42
41
raise MalformedLineException (lineno , line )
43
42
logger .debug ('tokens: %s' , tokens )
44
- if tokens [1 ] == '{' :
43
+ if tokens [1 ] == '#' :
44
+ fake_secion_name = f'{ COMMENT_PREFIX } _{ lineno } '
45
+ self .on_key_value (fake_secion_name , tokens [2 ])
46
+ elif tokens [1 ] == '{' :
45
47
if not tokens [0 ] or tokens [2 ]:
46
48
raise MalformedLineException (lineno , line )
47
49
self .__section_stack .append (tokens [0 ])
@@ -237,11 +239,14 @@ def on_dict(self, node):
237
239
self .on_list (value )
238
240
del self ._path_stack [- 1 ]
239
241
case _:
240
- self .__write_indent (len (self ._path_stack ))
241
- self ._ofile .write (key )
242
- self ._ofile .write (': ' )
243
- self .on_value (value )
244
- self ._ofile .write ('\n ' )
242
+ if key .startswith (COMMENT_PREFIX ):
243
+ self ._ofile .write (f'# { value } \n ' )
244
+ else :
245
+ self .__write_indent (len (self ._path_stack ))
246
+ self ._ofile .write (key )
247
+ self ._ofile .write (': ' )
248
+ self .on_value (value )
249
+ self ._ofile .write ('\n ' )
245
250
246
251
def on_list (self , node ):
247
252
key = self ._path_stack [- 1 ]
0 commit comments