#!/usr/bin/env python3 """ Tab2内容生成器 - L3单元解构 包含:单元列表,每个单元包含单元编号、时间范围、单元核心概括、完整文案、实质 """ import html as html_module from typing import Dict, Any, List def render_unit_card(unit: Dict[str, Any], idx: int) -> str: """渲染单元卡片""" unit_num = unit.get("单元编号", idx) time_range = unit.get("时间范围", "") core_summary = unit.get("单元核心概括", "") full_text = unit.get("完整文案", "") substance = unit.get("实质", {}) card_id = f'unit-{unit_num}' html = f'
\n' html += f'
\n' html += f'单元 #{unit_num}\n' if time_range: html += f'{html_module.escape(time_range)}\n' if core_summary: html += f'{html_module.escape(core_summary)}\n' html += '\n' html += '
\n' html += f'
\n' # 完整文案 if full_text: html += '
\n' html += '完整文案:\n' html += f'
{html_module.escape(full_text)}
\n' html += '
\n' # 实质内容 if substance: # 具体元素 concrete_elements = substance.get("具体元素", {}) if concrete_elements: html += '
\n' html += '具体元素:\n' keywords = concrete_elements.get("关键词", []) if keywords: html += '
\n' html += '关键词:\n' html += '
\n' for keyword in keywords: html += f'{html_module.escape(str(keyword))}\n' html += '
\n' html += '
\n' forms = concrete_elements.get("对应形式", {}) if forms: html += '
\n' html += '对应形式:\n' if forms.get("文案形式"): html += f'
文案形式:{html_module.escape(forms["文案形式"])}
\n' if forms.get("画面形式"): html += f'
画面形式:{html_module.escape(forms["画面形式"])}
\n' if forms.get("声音形式"): html += f'
声音形式:{html_module.escape(forms["声音形式"])}
\n' html += '
\n' html += '
\n' # 具象概念 concrete_concepts = substance.get("具象概念", {}) if concrete_concepts: html += '
\n' html += '具象概念:\n' keywords = concrete_concepts.get("关键词", []) if keywords: html += '
\n' html += '关键词:\n' html += '
\n' for keyword in keywords: html += f'{html_module.escape(str(keyword))}\n' html += '
\n' html += '
\n' forms = concrete_concepts.get("对应形式", {}) if forms: html += '
\n' html += '对应形式:\n' if forms.get("文案形式"): html += f'
文案形式:{html_module.escape(forms["文案形式"])}
\n' if forms.get("画面形式"): html += f'
画面形式:{html_module.escape(forms["画面形式"])}
\n' if forms.get("声音形式"): html += f'
声音形式:{html_module.escape(forms["声音形式"])}
\n' html += '
\n' html += '
\n' # 抽象概念 abstract_concepts = substance.get("抽象概念", {}) if abstract_concepts: html += '
\n' html += '抽象概念:\n' keywords = abstract_concepts.get("关键词", []) if keywords: html += '
\n' html += '关键词:\n' html += '
\n' for keyword in keywords: html += f'{html_module.escape(str(keyword))}\n' html += '
\n' html += '
\n' forms = abstract_concepts.get("对应形式", {}) if forms: html += '
\n' html += '对应形式:\n' if forms.get("文案形式"): html += f'
文案形式:{html_module.escape(forms["文案形式"])}
\n' if forms.get("画面形式"): html += f'
画面形式:{html_module.escape(forms["画面形式"])}
\n' if forms.get("声音形式"): html += f'
声音形式:{html_module.escape(forms["声音形式"])}
\n' html += '
\n' html += '
\n' html += '
\n' html += '
\n' return html def generate_tab2_content(data: Dict[str, Any]) -> str: """生成Tab2内容:L3单元解构""" html = '\n' return html