Type B'' 추가: 참고 이미지 스타일 (색상바+여백, border 없음)

- block_assembler_b2.py: B'' 전용 조립 함수 (별도 파일)
- 상단: 색상 바 제목 + 소제목(accent 색상) + 불릿(들여쓰기)
- 하단: 색상 바 제목 + 표(있으면) + 불릿
- border/gradient 박스 없음, 여백과 폰트로 구분
- 이제부터 스타일 세부 조정은 하나씩 반영 예정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 11:51:10 +09:00
parent 3d1194a562
commit 076aeb0403
5 changed files with 285 additions and 5 deletions

View File

@@ -332,7 +332,7 @@ async def generate_slide(
)
# Phase X-B: 유형에 따라 컨테이너 생성 분기
if context.analysis.layout_template in ("B", "B'"):
if context.analysis.layout_template in ("B", "B'", "B''"):
from src.space_allocator import build_containers_type_b
container_specs = build_containers_type_b(
page_structure=context.page_structure.roles,
@@ -589,7 +589,7 @@ async def generate_slide(
fit_analysis = redistribute(fit_analysis, containers_dict)
# Type B: Selenium 실측 기반 zone 간 재배분
if context.analysis.layout_template in ("B", "B'"):
if context.analysis.layout_template in ("B", "B'", "B''"):
# Selenium 측정에서 실제 overflow/여유를 가져옴
zone_to_roles = {}
for role, ci in updated_containers.items():
@@ -854,7 +854,7 @@ async def generate_slide(
# X'-6: 본문 표 요약 (유형 B — normalized.tables가 있으면)
table_summaries = {}
norm_tables = context.normalized.tables or []
if norm_tables and context.analysis.layout_template in ("B", "B'"):
if norm_tables and context.analysis.layout_template in ("B", "B'", "B''"):
from src.kei_client import call_kei_summarize_popup
for ti, table_data in enumerate(norm_tables):
headers = table_data.get("headers", [])
@@ -971,7 +971,7 @@ async def generate_slide(
async def stage_2(context: PipelineContext) -> dict:
# Phase X-BX': Type B는 code_assembled 직접 사용, Sonnet 재구성 스킵
if context.analysis.layout_template in ("B", "B'"):
if context.analysis.layout_template in ("B", "B'", "B''"):
from src.block_assembler import assemble_slide_html
generated = assemble_slide_html(context)
logger.info("[Stage 2] Type B: code_assembled 직접 사용 (Sonnet 스킵)")
@@ -1040,7 +1040,7 @@ async def generate_slide(
async def stage_3(context: PipelineContext) -> dict:
# Phase X-BX': Type B는 Stage 2에서 이미 완전한 HTML → renderer 스킵
if context.analysis.layout_template in ("B", "B'"):
if context.analysis.layout_template in ("B", "B'", "B''"):
logger.info("[Stage 3] Type B: renderer 스킵 (generated_html 직접 사용)")
return {"rendered_html": context.generated_html}