Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    success = 0

    options.i = CkJsonObject::ckCreate()
    If options.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    sbHead.i = CkStringBuilder::ckCreate()
    If sbHead.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    bCrlf.i = 1
    CkStringBuilder::ckAppendLine(sbHead,"<head>",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"<style>",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"body {",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"  font-family: " + Chr(34) + "Segoe UI" + Chr(34) + ", Tahoma, Geneva, Verdana, sans-serif;",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"}",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"</style>",bCrlf)
    CkStringBuilder::ckAppendLine(sbHead,"</head>",bCrlf)

    ; Each HTML section can be set individually.
    CkJsonObject::ckUpdateString(options,"docType","<!DOCTYPE html>")
    CkJsonObject::ckUpdateString(options,"rootElement","<html lang=" + Chr(34) + "en" + Chr(34) + ">")
    CkJsonObject::ckUpdateString(options,"head",CkStringBuilder::ckGetAsString(sbHead))
    CkJsonObject::ckUpdateString(options,"bodyStart","<body>" + Chr(10) + "<div id=" + Chr(34) + "content" + Chr(34))
    CkJsonObject::ckUpdateString(options,"bodyEnd","</div>" + Chr(10) + "</body>")

    ; 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.
    CkJsonObject::ckUpdateString(options,"extraHead","<link rel=" + Chr(34) + "stylesheet" + Chr(34) + " href=" + Chr(34) + "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-coy.min.css" + Chr(34) + " />")
    CkJsonObject::ckUpdateString(options,"extraBody","<script src=" + Chr(34) + "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js" + Chr(34) + "></script><script src =" + Chr(34) + "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js" + Chr(34) + "></script>")

    sbMarkdown.i = CkStringBuilder::ckCreate()
    If sbMarkdown.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    sbHtml.i = CkStringBuilder::ckCreate()
    If sbHtml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbMarkdown,"qa_data/markdown/test1.md","utf-8")
    If success = 0
        Debug CkStringBuilder::ckLastErrorText(sbMarkdown)
        CkJsonObject::ckDispose(options)
        CkStringBuilder::ckDispose(sbHead)
        CkStringBuilder::ckDispose(sbMarkdown)
        CkStringBuilder::ckDispose(sbHtml)
        ProcedureReturn
    EndIf

    CkStringBuilder::ckMarkdownToHtml(sbMarkdown,options,sbHtml)
    CkStringBuilder::ckToCRLF(sbHtml)

    Debug CkStringBuilder::ckGetAsString(sbHtml)

    ; 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


    CkJsonObject::ckDispose(options)
    CkStringBuilder::ckDispose(sbHead)
    CkStringBuilder::ckDispose(sbMarkdown)
    CkStringBuilder::ckDispose(sbHtml)


    ProcedureReturn
EndProcedure