Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.2.0+

Markdown to HTML - Full Document, Custom Theme with Code Syntax Highlighting

See more Markdown Examples

Demonstrates how to convert a complete Markdown document to HTML using your own custom theme with Cloudfare Prism's code syntax highlighting.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

    success = false;

    const options = try chilkat.JsonObject.init();
    defer options.deinit();

    // Instead of specifying a "theme", provide values for the HTML document parts.

    const sb_head = try chilkat.StringBuilder.init();
    defer sb_head.deinit();
    const b_crlf = true;
    sb_head.appendLine("<head>", b_crlf) catch {};
    sb_head.appendLine("<style>", b_crlf) catch {};
    sb_head.appendLine("body {", b_crlf) catch {};
    sb_head.appendLine("  font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;", b_crlf) catch {};
    sb_head.appendLine("}", b_crlf) catch {};
    sb_head.appendLine("</style>", b_crlf) catch {};
    sb_head.appendLine("</head>", b_crlf) catch {};

    // Each HTML section can be set individually.
    options.updateString("docType", "<!DOCTYPE html>") catch {};
    options.updateString("rootElement", "<html lang=\"en\">") catch {};
    options.updateString("head", try sb_head.getAsString(alloc)) catch {};
    options.updateString("bodyStart", "<body>\n<div id=\"content\"") catch {};
    options.updateString("bodyEnd", "</div>\n</body>") catch {};

    // We can add extra content to the bottom of the HTML head and body sections like this:
    // Here we are using the Cloudfare Prism "coy" theme for code syntax higlighting.
    options.updateString("extraHead", "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-coy.min.css\" />") catch {};
    options.updateString("extraBody", "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js\"></script><script src =\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js\"></script>") catch {};

    const sb_markdown = try chilkat.StringBuilder.init();
    defer sb_markdown.deinit();
    const sb_html = try chilkat.StringBuilder.init();
    defer sb_html.deinit();

    sb_markdown.loadFile("qa_data/markdown/test1.md", "utf-8") catch {
        std.debug.print("{s}\n", .{try sb_markdown.getLastErrorText(alloc)});
        return;
    };

    sb_markdown.markdownToHtml(options, sb_html) catch {};
    sb_html.toCRLF() catch {};

    std.debug.print("{s}\n", .{try sb_html.getAsString(alloc)});

    // The sample markdown input for this example is identical to the one at Markdown to HTML - Full Document, Raw, where you can view it.

    // Sample HTML output as viewed in a browser:

    // image
}