| #!/usr/bin/env python3 | |
| """Generate line-wrapped default text headers from paragraph files.""" | |
| import sys, os | |
| SRCDIR = os.path.dirname(os.path.abspath(__file__)) | |
| PERFDIR = os.path.join(SRCDIR, '..', '..', 'perf', 'texts') | |
| texts = [ | |
| ('en-paragraph.txt', 'default_text_en', 150), | |
| ('fa-paragraph.txt', 'default_text_fa', 165), | |
| ] | |
| def wrap_at_width(text, width): | |
| """Word-wrap a paragraph at approximately `width` characters.""" | |
| lines = [] | |
| for para in text.split('\n'): | |
| words = para.split(' ') | |
| line = '' | |
| for word in words: | |
| if line and len(line) + 1 + len(word) > width: | |
| lines.append(line) | |
| line = word | |
| else: | |
| line = line + ' ' + word if line else word | |
| if line: | |
| lines.append(line) | |
| return '\n'.join(lines) | |
| def stringize(varname, text): | |
| """Convert text to a C string literal.""" | |
| lines = text.split('\n') | |
| parts = ['static const char *{} =\n'.format(varname)] | |
| for line in lines: | |
| line = line.replace('\\', '\\\\').replace('"', '\\"') | |
| parts.append('"{}\\n"\n'.format(line)) | |
| parts.append(';\n') | |
| return ''.join(parts) | |
| MAX_TOTAL_LINES = 60 | |
| all_wrapped = [] | |
| for filename, varname, width in texts: | |
| path = os.path.join(PERFDIR, filename) | |
| with open(path, 'r') as f: | |
| text = f.read().strip() | |
| wrapped = wrap_at_width(text, width) | |
| all_wrapped.append((varname, wrapped)) | |
| hh = stringize(varname, wrapped) | |
| outpath = os.path.join(SRCDIR, varname.replace('default_text_', 'default-text-') + '.hh') | |
| with open(outpath, 'w') as f: | |
| f.write(hh) | |
| print('Generated: {}'.format(outpath)) | |
| # Generate combined text cropped to MAX_TOTAL_LINES / num_texts per text. | |
| lines_per = MAX_TOTAL_LINES // len(all_wrapped) | |
| combined_lines = [] | |
| for varname, wrapped in all_wrapped: | |
| lines = wrapped.split('\n')[:lines_per] | |
| combined_lines.extend(lines) | |
| combined = '\n'.join(combined_lines) | |
| hh = stringize('default_text_combined', combined) | |
| outpath = os.path.join(SRCDIR, 'default-text-combined.hh') | |
| with open(outpath, 'w') as f: | |
| f.write(hh) | |
| print('Generated: {}'.format(outpath)) |