From 3974cc8026131e879beb351056746c543fc576d5 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Fri, 5 Jun 2026 19:09:49 +0200 Subject: [PATCH] Add support for proper rendering of markdown footnotes. --- cmake/vendor.cmake | 2 +- profiler/src/profiler/TracyMarkdown.cpp | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cmake/vendor.cmake b/cmake/vendor.cmake index 232013a9..f1138416 100644 --- a/cmake/vendor.cmake +++ b/cmake/vendor.cmake @@ -217,7 +217,7 @@ CPMAddPackage( CPMAddPackage( NAME md4c GITHUB_REPOSITORY mity/md4c - GIT_TAG release-0.5.3 + GIT_TAG 755ce49acdc7cd682d4502b4796db5ed6a1230fb EXCLUDE_FROM_ALL TRUE ) diff --git a/profiler/src/profiler/TracyMarkdown.cpp b/profiler/src/profiler/TracyMarkdown.cpp index 78a15739..fe0c873a 100644 --- a/profiler/src/profiler/TracyMarkdown.cpp +++ b/profiler/src/profiler/TracyMarkdown.cpp @@ -140,6 +140,19 @@ public: case MD_BLOCK_TD: ImGui::TableNextColumn(); break; + case MD_BLOCK_FOOTNOTE_DEF_SECTION: + Separate(); + ImGui::Separator(); + break; + case MD_BLOCK_FOOTNOTE_DEF: + { + ImGui::Dummy( ImVec2( 0, ImGui::GetTextLineHeight() * 0.5f ) ); + auto footnote = ((MD_BLOCK_FOOTNOTE_DEF_DETAIL*)detail); + PrintTextExt( footnote->label.text, footnote->label.text + footnote->label.size, false ); + Glue(); + ImGui::TextUnformatted( ". " ); + break; + } default: break; } @@ -216,6 +229,14 @@ public: case MD_SPAN_DEL: strikethrough = true; break; + case MD_SPAN_FOOTNOTE_REF: + { + auto footnote = ((MD_SPAN_FOOTNOTE_REF_DETAIL*)detail); + ImGui::PushFont( g_fonts.normal, FontSmall ); + Glue(); + PrintTextExt( footnote->label.text, footnote->label.text + footnote->label.size ); + break; + } default: break; } @@ -479,7 +500,7 @@ Markdown::Markdown( View* view, Worker* worker ) , m_worker( worker ) { memset( m_parser, 0, sizeof( MD_PARSER ) ); - m_parser->flags = MD_FLAG_COLLAPSEWHITESPACE | MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_NOHTML | MD_FLAG_TABLES | MD_FLAG_TASKLISTS | MD_FLAG_STRIKETHROUGH; + m_parser->flags = MD_FLAG_COLLAPSEWHITESPACE | MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_NOHTML | MD_FLAG_TABLES | MD_FLAG_TASKLISTS | MD_FLAG_STRIKETHROUGH | MD_FLAG_FOOTNOTES; m_parser->enter_block = []( MD_BLOCKTYPE type, void* detail, void* ud ) -> int { return ((MarkdownContext*)ud)->EnterBlock( type, detail ); }; m_parser->leave_block = []( MD_BLOCKTYPE type, void* detail, void* ud ) -> int { return ((MarkdownContext*)ud)->LeaveBlock( type, detail ); }; m_parser->enter_span = []( MD_SPANTYPE type, void* detail, void* ud ) -> int { return ((MarkdownContext*)ud)->EnterSpan( type, detail ); };