allwinner_a64/android/external/tpm2/parsep4
2018-08-08 16:14:42 +08:00

78 lines
2.2 KiB
Python
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()