| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- SDK 文档生成器
- 模块化的文档生成系统,支持配置化的文档构建
- """
- import sys
- import os
- from pathlib import Path
- # 添加当前目录到Python路径
- sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
- from utils import ConfigLoader, ProjectScanner, FileProcessor, IndexGenerator
- class DocGenerator:
- def __init__(self, config_path: str = "config.yaml"):
- """初始化文档生成器"""
- self.config_loader = ConfigLoader(config_path)
- self.config_loader.validate_config()
-
- # 获取配置信息
- self.project_info = self.config_loader.get_project_info()
- self.repository_info = self.config_loader.get_repository_info()
- self.categories = self.config_loader.get_categories()
- self.generation_config = self.config_loader.get_generation_config()
-
- # 初始化组件
- self.project_scanner = ProjectScanner(
- self.repository_info.get('projects_dir', '../projects'),
- self.categories
- )
-
- self.file_processor = FileProcessor(
- self.repository_info.get('projects_dir', '../projects'),
- self.repository_info.get('docs_dir', '.'),
- self.generation_config
- )
-
- self.index_generator = IndexGenerator(
- self.repository_info.get('docs_dir', '.'),
- self.file_processor
- )
- def run(self):
- """运行文档生成流程"""
- print("开始生成文档...")
-
- try:
- # 1. 清理目标目录
- print("清理目标目录...")
- self.file_processor.cleanup_dest_dir()
-
- # 2. 扫描项目
- print("扫描项目...")
- category_mapping = self.project_scanner.scan_projects()
-
- # 3. 验证项目
- if not self.project_scanner.validate_projects():
- print("警告: 部分项目目录不存在")
-
- # 4. 处理每个分类
- for category, config in self.categories.items():
- projects = category_mapping.get(category, [])
- if projects:
- category_name = config.get('name', category)
- print(f"\n处理 {category_name} 分类...")
-
- for project in projects:
- self.file_processor.copy_project_files(project, category)
-
- # 5. 生成索引文件
- print("\n生成索引文件...")
- self.index_generator.generate_all_indexes(
- self.categories,
- category_mapping,
- self.project_info
- )
-
- print("\n文档生成完成!")
- return True
-
- except Exception as e:
- print(f"文档生成失败: {e}")
- return False
- def get_statistics(self):
- """获取生成统计信息"""
- stats = {
- 'total_projects': len(self.project_scanner.get_all_projects()),
- 'categories': {}
- }
-
- for category, projects in self.project_scanner.category_mapping.items():
- stats['categories'][category] = len(projects)
-
- return stats
- def main():
- """主函数"""
- import argparse
-
- parser = argparse.ArgumentParser(description='SDK 文档生成器')
- parser.add_argument('--config', '-c', default='config.yaml',
- help='配置文件路径 (默认: config.yaml)')
- parser.add_argument('--stats', '-s', action='store_true',
- help='显示统计信息')
-
- args = parser.parse_args()
-
- try:
- generator = DocGenerator(args.config)
-
- if args.stats:
- # 只扫描项目,不生成文档
- generator.project_scanner.scan_projects()
- stats = generator.get_statistics()
- print("项目统计信息:")
- print(f"总项目数: {stats['total_projects']}")
- for category, count in stats['categories'].items():
- print(f"{category}: {count} 个项目")
- else:
- # 生成文档
- success = generator.run()
- if success:
- stats = generator.get_statistics()
- print(f"\n生成完成! 共处理 {stats['total_projects']} 个项目")
- else:
- sys.exit(1)
-
- except Exception as e:
- print(f"错误: {e}")
- sys.exit(1)
- if __name__ == "__main__":
- main()
|