Integration Tiers
Azimuth Markdown offers three ways to integrate, from zero-effort to full control.
Tier A: Drop-In Prebuilt Widget (Easiest)
For the fastest possible integration, place the prebuilt widget in your layout and call Set Markdown Text. In the Widget palette, search for WBP_AzimuthMarkdownBlock, drag it into your widget layout, and call Set Markdown Text on it with your markdown string. The widget handles parsing, rendering, styling, and Unicode sanitization internally. This tier is best for quick prototyping, simple use cases, and developers who want formatted text display with zero setup.
Tier B: Blueprint Function Library (Recommended)
For more control over your UI layout while still avoiding C++, use the Blueprint Function Library. Add a URichTextBlock (or AzimuthRichTextBlock) to your widget, assign DT_AzimuthMarkdownStyles to its Text Style Set property, add AzimuthRichTextStyleDecorator and AzimuthRichTextLinkDecorator to its Decorator Classes array, then in your Blueprint call Convert and Sanitize Markdown from the Azimuth Markdown Library and pass the result to the RichTextBlock's Set Text function. This tier is best for production use, custom UI layouts, and any project that needs formatted text display integrated into existing widgets.
Tier C: Full C++ Access (Maximum Control)
For C++ projects or advanced customization, you get direct access to the parser, renderer, and tag mapping. This tier is best for custom renderers, integration with existing parsing pipelines, and projects that need access to the AST for custom processing.
#include "AzimuthMarkdownParserStatics.h"
#include "AzimuthMarkdownRenderer.h"
#include "AzimuthMarkdownTagMapping.h"
// Parse markdown into an Abstract Syntax Tree
TArray<FMarkdownBlock> AST = FAzimuthMarkdownParser::Parse(RawMarkdown);
// Render to tagged rich text for URichTextBlock
FString Tagged = FAzimuthMarkdownRenderer::RenderToTaggedText(AST, GetDefaultAzimuthTagMapping());
// Sanitize Unicode symbols for font compatibility
FString Safe = FAzimuthMarkdownRenderer::SanitizeUnicodeSymbols(Tagged);
// Display in your RichTextBlock
MyRichTextBlock->SetText(FText::FromString(Safe));