added automatic language detection and API

This commit is contained in:
2025-07-18 23:06:37 +08:00
parent d2630e4503
commit 5783f40de7
8 changed files with 1400 additions and 17 deletions

View File

@@ -71,6 +71,11 @@ func (f *Freeze) GenerateFromCode(code, language string) ([]byte, error) {
return f.generator.GenerateFromCode(code, language)
}
// GenerateFromCodeAuto generates an SVG screenshot from source code with automatic language detection
func (f *Freeze) GenerateFromCodeAuto(code string) ([]byte, error) {
return f.generator.GenerateFromCode(code, "")
}
// GenerateFromFile generates an SVG screenshot from a source code file
func (f *Freeze) GenerateFromFile(filename string) ([]byte, error) {
return f.generator.GenerateFromFile(filename)
@@ -112,6 +117,28 @@ func (f *Freeze) GeneratePNGFromCode(code, language string) ([]byte, error) {
return f.generator.ConvertToPNG(svgData, width, height)
}
// GeneratePNGFromCodeAuto generates a PNG screenshot from source code with automatic language detection
func (f *Freeze) GeneratePNGFromCodeAuto(code string) ([]byte, error) {
svgData, err := f.generator.GenerateFromCode(code, "")
if err != nil {
return nil, err
}
// Calculate dimensions for PNG (use 4x scale for better quality)
width := f.config.Width
height := f.config.Height
if width == 0 || height == 0 {
// Use default dimensions with 4x scale
width = 800 * 4
height = 600 * 4
} else {
width *= 4
height *= 4
}
return f.generator.ConvertToPNG(svgData, width, height)
}
// GeneratePNGFromFile generates a PNG screenshot from a source code file
func (f *Freeze) GeneratePNGFromFile(filename string) ([]byte, error) {
svgData, err := f.generator.GenerateFromFile(filename)
@@ -177,6 +204,24 @@ func (f *Freeze) SaveCodeToFile(code, language, filename string) error {
return f.SaveToFile(data, filename)
}
// SaveCodeToFileAuto generates and saves a code screenshot to a file with automatic language detection
func (f *Freeze) SaveCodeToFileAuto(code, filename string) error {
var data []byte
var err error
if isPNGFile(filename) {
data, err = f.GeneratePNGFromCodeAuto(code)
} else {
data, err = f.GenerateFromCodeAuto(code)
}
if err != nil {
return err
}
return f.SaveToFile(data, filename)
}
// SaveFileToFile generates and saves a file screenshot to a file
func (f *Freeze) SaveFileToFile(inputFile, outputFile string) error {
var data []byte
@@ -298,6 +343,42 @@ func (f *Freeze) WithDimensions(width, height float64) *Freeze {
return clone
}
// DetectLanguage detects the programming language from code content
func (f *Freeze) DetectLanguage(code string) string {
return f.generator.DetectLanguage(code)
}
// DetectLanguageFromFilename detects the programming language from filename
func (f *Freeze) DetectLanguageFromFilename(filename string) string {
return f.generator.DetectLanguageFromFilename(filename)
}
// DetectLanguageFromFile detects language from both filename and content
func (f *Freeze) DetectLanguageFromFile(filename, content string) string {
return f.generator.DetectLanguageFromFile(filename, content)
}
// GetSupportedLanguages returns a list of all supported languages
func (f *Freeze) GetSupportedLanguages() []string {
return f.generator.GetSupportedLanguages()
}
// IsLanguageSupported checks if a language is supported
func (f *Freeze) IsLanguageSupported(language string) bool {
return f.generator.IsLanguageSupported(language)
}
// SetLanguageDetector sets a custom language detector
func (f *Freeze) SetLanguageDetector(detector *LanguageDetector) *Freeze {
f.generator.SetLanguageDetector(detector)
return f
}
// GetLanguageDetector returns the current language detector
func (f *Freeze) GetLanguageDetector() *LanguageDetector {
return f.generator.GetLanguageDetector()
}
// isPNGFile checks if the filename has a PNG extension
func isPNGFile(filename string) bool {
return len(filename) > 4 && filename[len(filename)-4:] == ".png"