initial commit

This commit is contained in:
2025-07-18 19:02:23 +08:00
commit d2630e4503
43 changed files with 8014 additions and 0 deletions

264
USAGE.md Normal file
View File

@@ -0,0 +1,264 @@
# 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 文件,展示库的各种功能。