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() |