Add support for proper rendering of markdown footnotes.

This commit is contained in:
Bartosz Taudul
2026-06-05 19:09:49 +02:00
parent 715815374d
commit 3974cc8026
2 changed files with 23 additions and 2 deletions

View File

@@ -217,7 +217,7 @@ CPMAddPackage(
CPMAddPackage( CPMAddPackage(
NAME md4c NAME md4c
GITHUB_REPOSITORY mity/md4c GITHUB_REPOSITORY mity/md4c
GIT_TAG release-0.5.3 GIT_TAG 755ce49acdc7cd682d4502b4796db5ed6a1230fb
EXCLUDE_FROM_ALL TRUE EXCLUDE_FROM_ALL TRUE
) )

View File

@@ -140,6 +140,19 @@ public:
case MD_BLOCK_TD: case MD_BLOCK_TD:
ImGui::TableNextColumn(); ImGui::TableNextColumn();
break; 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: default:
break; break;
} }
@@ -216,6 +229,14 @@ public:
case MD_SPAN_DEL: case MD_SPAN_DEL:
strikethrough = true; strikethrough = true;
break; 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: default:
break; break;
} }
@@ -479,7 +500,7 @@ Markdown::Markdown( View* view, Worker* worker )
, m_worker( worker ) , m_worker( worker )
{ {
memset( m_parser, 0, sizeof( MD_PARSER ) ); 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->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->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 ); }; m_parser->enter_span = []( MD_SPANTYPE type, void* detail, void* ud ) -> int { return ((MarkdownContext*)ud)->EnterSpan( type, detail ); };