Auto Language Detection Examples
This example demonstrates FreezeLib's enhanced automatic language detection capabilities.
Features
🎯 Automatic Language Detection
- Content-based detection: Analyzes code content to identify the programming language
- Filename-based detection: Uses file extensions and names to determine language
- Combined detection: Intelligently combines both methods for best results
- Fallback support: Gracefully handles unknown languages
🔧 Enhanced API
GenerateFromCodeAuto()
- Generate screenshots without specifying languageDetectLanguage()
- Detect language from code contentDetectLanguageFromFilename()
- Detect language from filenameDetectLanguageFromFile()
- Combined detection from both filename and contentGetSupportedLanguages()
- List all supported languagesIsLanguageSupported()
- Check if a language is supported
⚙️ Customizable Detection
- Custom file extension mappings
- Configurable detection strategies
- Fallback language settings
Usage Examples
Basic Auto Detection
freeze := freezelib.New()
code := `
def hello_world():
print("Hello, World!")
if __name__ == "__main__":
hello_world()
`
// Automatically detect language and generate screenshot
svgData, err := freeze.GenerateFromCodeAuto(code)
Language Detection API
freeze := freezelib.New()
// Detect language from content
language := freeze.DetectLanguage(code)
fmt.Printf("Detected language: %s\n", language)
// Detect from filename
language = freeze.DetectLanguageFromFilename("script.py")
fmt.Printf("Language from filename: %s\n", language)
// Combined detection
language = freeze.DetectLanguageFromFile("script.py", code)
fmt.Printf("Combined detection: %s\n", language)
Custom Language Detector
freeze := freezelib.New()
// Get and customize the language detector
detector := freeze.GetLanguageDetector()
// Add custom file extension mappings
detector.AddCustomMapping(".myext", "python")
detector.AddCustomMapping(".config", "json")
// Use custom mappings
language := freeze.DetectLanguageFromFilename("app.config")
// Returns "json" due to custom mapping
QuickFreeze Auto Detection
qf := freezelib.NewQuickFreeze()
svgData, err := qf.WithTheme("dracula").
WithFont("Fira Code", 14).
WithWindow().
CodeToSVGAuto(code) // Auto-detect language
Supported Languages
FreezeLib supports 100+ programming languages including:
Popular Languages
- Go -
.go
- Python -
.py
,.pyw
- JavaScript -
.js
,.mjs
- TypeScript -
.ts
,.tsx
- Rust -
.rs
- Java -
.java
- C/C++ -
.c
,.cpp
,.cc
,.cxx
,.h
,.hpp
- C# -
.cs
- PHP -
.php
- Ruby -
.rb
Web Technologies
- HTML -
.html
,.htm
- CSS -
.css
- SCSS/Sass -
.scss
,.sass
- JSON -
.json
- XML -
.xml
Shell & Scripts
- Bash -
.sh
,.bash
- PowerShell -
.ps1
- Batch -
.bat
,.cmd
- Fish -
.fish
- Zsh -
.zsh
Configuration & Data
- YAML -
.yaml
,.yml
- TOML -
.toml
- INI -
.ini
,.cfg
,.conf
- SQL -
.sql
- Dockerfile -
Dockerfile
,.dockerfile
And Many More...
- Kotlin, Swift, Scala, Clojure, Haskell, OCaml, F#, Erlang, Elixir
- Julia, Nim, Zig, V, D, Pascal, Ada, Fortran, COBOL
- Assembly (NASM, GAS), MATLAB, R, Lua, Dart, Elm
- GraphQL, Protocol Buffers, Markdown, LaTeX, Vim script
Detection Strategies
1. Content Analysis
Uses Chroma's built-in lexer analysis to examine code patterns, keywords, and syntax.
// Analyzes code structure and syntax
language := freeze.DetectLanguage(`
package main
import "fmt"
func main() { fmt.Println("Hello") }
`)
// Returns: "go"
2. Filename Analysis
Examines file extensions and special filenames.
// Uses file extension mapping
language := freeze.DetectLanguageFromFilename("script.py")
// Returns: "python"
// Recognizes special files
language := freeze.DetectLanguageFromFilename("Dockerfile")
// Returns: "dockerfile"
3. Combined Analysis
Intelligently combines both methods for best accuracy.
// Tries filename first, then content analysis
language := freeze.DetectLanguageFromFile("script.unknown", pythonCode)
// Returns: "python" (from content analysis)
Configuration Options
Language Detector Settings
detector := freeze.GetLanguageDetector()
// Enable/disable detection methods
detector.EnableContentAnalysis = true
detector.EnableFilenameAnalysis = true
// Set fallback language
detector.FallbackLanguage = "text"
// Add custom mappings
detector.AddCustomMapping(".myext", "python")
Error Handling
svgData, err := freeze.GenerateFromCodeAuto(code)
if err != nil {
if strings.Contains(err.Error(), "could not determine language") {
// Language detection failed
// Try with explicit language or check supported languages
fmt.Println("Supported languages:", freeze.GetSupportedLanguages())
}
}
Running the Examples
cd examples/08-auto-language-detection
go run main.go
This will generate various screenshots demonstrating:
- Basic auto detection with different languages
- Language detection API usage
- Custom language detector configuration
- Batch processing with auto detection
- Language analysis and support information
Output Files
The examples generate several SVG files in the output/
directory:
auto_*.svg
- Basic auto detection examplesdetection_*.svg
- Language detection API examplescustom_*.svg
- Custom detector examplesbatch_*.svg
- Batch processing exampleslanguage_summary.svg
- Language support summary