Files
ai-agent-book/book-id/fit_svg_text.py
T
liqiang b119135836
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
2026-08-20 13:12:50 +00:00

48 lines
1.5 KiB
Python

"""Repair text overflow in generated/static book SVGs (in place).
Most figures under images/ are produced by the gen_chN_figs.py scripts (which
now self-correct via svg_lib.SVG.render), but several sets — fig0-*, fig6-*,
fig7-*, the multimodal fig9-*, and fig10-* — are static SVGs with no live
generator. This tool applies the same width model (svg_lib.fit_overflow) to any
SVG on disk, shrinking only the font-size of text runs that spill outside their
containing rectangle or the canvas. It is safe (positions are never moved) and
idempotent (re-running makes no further changes).
Usage:
python3 fit_svg_text.py # fix every images/*.svg
python3 fit_svg_text.py images/fig6-3.svg ... # fix specific files
"""
import glob
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from svg_lib import fit_overflow
IMG = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'images')
def process(path):
with open(path, encoding='utf-8') as f:
original = f.read()
fixed = fit_overflow(original)
if fixed != original:
with open(path, 'w', encoding='utf-8') as f:
f.write(fixed)
return True
return False
def main(argv):
targets = argv[1:] or sorted(glob.glob(os.path.join(IMG, '*.svg')))
changed = 0
for path in targets:
if process(path):
changed += 1
print(f' fitted {os.path.basename(path)}')
print(f'\nAdjusted {changed}/{len(targets)} SVG file(s).')
if __name__ == '__main__':
main(sys.argv)