diff --git a/build_bundle.py b/build_bundle.py new file mode 100644 index 0000000..7323517 --- /dev/null +++ b/build_bundle.py @@ -0,0 +1,91 @@ +""" +Пересобирает results/source-bundle.md и results/source-toc.md +из очищенных исходников v1/ (без taffy и без backup-каталогов). + +Запуск: + python3 build_bundle.py + +Что делает: + 1. Обходит v1/ рекурсивно, собирает все .cfc и .cfm файлы + (исключая taffy/ и bk/) + 2. Формирует results/source-bundle.md — один большой MD, + каждый файл как раздел ## filepath + код в блоке ```cfml + 3. Формирует results/source-toc.md — оглавление с номерами строк + в bundle (не страниц) + +Настройки: + ROOT — корневая директория исходников + SKIP — папки, которые исключаются из обхода + OUT_DIR — куда писать результирующие файлы +""" +import os +import re +from datetime import date + +ROOT = 'v1' +SKIP = ['taffy', 'bk'] +OUT_DIR = 'results' +BUILD_DATE = date.today().isoformat() + + +def collect_files(root, skip): + files = [] + for dirpath, dirnames, filenames in os.walk(root): + dirnames[:] = sorted([d for d in dirnames if d not in skip]) + for fname in sorted(filenames): + if fname.endswith('.cfc') or fname.endswith('.cfm'): + files.append(os.path.join(dirpath, fname)) + return files + + +def build_bundle(files): + lines = [] + lines.append(f'# Исходники svc-api-x\n') + lines.append(f'Дата сборки: {BUILD_DATE}\n') + lines.append('Прикладной слой после cleanup: v1/ без taffy и без backup-каталогов.\n') + + for fpath in files: + with open(fpath, encoding='utf-8', errors='ignore') as f: + code = f.read().rstrip('\n') + lines.append(f'\n## {fpath}\n') + lines.append(f'\n```cfml\n{code}\n```\n') + + return '\n'.join(lines) + + +def build_toc(bundle_content): + bundle_lines = bundle_content.split('\n') + toc_entries = [] + for i, line in enumerate(bundle_lines, 1): + m = re.match(r'^## (.+)$', line) + if m: + toc_entries.append((m.group(1).strip(), i)) + + out = [] + out.append(f'# Оглавление исходников svc-api-x\n') + out.append(f'Дата сборки: {BUILD_DATE}\n') + out.append('\n## Прикладной слой\n') + out.append('```text') + for rel, lineno in toc_entries: + dots = '.' * max(1, 55 - len(rel) - len(str(lineno))) + out.append(f'{rel} {dots} {lineno}') + out.append('```') + return '\n'.join(out) + '\n' + + +if __name__ == '__main__': + files = collect_files(ROOT, SKIP) + + bundle = build_bundle(files) + bundle_path = os.path.join(OUT_DIR, 'source-bundle.md') + with open(bundle_path, 'w', encoding='utf-8') as f: + f.write(bundle) + + toc = build_toc(bundle) + toc_path = os.path.join(OUT_DIR, 'source-toc.md') + with open(toc_path, 'w', encoding='utf-8') as f: + f.write(toc) + + print(f'Файлов в bundle: {len(files)}') + print(f'{bundle_path} — готово') + print(f'{toc_path} — готово')