Rev 1154 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1154 | lvd | 1 | #!/usr/bin/env python |
2 | |||
3 | #import argparse,glob,os,subprocess,re,sys,pathlib,pickle,socket |
||
1155 | lvd | 4 | import os,re,sys |
1154 | lvd | 5 | |
1155 | lvd | 6 | startnum_re = re.compile(r'^[ \t]*///[ \t]*<<<[ /t]*NedoPC_RENUMBER_STARTNUM[ \t]+(\d+)[ \t]*>>>[ \t]*$') |
7 | step_re = re.compile(r'^[ \t]*///[ \t]*<<<[ /t]*NedoPC_RENUMBER_STEP[ \t]+(\d+)[ \t]*>>>[ \t]*$') |
||
1154 | lvd | 8 | begin_re = re.compile(r'^[ \t]*///[ \t]*<<<[ /t]*NedoPC_RENUMBER_BEGIN[ \t]*>>>[ \t]*$') |
9 | end_re = re.compile(r'^[ \t]*///[ \t]*<<<[ /t]*NedoPC_RENUMBER_END[ \t]*>>>[ \t]*$') |
||
1155 | lvd | 10 | define_re = re.compile(r'^[ \t]*#define[ \t]+([_A-Za-z][_A-Za-z0-9]*)[ \t]+(\d+)(.*)$') |
1154 | lvd | 11 | |
12 | |||
13 | |||
14 | def regenerate(startnum, step, ilines): |
||
15 | |||
16 | # collect width info for numbers and names |
||
17 | max_name_width = 1 |
||
18 | |||
19 | num_defines = 0 |
||
20 | |||
21 | for t in ilines: |
||
22 | |||
23 | if len(t)==3: |
||
24 | |||
25 | num_defines += 1 |
||
26 | |||
27 | _, name, _ = t |
||
28 | |||
29 | max_name_width = max(max_name_width, len(name)) |
||
30 | |||
31 | max_num = startnum + step * (num_defines-1) |
||
32 | |||
33 | max_number_width = len(str(max_num)) |
||
34 | |||
35 | |||
36 | # regenerate lines of text with new numbering |
||
37 | |||
38 | new_lines = [] |
||
39 | current_number = startnum |
||
40 | |||
41 | for t in ilines: |
||
42 | if len(t)==2: |
||
43 | _, line = t |
||
44 | new_lines += [line] # \n is already included in the line |
||
45 | elif len(t)==3: |
||
46 | _, name, end = t |
||
47 | |||
48 | spaces_to_append = 1 + max_name_width - len(name) |
||
49 | |||
50 | str_number = str(current_number) |
||
51 | |||
52 | spaces_to_append += max_number_width - len(str_number) |
||
53 | |||
54 | new_line = '#define ' + name + ' '*spaces_to_append + str_number + end + '\n' |
||
55 | |||
56 | new_lines += [new_line] |
||
57 | else: |
||
58 | sys.stderr.write('Wrong tuple length!') |
||
59 | sys.exit(1) |
||
60 | |||
61 | current_number += step |
||
62 | |||
63 | return new_lines |
||
64 | |||
65 | |||
66 | |||
67 | def main(): |
||
68 | |||
69 | filename = 'resource.h' |
||
70 | |||
71 | with open(filename,'r+') as f: |
||
72 | all_lines = f.readlines() |
||
73 | |||
74 | |||
75 | |||
76 | before_lines = [] |
||
77 | after_lines = [] |
||
78 | |||
79 | regen_lines = [] |
||
80 | |||
81 | |||
82 | STATE_BEFORE = 1 |
||
83 | STATE_INSIDE = 2 |
||
84 | STATE_AFTER = 3 |
||
85 | state = STATE_BEFORE |
||
86 | |||
87 | startnum = None |
||
88 | step = None |
||
89 | |||
90 | |||
91 | for l in all_lines: |
||
92 | |||
93 | if state == STATE_BEFORE: |
||
94 | before_lines += [l] |
||
95 | |||
96 | startnum_match = startnum_re.match(l) |
||
97 | if startnum_match: |
||
98 | if startnum is None: |
||
99 | startnum = int(startnum_match.group(1)) |
||
100 | else: |
||
101 | sys.stderr.write('NedoPC_RENUMBER_STARTNUM is encountered multiple times!\n') |
||
102 | sys.exit(1) |
||
103 | |||
104 | step_match = step_re.match(l) |
||
105 | if step_match: |
||
106 | if step is None: |
||
107 | step = int(step_match.group(1)) |
||
108 | else: |
||
109 | sys.stderr.write('NedoPC_RENUMBER_STEP is encountered multiple times!\n') |
||
110 | sys.exit(1) |
||
111 | |||
112 | if begin_re.match(l): |
||
113 | state = STATE_INSIDE |
||
114 | continue |
||
115 | |||
116 | elif state == STATE_INSIDE: |
||
117 | |||
118 | if end_re.match(l): |
||
119 | after_lines += [l] |
||
120 | state = STATE_AFTER |
||
121 | continue |
||
122 | |||
123 | define_match = define_re.match(l) |
||
124 | if define_match: |
||
125 | name = define_match.group(1) |
||
126 | comment = define_match.group(3) |
||
127 | regen_lines += [(True,name,comment)] |
||
128 | else: |
||
129 | regen_lines += [(False,l)] |
||
130 | |||
131 | |||
132 | elif state == STATE_AFTER: |
||
133 | after_lines += [l] |
||
134 | |||
135 | |||
136 | |||
137 | if state != STATE_AFTER or startnum is None or step is None: |
||
1155 | lvd | 138 | sys.stderr.write('Wrong structure, some of NedoPC_* statements are not present') |
1154 | lvd | 139 | sys.exit(1) |
140 | |||
141 | |||
142 | #print(before_lines) |
||
143 | #print(regen_lines) |
||
144 | #print(after_lines) |
||
145 | |||
146 | new_lines = regenerate(startnum,step,regen_lines) |
||
147 | |||
148 | #print(new_lines) |
||
149 | |||
150 | #with open('TEZD','w') as g: |
||
151 | # g.writelines(before_lines + new_lines + after_lines) |
||
152 | |||
153 | f.seek(0) |
||
154 | |||
155 | f.writelines(before_lines + new_lines + after_lines) |
||
156 | |||
157 | f.truncate() |
||
158 | |||
159 | |||
160 | |||
161 | if __name__=="__main__": |
||
162 | main() |