Code Highlighting
#Intro
Dok comes packaged with spatie/commonmark-shiki-highlighter for easy code highlighting. You can of course swap this out for another package like Torchlight.
Shiki runs every page load, so it's recommended to have some sort of static caching. Learn more about static caching in Statamic.
Alternativly you may choose to use the {{ cache }}
tags instead.
#Theming
You can change your theme by changing the theme
parameter inside of your AppServiceProvider.php
Markdown::addExtension(function () {
return new HighlightCodeExtension(theme: 'material-theme-lighter');
});
View a list of available themes.
#Examples
#JavaScript
// Example of a simple function in JavaScript
function calculateSum(a, b) {
let sum = a + b;
console.log(`The sum of ${a} and ${b} is ${sum}`);
return sum;
}
// Call the function
calculateSum(5, 10);
#Python
# Example of a class in Python
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
def make_sound(self):
print("Some generic sound")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name, species="Dog")
self.breed = breed
def make_sound(self):
print("Woof!")
# Create an instance
my_dog = Dog("Rex", "German Shepherd")
my_dog.make_sound()
#HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Syntax Highlighting Example</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<h1>Hello World</h1>
</header>
<main>
<p>This is an example HTML document.</p>
</main>
<script src="script.js"></script>
</body>
</html>
#CSS
/* CSS styling example */
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
margin: 0;
padding: 20px;
background-color: #f4f4f4;
}
header {
background: #333;
color: #fff;
padding: 1rem;
text-align: center;
}
h1 {
margin: 0;
}
@media (max-width: 600px) {
body {
padding: 10px;
}
}
#Antlers (Statamic)
{{# Antlers template example for Statamic #}}
{{ if show_header }}
<header class="site-header {{ header_class }}">
<h1>{{ title }}</h1>
{{# Navigation #}}
<nav>
{{ nav:main include_home="true" }}
<a href="{{ url }}" class="{{ if is_current }}active{{ /if }}">
{{ title }}
</a>
{{ /nav:main }}
</nav>
</header>
{{ /if }}
{{# Display a collection of items #}}
<div class="items-grid">
{{ collection:products limit="6" sort="title:asc" }}
<div class="product-card">
<h2>{{ title }}</h2>
{{ if on_sale }}
<span class="sale-badge">On Sale!</span>
{{ /if }}
<p>{{ price | currency }}</p>
{{ assets:product_image }}
<img src="{{ url }}" alt="{{ alt }}">
{{ /assets:product_image }}
</div>
{{ /collection:products }}
</div>
#SQL
-- Creating a table and inserting data
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
hire_date DATE,
salary DECIMAL(10, 2)
);
-- Insert some data
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (1, 'John', 'Doe', '2022-01-15', 75000.00);
-- Query with join
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.salary > 50000
ORDER BY e.last_name ASC;
#Java
// Example of a Java class
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void greet() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
public static void main(String[] args) {
Person person = new Person("Alice", 30);
person.greet();
}
}
#C#
using System;
using System.Collections.Generic;
namespace SyntaxExample
{
class Program
{
static void Main(string[] args)
{
// Create a dictionary
Dictionary<string, int> scores = new Dictionary<string, int>()
{
{"Alice", 95},
{"Bob", 87},
{"Charlie", 92}
};
// Iterate through the dictionary
foreach (var item in scores)
{
Console.WriteLine($"{item.Key} scored {item.Value}");
}
// LINQ example
var highScores = scores.Where(s => s.Value >= 90);
}
}
}
#Ruby
# Example of a Ruby class
class Book
attr_accessor :title, :author, :pages
def initialize(title, author, pages)
@title = title
@author = author
@pages = pages
end
def to_s
"#{@title} by #{@author} (#{@pages} pages)"
end
end
# Create a new book
book = Book.new("The Hobbit", "J.R.R. Tolkien", 295)
puts book
# Array manipulation
books = ["Book A", "Book B", "Book C"]
books.each_with_index do |book, index|
puts "#{index + 1}: #{book}"
end
#PHP
<?php
// Class definition
class User {
private $name;
private $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
public function getInfo() {
return "Name: {$this->name}, Email: {$this->email}";
}
}
// Create a new user
$user = new User("John Doe", "[email protected]");
echo $user->getInfo();
// Array handling
$colors = ["red", "green", "blue"];
foreach ($colors as $color) {
echo "<div style='color: {$color}'>This text is {$color}</div>";
}
?>