Syntax Highlighting Test
Table of Contents
Introduction
This post tests syntax highlighting for various programming languages in our blog.
Emacs Lisp
;; Define a function to greet the user (defun greet-user (name) "Greet the user with NAME." (interactive "sEnter your name: ") (message "Hello, %s! Welcome to Emacs." name)) ;; Configuration example (setq user-full-name "John Doe" user-mail-address "john@example.com") ;; Using let binding (let ((x 10) (y 20)) (+ x y)) ; Returns 30
Python
# Python example with classes and functions import os import sys from datetime import datetime class BlogPost: """A simple blog post class.""" def __init__(self, title, content, author="Anonymous"): self.title = title self.content = content self.author = author self.created_at = datetime.now() self.tags = [] def add_tag(self, tag): """Add a tag to the post.""" if tag not in self.tags: self.tags.append(tag) def __str__(self): return f"{self.title} by {self.author}" # Create a new post post = BlogPost("Hello World", "This is my first post!") post.add_tag("python") post.add_tag("tutorial") # List comprehension example numbers = [1, 2, 3, 4, 5] squares = [n**2 for n in numbers if n % 2 == 0] print(f"Even squares: {squares}")
JavaScript
// Modern JavaScript with ES6+ features const BlogManager = { posts: [], // Arrow function method addPost: (title, content) => { const post = { id: Date.now(), title, content, createdAt: new Date(), tags: new Set() }; BlogManager.posts.push(post); return post; }, // Async function example async fetchPosts(url) { try { const response = await fetch(url); const data = await response.json(); return data.posts; } catch (error) { console.error('Failed to fetch posts:', error); return []; } } }; // Destructuring and template literals const { posts } = BlogManager; const message = `Total posts: ${posts.length}`; // Class example class Post { constructor(title, content) { this.title = title; this.content = content; } get summary() { return this.content.substring(0, 100) + '...'; } }
Go
package main import ( "fmt" "net/http" "time" ) // BlogPost represents a blog post type BlogPost struct { ID int `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"created_at"` Tags []string `json:"tags"` } // NewBlogPost creates a new blog post func NewBlogPost(title, content, author string) *BlogPost { return &BlogPost{ ID: generateID(), Title: title, Content: content, Author: author, CreatedAt: time.Now(), Tags: make([]string, 0), } } // AddTag adds a tag to the post func (p *BlogPost) AddTag(tag string) { p.Tags = append(p.Tags, tag) } func main() { // Create a new post post := NewBlogPost("Go Tutorial", "Learning Go is fun!", "Gopher") post.AddTag("golang") post.AddTag("tutorial") // Using defer defer fmt.Println("Cleanup complete") // Goroutine example go func() { fmt.Println("Hello from goroutine!") }() // Channel example ch := make(chan string, 1) ch <- "Hello, channels!" msg := <-ch fmt.Println(msg) } func generateID() int { return int(time.Now().Unix()) }
Rust
use std::collections::HashMap; use std::fmt; // Define a struct for blog posts #[derive(Debug, Clone)] pub struct BlogPost { id: u64, title: String, content: String, author: String, tags: Vec<String>, } impl BlogPost { // Constructor method pub fn new(title: String, content: String, author: String) -> Self { Self { id: generate_id(), title, content, author, tags: Vec::new(), } } // Add a tag to the post pub fn add_tag(&mut self, tag: String) { if !self.tags.contains(&tag) { self.tags.push(tag); } } // Get a summary of the post pub fn summary(&self) -> String { let max_len = 100; if self.content.len() > max_len { format!("{}...", &self.content[..max_len]) } else { self.content.clone() } } } // Implement Display trait impl fmt::Display for BlogPost { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} by {}", self.title, self.author) } } fn main() { // Create a new post let mut post = BlogPost::new( "Rust Tutorial".to_string(), "Learning Rust is exciting!".to_string(), "Rustacean".to_string(), ); // Add some tags post.add_tag("rust".to_string()); post.add_tag("systems".to_string()); // Pattern matching match post.tags.len() { 0 => println!("No tags"), 1 => println!("One tag"), n => println!("{} tags", n), } // Using Option and Result let maybe_number: Option<i32> = Some(42); if let Some(n) = maybe_number { println!("The answer is {}", n); } // Vector and iterator example let numbers: Vec<i32> = (1..=5).collect(); let squares: Vec<i32> = numbers.iter().map(|n| n * n).collect(); println!("Squares: {:?}", squares); } fn generate_id() -> u64 { use std::time::{SystemTime, UNIX_EPOCH}; SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_secs() }
Shell Script
#!/bin/bash # Blog publishing script BLOG_DIR="$HOME/blog" POSTS_DIR="$BLOG_DIR/posts" PUBLIC_DIR="$BLOG_DIR/public" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Function to log messages log() { echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } # Function to build the blog build_blog() { log "Building blog..." # Check if directories exist if [ ! -d "$POSTS_DIR" ]; then echo -e "${RED}Error: Posts directory not found!${NC}" exit 1 fi # Create public directory if it doesn't exist mkdir -p "$PUBLIC_DIR" # Build with Emacs emacs --batch \ --load ~/.config/doom/config.el \ --eval "(org-publish \"blog\" t)" \ 2>&1 | tee build.log # Check if build was successful if [ ${PIPESTATUS[0]} -eq 0 ]; then echo -e "${GREEN}✓ Build successful!${NC}" return 0 else echo -e "${RED}✗ Build failed!${NC}" return 1 fi } # Main execution main() { log "Starting blog build process..." if build_blog; then log "Blog published to $PUBLIC_DIR" # Count the posts post_count=$(find "$POSTS_DIR" -name "*.org" | wc -l) log "Total posts: $post_count" else log "Build failed. Check build.log for details." exit 1 fi } # Run main function main "$@"
HTML/CSS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My Blog</title> <style> /* CSS styling example */ :root { --primary-color: #D4A27F; --text-color: #333; --bg-color: #FDFDF7; } body { font-family: 'Inter', sans-serif; color: var(--text-color); background-color: var(--bg-color); line-height: 1.6; } .blog-post { max-width: 800px; margin: 0 auto; padding: 2rem; } .blog-post h1 { color: var(--primary-color); font-size: 2.5rem; margin-bottom: 1rem; } @media (max-width: 768px) { .blog-post { padding: 1rem; } } </style> </head> <body> <article class="blog-post"> <h1>Welcome to My Blog</h1> <p>This is a sample blog post with syntax highlighting.</p> </article> </body> </html>
JSON
{ "blog": { "title": "My Technical Blog", "author": "bytenoob", "description": "A blog about programming and technology", "posts": [ { "id": 1, "title": "Getting Started with Emacs", "date": "2024-01-29", "tags": ["emacs", "editor", "productivity"], "published": true, "metadata": { "readTime": "10 minutes", "views": 1523, "likes": 42 } }, { "id": 2, "title": "The Waku Network", "date": "2024-06-16", "tags": ["networking", "p2p", "privacy"], "published": true } ], "settings": { "theme": "light", "commentsEnabled": true, "analyticsId": "UA-123456789" } } }
YAML
# Blog configuration blog: title: My Technical Blog author: bytenoob email: blog@example.com # Theme settings theme: name: minimal colors: primary: "#D4A27F" secondary: "#333333" background: "#FDFDF7" # Feature flags features: comments: true search: true rss: true sitemap: true # Categories categories: - name: Programming slug: programming description: Posts about programming languages and techniques - name: DevOps slug: devops description: Posts about development operations # Social links social: github: https://github.com/bytenoob twitter: https://twitter.com/bytenoob linkedin: https://linkedin.com/in/bytenoob
SQL
-- Create blog database schema CREATE DATABASE IF NOT EXISTS blog_db; USE blog_db; -- Users table CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- Posts table CREATE TABLE posts ( id INT PRIMARY KEY AUTO_INCREMENT, author_id INT NOT NULL, title VARCHAR(200) NOT NULL, slug VARCHAR(200) UNIQUE NOT NULL, content TEXT NOT NULL, summary VARCHAR(500), published BOOLEAN DEFAULT FALSE, published_at TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (author_id) REFERENCES users(id), INDEX idx_published (published, published_at), FULLTEXT(title, content) ); -- Tags table CREATE TABLE tags ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) UNIQUE NOT NULL, slug VARCHAR(50) UNIQUE NOT NULL ); -- Post tags junction table CREATE TABLE post_tags ( post_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY (post_id, tag_id), FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE, FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE ); -- Sample query: Get recent posts with tags SELECT p.id, p.title, p.summary, p.published_at, u.username AS author, GROUP_CONCAT(t.name) AS tags FROM posts p JOIN users u ON p.author_id = u.id LEFT JOIN post_tags pt ON p.id = pt.post_id LEFT JOIN tags t ON pt.tag_id = t.id WHERE p.published = TRUE GROUP BY p.id ORDER BY p.published_at DESC LIMIT 10;
Conclusion
This post demonstrates syntax highlighting for various programming languages. The highlighting quality depends on:
- Whether htmlize.el is available
- Whether the specific language mode is installed in Emacs
- The CSS classes defined for syntax highlighting
Languages with built-in Emacs support (like Emacs Lisp, Python, JavaScript) should highlight well. Others may show basic or no highlighting depending on your Emacs configuration.