Files

224 lines
5.6 KiB
Markdown

# 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 language
- `DetectLanguage()` - Detect language from code content
- `DetectLanguageFromFilename()` - Detect language from filename
- `DetectLanguageFromFile()` - Combined detection from both filename and content
- `GetSupportedLanguages()` - List all supported languages
- `IsLanguageSupported()` - Check if a language is supported
### ⚙️ Customizable Detection
- Custom file extension mappings
- Configurable detection strategies
- Fallback language settings
## Usage Examples
### Basic Auto Detection
```go
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
```go
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
```go
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
```go
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.
```go
// 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.
```go
// 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.
```go
// Tries filename first, then content analysis
language := freeze.DetectLanguageFromFile("script.unknown", pythonCode)
// Returns: "python" (from content analysis)
```
## Configuration Options
### Language Detector Settings
```go
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
```go
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
```bash
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 examples
- `detection_*.svg` - Language detection API examples
- `custom_*.svg` - Custom detector examples
- `batch_*.svg` - Batch processing examples
- `language_summary.svg` - Language support summary