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

265 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FreezeLib 使用指南
**Language / 语言**: [English](USAGE_EN.md) | [中文](USAGE.md)
**Main Documentation / 主要文档**: [README (English)](README.md) | [README (中文)](README_CN.md)
FreezeLib 是一个基于 Charm 的 freeze CLI 工具重构的 Go 公共库,用于生成美观的代码截图。
## 🚀 快速开始
### 基本用法
```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
```go
// 使用 QuickFreeze 进行链式调用
qf := freezelib.NewQuickFreeze()
svgData, err := qf.WithTheme("dracula").
WithFont("Fira Code", 14).
WithWindow().
WithShadow().
WithLineNumbers().
WithLanguage("javascript").
CodeToSVG(code)
```
## 📋 主要功能
### 1. 多种输入方式
```go
// 从代码字符串生成
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. 多种输出格式
```go
// 生成 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. 预设配置
```go
// 使用预设配置
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. 自定义配置
```go
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
- 等等...
## 🔧 高级用法
### 批量处理
```go
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)
}
```
### 终端输出截图
```go
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)
```
### 链式方法
```go
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. **批量操作**:在单个会话中处理多个文件
## 🐛 错误处理
```go
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 文件,展示库的各种功能。