10 KiB
10 KiB
FreezeLib - 美观代码截图的 Go 库
Documentation / 文档: Usage Guide (English) | 使用指南 (中文)
FreezeLib 是一个用于生成美观代码和终端输出截图的 Go 库。它基于 Charm 团队广受欢迎的 freeze CLI 工具,但重新设计为可在 Go 应用程序中重复使用的库。
特性
- 🎨 语法高亮: 支持 270+ 种编程语言
- 🔍 自动语言检测: 智能检测代码内容和文件名的语言
- 📋 简单列表: 轻松访问所有可用的语言、主题和预设
- 🖼️ 多种输出格式: 生成 SVG 和 PNG 图像
- 🎭 丰富主题: 67+ 内置主题,包括 GitHub、Dracula、Monokai 等
- 🪟 窗口控件: macOS 风格的窗口装饰
- 📏 行号: 可选的行号显示
- 🌈 ANSI 支持: 渲染彩色终端输出
- ⚡ 简易 API: 简单且可链式调用的 API 设计
- 🎯 预设配置: 10 种预配置样式,适用于常见用例
- 🔧 高度可定制: 精细调整输出的每个方面
安装
go get github.com/landaiqing/freezelib
快速开始
基本用法
package main
import (
"os"
"github.com/landaiqing/freezelib"
)
func main() {
// 创建新的 freeze 实例
freeze := freezelib.New()
// 要截图的 Go 代码
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)
}
自动语言检测
FreezeLib 可以自动检测编程语言:
freeze := freezelib.New()
// 从代码内容自动检测语言
svgData, err := freeze.GenerateFromCodeAuto(code)
// 手动检测语言
language := freeze.DetectLanguage(code)
fmt.Printf("检测到的语言: %s", language)
// 从文件名检测语言
language = freeze.DetectLanguageFromFilename("script.py")
// 组合检测(文件名 + 内容)
language = freeze.DetectLanguageFromFile("script.py", code)
可用选项
获取所有可用选项的列表:
freeze := freezelib.New()
// 获取所有可用选项(排序列表)
languages := freeze.GetSupportedLanguages() // 270+ 种语言
themes := freeze.GetSupportedThemes() // 67+ 种主题
presets := freeze.GetAvailablePresets() // 10 种预设
// 测试支持
isSupported := freeze.IsLanguageSupported("go")
isSupported = freeze.IsThemeSupported("github")
isValid := freezelib.IsValidPreset("dark")
// 全局函数也可用
languages = freezelib.GetSupportedLanguages()
themes = freezelib.GetSupportedThemes()
presets = freezelib.GetAvailablePresets()
QuickFreeze API
为了更流畅的体验,使用 QuickFreeze API:
qf := freezelib.NewQuickFreeze()
svgData, err := qf.WithTheme("dracula").
WithFont("Fira Code", 14).
WithWindow().
WithShadow().
WithLineNumbers().
CodeToSVGAuto(code) // 自动检测语言
API 参考
核心类型
Freeze
生成截图的主要接口:
freeze := freezelib.New() // 默认配置
freeze := freezelib.NewWithConfig(config) // 自定义配置
freeze := freezelib.NewWithPreset("dark") // 预设配置
QuickFreeze
简化的链式 API:
qf := freezelib.NewQuickFreeze()
qf := freezelib.NewQuickFreezeWithPreset("terminal")
生成方法
从代码字符串
svgData, err := freeze.GenerateFromCode(code, "python")
pngData, err := freeze.GeneratePNGFromCode(code, "python")
// 使用自动语言检测
svgData, err := freeze.GenerateFromCodeAuto(code)
pngData, err := freeze.GeneratePNGFromCodeAuto(code)
从文件
svgData, err := freeze.GenerateFromFile("main.go")
pngData, err := freeze.GeneratePNGFromFile("main.go")
从 ANSI 终端输出
terminalOutput := "\033[32mSUCCESS\033[0m: Build completed"
svgData, err := freeze.GenerateFromANSI(terminalOutput)
pngData, err := freeze.GeneratePNGFromANSI(terminalOutput)
从 Reader
svgData, err := freeze.GenerateFromReader(reader, "javascript")
配置
基本配置
config := freezelib.DefaultConfig()
config.SetTheme("github-dark")
config.SetFont("JetBrains Mono", 14)
config.SetBackground("#1e1e1e")
config.SetWindow(true)
config.SetLineNumbers(true)
高级配置
config.SetPadding(20) // 所有边
config.SetPadding(20, 40) // 垂直,水平
config.SetPadding(20, 40, 20, 40) // 上,右,下,左
config.SetShadow(20, 0, 10) // 模糊,X 偏移,Y 偏移
config.SetBorder(1, 8, "#333") // 宽度,圆角,颜色
config.SetDimensions(800, 600) // 宽度,高度
config.SetLines(10, 20) // 行范围(1-indexed)
预设
FreezeLib 提供了几个内置预设:
// 可用预设(10 种)
presets := []string{
"base", // 基础配置
"full", // 完整功能配置
"terminal", // 终端风格
"dark", // 深色主题
"light", // 浅色主题
"minimal", // 极简风格
"professional", // 专业风格
"vibrant", // 鲜艳配色
"retro", // 复古风格
"neon", // 霓虹风格
}
freeze := freezelib.NewWithPreset("dark")
链式方法
Freeze
和 QuickFreeze
都支持方法链:
freeze := freezelib.New().
WithTheme("monokai").
WithFont("Cascadia Code", 15).
WithWindow(true).
WithShadow(20, 0, 10).
WithLineNumbers(true)
svgData, err := freeze.GenerateFromCode(code, "rust")
示例
查看 examples/
目录获取完整示例:
01-basic/
- 基础用法示例02-formats/
- 输出格式示例03-themes/
- 主题展示04-languages/
- 语言支持示例05-terminal/
- 终端输出示例06-advanced/
- 高级配置07-batch/
- 批量处理08-auto-language-detection/
- 自动语言检测09-supported-options/
- 支持选项列表
终端输出截图
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)
自定义样式
config := freezelib.DefaultConfig()
config.Theme = "github"
config.Background = "#f6f8fa"
config.Font.Family = "SF Mono"
config.Font.Size = 16
config.SetPadding(30)
config.SetMargin(20)
config.Window = true
config.ShowLineNumbers = true
config.Border.Radius = 12
config.Shadow.Blur = 25
freeze := freezelib.NewWithConfig(config)
批量处理
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)
}
支持的语言
FreezeLib 支持 270+ 种编程语言的语法高亮:
热门语言
- 系统级: Go, Rust, C, C++, Zig, D, Nim, V
- Web: JavaScript, TypeScript, HTML, CSS, SCSS, PHP
- 企业级: Java, C#, Kotlin, Scala, Swift
- 脚本: Python, Ruby, Perl, Lua, Bash, PowerShell
- 数据: JSON, YAML, TOML, XML, SQL, GraphQL
分类
- 热门 (30): 最常用的语言
- Web (15): 前端和后端 Web 技术
- 系统 (13): 底层和系统编程
- 脚本 (12): 自动化和脚本语言
- 数据 (11): 配置和数据格式
- 更多: 总共支持 270+ 种语言
支持的主题
FreezeLib 包含 67+ 种语法高亮主题:
热门主题
- GitHub:
github
,github-dark
- 现代:
dracula
,monokai
,nord
,one-dark
- 经典:
solarized-dark
,solarized-light
,material
,vim
- 多彩:
colorful
,friendly
,fruity
,rainbow_dash
分类
- 热门 (30): 最常用的主题
- 深色 (10): 适合低光环境的深色配色方案
- 浅色 (14): 适合明亮环境的浅色配色方案
- 更多: 总共 67+ 种主题可用
简单高效
所有列表都按字母顺序排序,便于浏览和选择。
语言检测功能
自动检测方法
freeze := freezelib.New()
// 从代码内容检测语言
language := freeze.DetectLanguage(code)
// 从文件名检测
language = freeze.DetectLanguageFromFilename("script.py")
// 组合检测(文件名 + 内容)
language = freeze.DetectLanguageFromFile("script.py", code)
// 检查语言支持
supported := freeze.IsLanguageSupported("go")
// 获取所有支持的语言
languages := freeze.GetSupportedLanguages()
自定义语言检测器
detector := freeze.GetLanguageDetector()
// 添加自定义文件扩展名映射
detector.AddCustomMapping(".myext", "python")
detector.AddCustomMapping(".config", "json")
// 配置检测策略
detector.EnableContentAnalysis = true
detector.EnableFilenameAnalysis = true
detector.FallbackLanguage = "text"
支持选项
获取所有可用选项
freeze := freezelib.New()
// 获取所有可用选项(排序列表)
languages := freeze.GetSupportedLanguages() // 270+ 种语言
themes := freeze.GetSupportedThemes() // 67+ 种主题
presets := freeze.GetAvailablePresets() // 10 种预设
// 测试支持
isSupported := freeze.IsLanguageSupported("go")
isSupported = freeze.IsThemeSupported("github")
isValid := freezelib.IsValidPreset("dark")
// 全局函数也可用
languages = freezelib.GetSupportedLanguages()
themes = freezelib.GetSupportedThemes()
presets = freezelib.GetAvailablePresets()
验证支持
// 检查支持
if freeze.IsLanguageSupported("go") {
// 生成 Go 代码截图
}
if freeze.IsThemeSupported("dracula") {
// 使用 Dracula 主题
}
if freezelib.IsValidPreset("dark") {
// 使用深色预设
}
错误处理
svgData, err := freeze.GenerateFromCode(code, "go")
if err != nil {
// 处理特定错误
switch {
case strings.Contains(err.Error(), "language"):
// 语言检测失败
case strings.Contains(err.Error(), "config"):
// 配置错误
default:
// 其他错误
}
}
贡献
欢迎贡献!请随时提交 Pull Request。
许可证
MIT 许可证 - 详见 LICENSE 文件。