installerbuilder/tasks/task26-文档生成器.md

9.4 KiB
Raw Blame History

任务26文档生成器

任务描述

实现文档生成器用于生成项目文档包括用户手册、API文档、配置参考等。文档生成器将从代码、注释和专用文档文件中提取信息生成格式一致、内容全面的文档支持多种输出格式。

实现步骤

  1. 定义文档生成器接口:

    • internal/docs包中创建generator.go文件
    • 定义DocumentGenerator接口
      type DocumentGenerator interface {
          // Generate 生成文档
          Generate(options GenerateOptions) error
      
          // GetSupportedFormats 获取支持的输出格式
          GetSupportedFormats() []string
      
          // AddSource 添加文档源
          AddSource(source DocumentSource) error
      
          // AddTemplate 添加文档模板
          AddTemplate(name string, template string) error
      }
      
    • 定义GenerateOptions结构体
      type GenerateOptions struct {
          OutputDir       string            // 输出目录
          Format          string            // 输出格式 (markdown, html, pdf)
          TemplateName    string            // 模板名称
          Locale          string            // 语言环境
          IncludeSections []string          // 包含的章节
          ExcludeSections []string          // 排除的章节
          Variables       map[string]string // 文档变量
          Version         string            // 文档版本
      }
      
    • 定义DocumentSource接口
      type DocumentSource interface {
          // GetName 获取源名称
          GetName() string
      
          // GetContent 获取源内容
          GetContent() (map[string]interface{}, error)
      
          // GetType 获取源类型
          GetType() string
      }
      
  2. 创建默认文档生成器:

    • 创建default_generator.go文件
    • 定义DefaultDocumentGenerator结构体实现DocumentGenerator接口
      type DefaultDocumentGenerator struct {
          sources         map[string]DocumentSource
          templates       map[string]string
          logger          log.Logger
          resourceMgr     resource.ResourceManager
          localizer       i18n.Localizer
      }
      
    • 实现构造函数:
      func NewDefaultDocumentGenerator(logger log.Logger, resourceMgr resource.ResourceManager, localizer i18n.Localizer) *DefaultDocumentGenerator {
          generator := &DefaultDocumentGenerator{
              sources:     make(map[string]DocumentSource),
              templates:   make(map[string]string),
              logger:      logger,
              resourceMgr: resourceMgr,
              localizer:   localizer,
          }
      
          // 注册内置模板
          generator.registerBuiltinTemplates()
      
          return generator
      }
      
  3. 实现文档源:

    • 创建CodeDocumentSource从代码和注释中提取文档
    • 创建MarkdownDocumentSource从Markdown文件中提取文档
    • 创建ConfigDocumentSource从配置模型中提取文档
    • 创建APIDocumentSource从API定义中提取文档
  4. 实现文档生成:

    • 实现Generate方法生成文档
    • 收集所有文档源的内容
    • 应用文档模板
    • 输出到指定格式
  5. 实现Markdown生成

    • 创建generateMarkdown方法生成Markdown文档
    • 支持标题、段落、列表、表格、代码块等
    • 支持链接和图片
    • 支持目录生成
  6. 实现HTML生成

    • 创建generateHTML方法生成HTML文档
    • 支持响应式设计
    • 支持主题定制
    • 支持搜索功能
    • 支持代码高亮
  7. 实现PDF生成

    • 创建generatePDF方法生成PDF文档
    • 支持页眉和页脚
    • 支持目录和索引
    • 支持书签
    • 支持自定义样式
  8. 实现文档工具:

    • 创建文档验证工具,验证文档的完整性和一致性
    • 创建文档比较工具,比较不同版本的文档
    • 创建文档索引工具,为文档创建索引
    • 创建文档发布工具,发布文档到网站或存储库

单元测试要求

  1. 测试文档生成器初始化:

    • 验证构造函数
    • 测试模板注册
    • 测试源添加
    • 测试错误处理
  2. 测试文档源:

    • 验证CodeDocumentSource
    • 测试MarkdownDocumentSource
    • 测试ConfigDocumentSource
    • 测试APIDocumentSource
  3. 测试文档生成:

    • 验证Generate方法
    • 测试不同的选项组合
    • 测试内容收集
    • 测试模板应用
  4. 测试Markdown生成

    • 验证generateMarkdown方法
    • 测试Markdown语法
    • 测试目录生成
    • 测试链接和图片
  5. 测试HTML生成

    • 验证generateHTML方法
    • 测试HTML结构
    • 测试CSS样式
    • 测试JavaScript功能
  6. 测试PDF生成

    • 验证generatePDF方法
    • 测试PDF结构
    • 测试页眉和页脚
    • 测试目录和索引
  7. 测试文档工具:

    • 验证文档验证工具
    • 测试文档比较工具
    • 测试文档索引工具
    • 测试文档发布工具

依赖关系

  • 依赖任务01项目初始化
  • 依赖任务02日志系统实现
  • 依赖任务03错误处理框架
  • 依赖任务04资源管理器实现
  • 依赖任务05配置模型定义
  • 依赖任务24国际化支持
  • 被任务20命令行界面依赖

完成标准

  1. DocumentGenerator接口已定义并文档完善
  2. DefaultDocumentGenerator实现了所有接口方法
  3. 文档源实现并正常工作
  4. 文档生成功能正常工作
  5. Markdown生成功能正常工作
  6. HTML生成功能正常工作
  7. PDF生成功能正常工作
  8. 文档工具功能正常工作
  9. 所有单元测试通过
  10. 代码符合项目的Go语言开发规范
  11. 文档生成器能够生成高质量的文档
  12. 支持所有需求文档中的文档相关功能

文档结构

生成的文档将包含以下章节:

  1. 简介

    • 项目概述
    • 特性列表
    • 系统要求
    • 安装指南
  2. 快速入门

    • 基本概念
    • 第一个项目
    • 命令行使用
    • 常见问题
  3. 用户指南

    • 配置文件
    • 构建过程
    • 平台支持
    • 包类型
    • 脚本使用
    • 依赖管理
    • 文件处理
    • 插件系统
  4. 高级主题

    • 自定义构建
    • 多平台构建
    • 持续集成
    • 性能优化
    • 安全考虑
    • 国际化
  5. API参考

    • 命令行接口
    • 配置API
    • 插件API
    • 脚本API
  6. 配置参考

    • 配置格式
    • 配置选项
    • 配置示例
    • 配置验证
  7. 故障排除

    • 常见错误
    • 诊断工具
    • 日志分析
    • 社区支持
  8. 开发者指南

    • 架构概述
    • 代码组织
    • 构建系统
    • 测试框架
    • 贡献指南
  9. 附录

    • 术语表
    • 版本历史
    • 许可证信息
    • 第三方库

文档模板示例

Markdown模板

# {{.Title}}

{{.Description}}

## 目录

{{.TableOfContents}}

## 简介

{{.Introduction}}

## 安装

{{.Installation}}

## 使用方法

{{.Usage}}

{{range .Sections}}
## {{.Title}}

{{.Content}}

{{if .HasSubsections}}
{{range .Subsections}}
### {{.Title}}

{{.Content}}
{{end}}
{{end}}
{{end}}

## API参考

{{.APIReference}}

## 配置参考

{{.ConfigReference}}

## 故障排除

{{.Troubleshooting}}

## 许可证

{{.License}}

HTML模板

<!DOCTYPE html>
<html lang="{{.Locale}}">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{.Title}}</title>
    <link rel="stylesheet" href="styles.css">
    <script src="script.js"></script>
</head>
<body>
    <header>
        <h1>{{.Title}}</h1>
        <p>{{.Description}}</p>
    </header>
    
    <nav>
        <h2>目录</h2>
        <ul>
            {{range .Sections}}
            <li>
                <a href="#{{.Anchor}}">{{.Title}}</a>
                {{if .HasSubsections}}
                <ul>
                    {{range .Subsections}}
                    <li><a href="#{{.Anchor}}">{{.Title}}</a></li>
                    {{end}}
                </ul>
                {{end}}
            </li>
            {{end}}
        </ul>
    </nav>
    
    <main>
        <section id="introduction">
            <h2>简介</h2>
            {{.Introduction}}
        </section>
        
        <section id="installation">
            <h2>安装</h2>
            {{.Installation}}
        </section>
        
        <section id="usage">
            <h2>使用方法</h2>
            {{.Usage}}
        </section>
        
        {{range .Sections}}
        <section id="{{.Anchor}}">
            <h2>{{.Title}}</h2>
            {{.Content}}
            
            {{if .HasSubsections}}
            {{range .Subsections}}
            <section id="{{.Anchor}}">
                <h3>{{.Title}}</h3>
                {{.Content}}
            </section>
            {{end}}
            {{end}}
        </section>
        {{end}}
        
        <section id="api-reference">
            <h2>API参考</h2>
            {{.APIReference}}
        </section>
        
        <section id="config-reference">
            <h2>配置参考</h2>
            {{.ConfigReference}}
        </section>
        
        <section id="troubleshooting">
            <h2>故障排除</h2>
            {{.Troubleshooting}}
        </section>
    </main>
    
    <footer>
        <p>版本: {{.Version}} | 生成时间: {{.GeneratedAt}}</p>
        <p>{{.License}}</p>
    </footer>
</body>
</html>