92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
"""
|
|
Пересобирает 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} — готово')
|