package main import ( "fmt" "github.com/landaiqing/freezelib" "os" ) func main() { fmt.Println("š Output Format Examples") fmt.Println("=========================") // Create output directory os.MkdirAll("output", 0755) // Run format examples svgVsPngExample() qualityComparisonExample() dimensionExamples() formatOptimizationExample() fmt.Println("\nā Format examples completed!") fmt.Println("š Check the 'output' directory for generated files.") fmt.Println("š Compare file sizes and visual quality between formats.") } // SVG vs PNG comparison func svgVsPngExample() { fmt.Println("\nš SVG vs PNG Comparison") fmt.Println("-------------------------") freeze := freezelib.New(). WithTheme("github-dark"). WithFont("JetBrains Mono", 14). WithWindow(true). WithLineNumbers(true). WithShadow(15, 0, 8) code := `package main import ( "fmt" "net/http" "log" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) fmt.Println("Server starting on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }` // Generate SVG svgData, err := freeze.GenerateFromCode(code, "go") if err != nil { fmt.Printf("ā Error generating SVG: %v\n", err) return } // Generate PNG pngData, err := freeze.GeneratePNGFromCode(code, "go") if err != nil { fmt.Printf("ā Error generating PNG: %v\n", err) return } // Save files svgPath := "output/comparison.svg" pngPath := "output/comparison.png" os.WriteFile(svgPath, svgData, 0644) os.WriteFile(pngPath, pngData, 0644) // Show file size comparison svgInfo, _ := os.Stat(svgPath) pngInfo, _ := os.Stat(pngPath) fmt.Printf("ā Generated: %s (%d bytes)\n", svgPath, svgInfo.Size()) fmt.Printf("ā Generated: %s (%d bytes)\n", pngPath, pngInfo.Size()) fmt.Printf("š Size ratio: PNG is %.1fx larger than SVG\n", float64(pngInfo.Size())/float64(svgInfo.Size())) } // Quality comparison with different settings func qualityComparisonExample() { fmt.Println("\nšØ Quality Comparison") fmt.Println("---------------------") baseCode := `def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right) # Example usage numbers = [3, 6, 8, 10, 1, 2, 1] sorted_numbers = quicksort(numbers) print(f"Original: {numbers}") print(f"Sorted: {sorted_numbers}")` // Different quality settings configs := []struct { name string width float64 height float64 fontSize float64 theme string }{ {"low_quality", 400, 300, 10, "github"}, {"medium_quality", 800, 600, 14, "github-dark"}, {"high_quality", 1200, 900, 16, "dracula"}, {"ultra_quality", 1600, 1200, 18, "monokai"}, } for _, config := range configs { fmt.Printf("š§ Generating %s...\n", config.name) freeze := freezelib.New(). WithTheme(config.theme). WithFont("JetBrains Mono", config.fontSize). WithDimensions(config.width, config.height). WithWindow(true). WithLineNumbers(true). WithShadow(10, 0, 5) // Generate PNG for quality comparison pngData, err := freeze.GeneratePNGFromCode(baseCode, "python") if err != nil { fmt.Printf("ā Error: %v\n", err) continue } filename := fmt.Sprintf("output/quality_%s.png", config.name) err = os.WriteFile(filename, pngData, 0644) if err != nil { fmt.Printf("ā Error saving: %v\n", err) continue } // Show file info info, _ := os.Stat(filename) fmt.Printf("ā Generated: %s (%dx%d, %d bytes)\n", filename, config.width, config.height, info.Size()) } } // Different dimension examples func dimensionExamples() { fmt.Println("\nš Dimension Examples") fmt.Println("---------------------") code := `SELECT u.name, u.email, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.created_at >= '2024-01-01' GROUP BY u.id, u.name, u.email HAVING COUNT(o.id) > 0 ORDER BY order_count DESC LIMIT 10;` dimensions := []struct { name string width float64 height float64 desc string }{ {"square", 600, 600, "Square format"}, {"wide", 1000, 400, "Wide format (presentations)"}, {"tall", 400, 800, "Tall format (mobile)"}, {"standard", 800, 600, "Standard 4:3 ratio"}, {"widescreen", 1200, 675, "Widescreen 16:9 ratio"}, } for _, dim := range dimensions { fmt.Printf("š Creating %s format (%fx%f)...\n", dim.name, dim.width, dim.height) freeze := freezelib.New(). WithTheme("nord"). WithFont("Cascadia Code", 13). WithDimensions(dim.width, dim.height). WithWindow(true). WithLineNumbers(true). WithPadding(20) svgData, err := freeze.GenerateFromCode(code, "sql") if err != nil { fmt.Printf("ā Error: %v\n", err) continue } filename := fmt.Sprintf("output/dimension_%s.svg", dim.name) err = os.WriteFile(filename, svgData, 0644) if err != nil { fmt.Printf("ā Error saving: %v\n", err) continue } fmt.Printf("ā Generated: %s - %s\n", filename, dim.desc) } } // Format optimization examples func formatOptimizationExample() { fmt.Println("\nā” Format Optimization") fmt.Println("----------------------") code := `import React, { useState, useEffect } from 'react'; const TodoApp = () => { const [todos, setTodos] = useState([]); const [input, setInput] = useState(''); useEffect(() => { // Load todos from localStorage const saved = localStorage.getItem('todos'); if (saved) { setTodos(JSON.parse(saved)); } }, []); const addTodo = () => { if (input.trim()) { const newTodo = { id: Date.now(), text: input, completed: false }; setTodos([...todos, newTodo]); setInput(''); } }; return (