78 lines
2.2 KiB
Python
Executable file
78 lines
2.2 KiB
Python
Executable file
#!/usr/bin/python
|
||
|
||
import sys
|
||
import re
|
||
|
||
header = '''// This file was extracted from the TCG Published
|
||
// Trusted Platform Module Library
|
||
// Part 4: Supporting Routines
|
||
// Family "2.0"
|
||
// Level 00 Revision 01.16
|
||
// October 30, 2014
|
||
|
||
'''
|
||
|
||
head_spaces = re.compile('^\s*[0-9]+\s{0,4}')
|
||
sec_num_in_comments = re.compile('^//\s+([A-D0-9]\.([0-9]\.?)+)')
|
||
source_lines = open(sys.argv[1], 'r').read().splitlines()
|
||
|
||
def postprocess_lines(buffer):
|
||
# get rid of heading line numbers and spaces.
|
||
postproc_buffer = []
|
||
for big_line in buffer:
|
||
big_line = head_spaces.sub('', big_line)
|
||
for line in big_line.splitlines():
|
||
m = sec_num_in_comments.match(line)
|
||
if m:
|
||
line = line.replace(m.groups()[0], '')
|
||
postproc_buffer.append(line)
|
||
|
||
return header + '\n'.join(postproc_buffer) + '\n'
|
||
|
||
text = []
|
||
for line in source_lines:
|
||
text.append(line)
|
||
if line == '' and text[-2].startswith('') and text[-5] == '':
|
||
text = text[:-5]
|
||
|
||
func_file = None
|
||
file_name = ''
|
||
prev_num = 0
|
||
line_buffer = []
|
||
output_buffer = []
|
||
for line in text:
|
||
f = re.match('^\s*[A-D0-9]+\.([0-9]+|([0-9]+\.)+)\s+(\S+\.[ch])$', line)
|
||
if not f:
|
||
f = re.match('^\s*[A-D0-9]+\.([0-9]+|([0-9]+\.)+)\s+[^\(]+\((\S+\.[ch])\)$', line)
|
||
if f:
|
||
file_name = f.groups(0)[2]
|
||
continue
|
||
|
||
num = re.match('^\s{0,3}([0-9]+)\s', line + ' ')
|
||
if num:
|
||
line_num = int(num.groups(0)[0])
|
||
if line_num == 1:
|
||
# this is the first line of a file
|
||
if func_file:
|
||
func_file.write(postprocess_lines(output_buffer))
|
||
func_file.close()
|
||
if file_name:
|
||
func_file = open('%s' % file_name, 'w')
|
||
output_buffer = [line,]
|
||
prev_num = 1
|
||
line_buffer = []
|
||
continue
|
||
if line_num == prev_num + 1:
|
||
if line_buffer:
|
||
output_buffer.append('\n'.join(line_buffer))
|
||
line_buffer = []
|
||
output_buffer.append(line)
|
||
prev_num = line_num
|
||
continue
|
||
if not '//' in line:
|
||
line = '//' + line
|
||
line_buffer.append(line)
|
||
|
||
if func_file:
|
||
func_file.write(postprocess_lines(output_buffer))
|
||
func_file.close()
|