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