Files
freezelib/USAGE.md
2025-07-18 19:02:23 +08:00

6.0 KiB
Raw Blame History

FreezeLib 使用指南

Language / 语言: English | 中文

Main Documentation / 主要文档: README (English) | README (中文)

FreezeLib 是一个基于 Charm 的 freeze CLI 工具重构的 Go 公共库,用于生成美观的代码截图。

🚀 快速开始

基本用法

package main

import (
	"github.com/landaiqing/freezelib"
	"os"
)

func main() {
	// 创建 freeze 实例
	freeze := freezelib.New()

	// 要截图的代码
	code := `package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}`

	// 生成 SVG
	svgData, err := freeze.GenerateFromCode(code, "go")
	if err != nil {
		panic(err)
	}

	// 保存到文件
	os.WriteFile("hello.svg", svgData, 0644)
}

链式调用 API

// 使用 QuickFreeze 进行链式调用
qf := freezelib.NewQuickFreeze()

svgData, err := qf.WithTheme("dracula").
    WithFont("Fira Code", 14).
    WithWindow().
    WithShadow().
    WithLineNumbers().
    WithLanguage("javascript").
    CodeToSVG(code)

📋 主要功能

1. 多种输入方式

// 从代码字符串生成
svgData, err := freeze.GenerateFromCode(code, "python")

// 从文件生成
svgData, err := freeze.GenerateFromFile("main.go")

// 从 ANSI 终端输出生成
ansiOutput := "\033[32m✓ SUCCESS\033[0m: Build completed"
svgData, err := freeze.GenerateFromANSI(ansiOutput)

// 从 Reader 生成
svgData, err := freeze.GenerateFromReader(reader, "javascript")

2. 多种输出格式

// 生成 SVG
svgData, err := freeze.GenerateFromCode(code, "go")

// 生成 PNG
pngData, err := freeze.GeneratePNGFromCode(code, "go")

// 直接保存到文件
err := freeze.SaveCodeToFile(code, "go", "output.svg")
err := freeze.SaveCodeToFile(code, "go", "output.png") // 自动检测格式

3. 预设配置

// 使用预设配置
freeze := freezelib.NewWithPreset("dark")        // 深色主题
freeze := freezelib.NewWithPreset("terminal")    // 终端风格
freeze := freezelib.NewWithPreset("presentation") // 演示风格

// 可用预设
presets := []string{
    "base",         // 基础样式
    "full",         // macOS 风格
    "terminal",     // 终端优化
    "presentation", // 演示优化
    "minimal",      // 极简风格
    "dark",         // 深色主题
    "light",        // 浅色主题
    "retro",        // 复古风格
    "neon",         // 霓虹风格
    "compact",      // 紧凑风格
}

4. 自定义配置

config := freezelib.DefaultConfig()

// 基本设置
config.SetTheme("github-dark")
config.SetFont("JetBrains Mono", 14)
config.SetBackground("#1e1e1e")
config.SetLanguage("python")

// 布局设置
config.SetPadding(20)           // 所有边
config.SetPadding(20, 40)       // 垂直,水平
config.SetPadding(20, 40, 20, 40) // 上,右,下,左
config.SetMargin(15)
config.SetDimensions(800, 600)

// 装饰效果
config.SetWindow(true)          // 窗口控件
config.SetLineNumbers(true)     // 行号
config.SetShadow(20, 0, 10)     // 阴影模糊X偏移Y偏移
config.SetBorder(1, 8, "#333")  // 边框:宽度,圆角,颜色

// 行范围1-indexed
config.SetLines(10, 20)         // 只截取第10-20行

freeze := freezelib.NewWithConfig(config)

🎨 支持的主题

  • github / github-dark
  • dracula
  • monokai
  • solarized-dark / solarized-light
  • nord
  • one-dark
  • material
  • vim
  • 等等...

💻 支持的语言

支持 100+ 种编程语言,包括:

  • Go, Rust, Python, JavaScript, TypeScript
  • C, C++, C#, Java, Kotlin, Swift
  • HTML, CSS, SCSS, JSON, YAML, XML
  • Shell, PowerShell, Dockerfile
  • SQL, GraphQL, Markdown
  • 等等...

🔧 高级用法

批量处理

files := []string{"main.go", "config.go", "utils.go"}

for _, file := range files {
    svgData, err := freeze.GenerateFromFile(file)
    if err != nil {
        continue
    }
    
    outputFile := strings.TrimSuffix(file, ".go") + ".svg"
    os.WriteFile(outputFile, svgData, 0644)
}

终端输出截图

freeze := freezelib.NewWithPreset("terminal")

ansiOutput := "\033[32m✓ Tests passed\033[0m\n" +
              "\033[31m✗ Build failed\033[0m\n" +
              "\033[33m⚠ Warning: deprecated API\033[0m"

svgData, err := freeze.GenerateFromANSI(ansiOutput)

链式方法

freeze := freezelib.New().
    WithTheme("monokai").
    WithFont("Cascadia Code", 15).
    WithWindow(true).
    WithShadow(20, 0, 10).
    WithLineNumbers(true)

svgData, err := freeze.GenerateFromCode(code, "rust")

📊 性能优化建议

  1. 重用实例:创建一个 Freeze 实例并重复使用
  2. 选择合适格式:网页用 SVG演示用 PNG
  3. 设置具体尺寸:指定尺寸可提高性能
  4. 批量操作:在单个会话中处理多个文件

🐛 错误处理

svgData, err := freeze.GenerateFromCode(code, "go")
if err != nil {
    switch {
    case strings.Contains(err.Error(), "language"):
        // 语言检测失败
    case strings.Contains(err.Error(), "config"):
        // 配置错误
    default:
        // 其他错误
    }
}

📁 项目结构

freezelib/
├── freeze.go          # 主要 API 接口
├── config.go          # 配置结构体
├── generator.go       # 核心生成逻辑
├── quickfreeze.go     # 简化 API
├── presets.go         # 预设配置
├── ansi.go           # ANSI 处理
├── svg/              # SVG 处理
├── font/             # 字体处理
├── example/          # 使用示例
└── README.md         # 详细文档

🤝 与原版 freeze 的区别

特性 原版 freeze FreezeLib
使用方式 CLI 工具 Go 库
集成方式 命令行调用 直接导入
配置方式 命令行参数/配置文件 Go 结构体
扩展性 有限 高度可扩展
性能 进程启动开销 内存中处理

📝 示例代码

查看 examples 目录中的完整示例:

这将生成多个示例 SVG 文件,展示库的各种功能。