@@ -166,6 +166,40 @@ class MarkdownContext
166166 ImGui::TextUnformatted ( " . " );
167167 break ;
168168 }
169+ case MD_BLOCK_ADMONITION :
170+ {
171+ Separate ();
172+ ImGui::Indent ();
173+ origin = ImGui::GetCursorScreenPos ();
174+ auto admonition = ((MD_BLOCK_ADMONITION_DETAIL *)detail);
175+ switch ( admonition->type .text [0 ] )
176+ {
177+ case ' n' : // note
178+ color = 0xFFEB6F1F ;
179+ TextColoredUnformatted ( color, ICON_FA_CIRCLE_INFO " " );
180+ break ;
181+ case ' t' : // tip
182+ color = 0xFF368623 ;
183+ TextColoredUnformatted ( color, ICON_FA_LIGHTBULB " " );
184+ break ;
185+ case ' i' : // important
186+ color = 0xFFE55789 ;
187+ TextColoredUnformatted ( color, ICON_FA_MESSAGE " " );
188+ break ;
189+ case ' w' : // warning
190+ color = 0xFF036A9E ;
191+ TextColoredUnformatted ( color, ICON_FA_TRIANGLE_EXCLAMATION " " );
192+ break ;
193+ case ' c' : // caution
194+ color = 0xFF3336DA ;
195+ TextColoredUnformatted ( color, ICON_FA_HAND " " );
196+ break ;
197+ default :
198+ assert ( false );
199+ }
200+ Glue ();
201+ break ;
202+ }
169203 default :
170204 break ;
171205 }
@@ -223,6 +257,15 @@ class MarkdownContext
223257 case MD_BLOCK_FOOTNOTE_DEF :
224258 ImGui::PopFont ();
225259 break ;
260+ case MD_BLOCK_ADMONITION :
261+ {
262+ const auto scale = GetScale ();
263+ const auto pos = ImGui::GetCursorScreenPos ();
264+ const auto offset = ImVec2 ( 8 .f * scale, 0 );
265+ ImGui::Unindent ();
266+ ImGui::GetWindowDrawList ()->AddLine ( origin - offset, pos - offset, color, 2 .f * scale );
267+ break ;
268+ }
226269 default :
227270 break ;
228271 }
@@ -493,6 +536,9 @@ class MarkdownContext
493536
494537 int idx = 0 ;
495538
539+ uint32_t color;
540+ ImVec2 origin;
541+
496542 std::vector<List> lists;
497543 std::string link;
498544
@@ -507,7 +553,7 @@ Markdown::Markdown( View* view, Worker* worker )
507553 , m_worker( worker )
508554{
509555 memset ( m_parser, 0 , sizeof ( MD_PARSER ) );
510- m_parser->flags = MD_FLAG_COLLAPSEWHITESPACE | MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_NOHTML | MD_FLAG_TABLES | MD_FLAG_TASKLISTS | MD_FLAG_STRIKETHROUGH | MD_FLAG_FOOTNOTES ;
556+ m_parser->flags = MD_FLAG_COLLAPSEWHITESPACE | MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_NOHTML | MD_FLAG_TABLES | MD_FLAG_TASKLISTS | MD_FLAG_STRIKETHROUGH | MD_FLAG_FOOTNOTES | MD_FLAG_ADMONITIONS ;
511557 m_parser->enter_block = []( MD_BLOCKTYPE type, void * detail, void * ud ) -> int { return ((MarkdownContext*)ud)->EnterBlock ( type, detail ); };
512558 m_parser->leave_block = []( MD_BLOCKTYPE type, void * detail, void * ud ) -> int { return ((MarkdownContext*)ud)->LeaveBlock ( type, detail ); };
513559 m_parser->enter_span = []( MD_SPANTYPE type, void * detail, void * ud ) -> int { return ((MarkdownContext*)ud)->EnterSpan ( type, detail ); };
0 commit comments