diff options
| author | 2025-10-24 23:15:35 +0800 | |
|---|---|---|
| committer | 2025-10-24 23:15:35 +0800 | |
| commit | 08299b37dfda86e56e4f2b442f68ccd2da7a82e3 (patch) | |
| tree | e155d11412a26f692d08b8eb796fa689fc5a4019 /src/conventionalrp/renderers/markdown_renderer.py | |
| parent | 990048eb2163127615de60d9359c150bdfb99536 (diff) | |
| download | conventional_role_play-08299b37dfda86e56e4f2b442f68ccd2da7a82e3.tar.gz conventional_role_play-08299b37dfda86e56e4f2b442f68ccd2da7a82e3.zip | |
feat: Enhance Processor, RuleExtractor, and Renderers with type hints and improved documentation
- Added type hints to Processor methods for better clarity and type safety.
- Improved documentation for Processor methods, including detailed descriptions of parameters and return types.
- Refactored RuleExtractor to support optional configuration file loading and added error handling for file operations.
- Enhanced MarkdownRenderer to handle both list and dictionary inputs, with improved rendering logic.
- Created comprehensive examples and tests for all components, ensuring robust functionality and error handling.
- Added example rules for D&D 5E and structured output files for various formats (JSON, HTML, Markdown).
- Established a testing framework with clear instructions and coverage reporting.
Diffstat (limited to 'src/conventionalrp/renderers/markdown_renderer.py')
| -rw-r--r-- | src/conventionalrp/renderers/markdown_renderer.py | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/conventionalrp/renderers/markdown_renderer.py b/src/conventionalrp/renderers/markdown_renderer.py index fab429f..9df59a2 100644 --- a/src/conventionalrp/renderers/markdown_renderer.py +++ b/src/conventionalrp/renderers/markdown_renderer.py @@ -1,17 +1,50 @@ from .base import BaseRenderer +from typing import List, Dict, Any, Union class MarkdownRenderer(BaseRenderer): - def render(self, data): + def render(self, data: Union[List[Dict[str, Any]], Dict[str, Any]]) -> str: """ Renders the given data in Markdown format. Args: - data (dict): The data to render. + data: The data to render (can be list or dict). Returns: str: The rendered Markdown string. """ + if isinstance(data, list): + return self._render_list(data) + elif isinstance(data, dict): + return self._render_dict(data) + else: + return str(data) + + def _render_list(self, data: List[Dict[str, Any]]) -> str: + """渲染列表数据为 Markdown""" + markdown_output = "# TRPG Log\n\n" + + for i, entry in enumerate(data, 1): + if entry.get("type") == "metadata": + markdown_output += f"## Entry {i}\n\n" + markdown_output += f"**Timestamp**: {entry.get('timestamp', 'N/A')} \n" + markdown_output += f"**Speaker**: {entry.get('speaker', 'N/A')} \n\n" + + content_items = entry.get("content", []) + if content_items: + markdown_output += "**Content**:\n\n" + for content in content_items: + content_type = content.get("type", "unknown") + content_text = content.get("content", "") + markdown_output += f"- [{content_type}] {content_text}\n" + markdown_output += "\n" + else: + markdown_output += f"- {entry}\n" + + return markdown_output + + def _render_dict(self, data: Dict[str, Any]) -> str: + """渲染字典数据为 Markdown""" markdown_output = "" for key, value in data.items(): markdown_output += f"## {key}\n\n{value}\n\n" |
