14#include <reloco/type_id.hpp>
36template <
typename Callable>
37writer &
details(writer &w, microfmt::string_view summary, Callable &&body,
bool open =
false) noexcept;
45 explicit constexpr writer(
const sink &out) noexcept : m_sink(out) {}
67 for (
size_t i = 0; i < count; ++i) {
73 template <
typename... Args>
writer &
print(microfmt::string_view
fmt,
const Args &...args) &
noexcept {
78 template <
typename... Args>
writer &
println(microfmt::string_view
fmt,
const Args &...args) &
noexcept {
88 template <
typename... Args>
89 writer &
heading(uint8_t level, microfmt::string_view
fmt,
const Args &...args) &
noexcept {
90 const uint8_t clamped = std::clamp<uint8_t>(level, 1, 6);
118 template <
typename Callable>
writer &
code_block(microfmt::string_view lang, Callable &&body) &
noexcept {
119 code_block_begin(lang);
121 return code_block_end();
128 template <
typename... Args>
writer &
blockquote(microfmt::string_view
fmt,
const Args &...args) &
noexcept {
134 template <
typename... Args>
writer &
list_item(microfmt::string_view
fmt,
const Args &...args) &
noexcept {
140 template <
typename... Args>
157 for (
const auto &col : cols) {
159 const size_t width = std::max(col.min_width, col.title.size());
161 pad(
' ', width - col.title.size());
168 for (
const auto &col : cols) {
170 const size_t width = std::max(col.min_width, col.title.size());
171 switch (col.alignment) {
174 pad(
'-', width >= 2 ? width - 2 : 1);
178 pad(
'-', width >= 1 ? width - 1 : 1);
184 pad(
'-', width >= 1 ? width - 1 : 1);
199 const size_t width = std::max(col.min_width, col.title.size());
200 const size_t len = content.size();
205 const size_t pad_total = width - len;
206 switch (col.alignment) {
212 const size_t left = pad_total / 2;
230 template <
size_t ScratchSize = 128,
typename... Args>
234 return table_cell(scratch.
view(), col);
239 [[nodiscard]]
constexpr sink get_sink() const & noexcept RELOCO_LIFETIMEBOUND {
return m_sink; }
243 template <typename... Args>
245 write(checked ?
"- [x] " :
"- [ ] ");
250 template <
typename... Args>
252 pad(
' ',
static_cast<size_t>(indent_level) * 2);
261 write(
"> [!NOTE]\n");
267 write(
"> [!IMPORTANT]\n");
270 write(
"> [!WARNING]\n");
273 write(
"> [!CAUTION]\n");
281 template <
typename... Args>
307 microfmt::string_view
url;
310 microfmt::string_view
alt;
311 microfmt::string_view
url;
314[[nodiscard]]
constexpr bold_view bold(microfmt::string_view s)
noexcept {
return {s}; }
317[[nodiscard]]
constexpr code_view code(microfmt::string_view s)
noexcept {
return {s}; }
318[[nodiscard]]
constexpr link_view link(microfmt::string_view label, microfmt::string_view url)
noexcept {
321[[nodiscard]]
constexpr image_view image(microfmt::string_view alt, microfmt::string_view url)
noexcept {
393 explicit details_guard(
writer &w RELOCO_LIFETIMEBOUND, microfmt::string_view summary,
bool open =
false) noexcept;
401 writer *m_writer{
nullptr};
410 m_writer->
write(
"<details open>\n<summary>");
412 m_writer->
write(
"<details>\n<summary>");
414 m_writer->
write(summary);
415 m_writer->
write(
"</summary>\n\n");
419 if (m_writer !=
nullptr) {
420 m_writer->
write(
"\n</details>\n\n");
424template <
typename Callable>
433 table_writer(
writer &w RELOCO_LIFETIMEBOUND, span<const column> cols) noexcept : m_writer(w), m_cols(cols) {
434 m_writer.table_header(m_cols);
438 m_writer.table_row_begin();
440 auto format_cell = [
this, &col_idx](
const auto &cell) {
441 if constexpr (std::is_convertible_v<
decltype(cell), microfmt::string_view>) {
442 m_writer.table_cell(
static_cast<microfmt::string_view
>(cell), m_cols[col_idx++]);
444 m_writer.table_cell_fmt(m_cols[col_idx++],
"{}", cell);
447 (format_cell(cells), ...);
448 m_writer.table_row_end();
454 span<const column> m_cols;
Output sink that stores formatted characters in an internal fixed-size stack/inline buffer.
Definition microfmt.hpp:185
constexpr microfmt::string_view view() const &noexcept RELOCO_LIFETIMEBOUND
Returns a string view over the characters written so far.
Definition microfmt.hpp:245
RELOCO_END_UNSAFE_BUFFER_USAGE RELOCO_CONSTEXPR20 sink as_sink() &noexcept RELOCO_LIFETIMEBOUND
Creates a type-erased sink adapter pointing to this instance.
Definition microfmt.hpp:236
Definition microfmt.hpp:881
Definition markdown.hpp:391
~details_guard() noexcept
Definition markdown.hpp:418
details_guard(writer &w RELOCO_LIFETIMEBOUND, microfmt::string_view summary, bool open=false) noexcept
Definition markdown.hpp:431
table_writer(writer &w RELOCO_LIFETIMEBOUND, span< const column > cols) noexcept
Definition markdown.hpp:433
table_writer & row(const Cells &...cells) &noexcept
Definition markdown.hpp:437
Definition markdown.hpp:43
writer & code_block_begin(microfmt::string_view lang="") &noexcept
Definition markdown.hpp:108
constexpr sink get_sink() const &noexcept RELOCO_LIFETIMEBOUND
Definition markdown.hpp:239
writer & numbered_item(size_t index, microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:141
writer & heading(uint8_t level, microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:89
writer & alert(admonition type, Callable &&body) &noexcept
Definition markdown.hpp:258
writer & code_block_end() &noexcept
Definition markdown.hpp:116
writer & nested_list_item(uint8_t indent_level, microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:251
writer & put(char c) &noexcept
Definition markdown.hpp:56
writer & table_cell(microfmt::string_view content, const column &col) &noexcept
Definition markdown.hpp:197
writer & pad(char c, size_t count) &noexcept
Definition markdown.hpp:66
writer & write(microfmt::string_view sv) &noexcept
Definition markdown.hpp:51
writer & table_cell_fmt(const column &col, microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:231
constexpr writer(const sink &out) noexcept
Definition markdown.hpp:45
writer & newline() &noexcept
Definition markdown.hpp:61
writer & table_header(span< const column > cols) &noexcept
Definition markdown.hpp:151
writer & h3(microfmt::string_view title) &noexcept
Definition markdown.hpp:99
writer & table_row_end() &noexcept
Definition markdown.hpp:237
writer & blockquote(microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:128
writer & h2(microfmt::string_view title) &noexcept
Definition markdown.hpp:98
writer & horizontal_rule() &noexcept
Definition markdown.hpp:102
writer & list_item(microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:134
writer & code_block(microfmt::string_view lang, Callable &&body) &noexcept
Definition markdown.hpp:118
writer & h1(microfmt::string_view title) &noexcept
Definition markdown.hpp:97
constexpr sink get_sink() const &&=delete
writer & hexdump_block(microfmt::string_view summary, span< const uint8_t > data) &noexcept
Definition markdown.hpp:282
writer & println(microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:78
writer & h4(microfmt::string_view title) &noexcept
Definition markdown.hpp:100
writer & print(microfmt::string_view fmt, const Args &...args) &noexcept
Definition markdown.hpp:73
writer & table_row_begin() &noexcept
Definition markdown.hpp:192
#define MICROFMT_API_CLASS
Definition compat.hpp:181
Direct and fault-checked memory hex-dump views.
Core formatting primitives, sinks, and customization point.
Definition metadata_map.hpp:116
constexpr italic_view italic(microfmt::string_view s) noexcept
Definition markdown.hpp:315
constexpr bold_view bold(microfmt::string_view s) noexcept
Definition markdown.hpp:314
constexpr image_view image(microfmt::string_view alt, microfmt::string_view url) noexcept
Definition markdown.hpp:321
writer & details(writer &w, microfmt::string_view summary, Callable &&body, bool open=false) noexcept
Definition markdown.hpp:425
constexpr code_view code(microfmt::string_view s) noexcept
Definition markdown.hpp:317
constexpr strike_view strike(microfmt::string_view s) noexcept
Definition markdown.hpp:316
constexpr link_view link(microfmt::string_view label, microfmt::string_view url) noexcept
Definition markdown.hpp:318
admonition
Definition markdown.hpp:32
align
Definition markdown.hpp:24
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
RELOCO_CONSTEXPR20 void format_to(const sink &out, microfmt::string_view fmt, const Args &...args) noexcept
Definition microfmt.hpp:1766
constexpr styled_str_view pad(microfmt::string_view s, size_t width, text_align a=text_align::left, char fill=' ') noexcept
Definition styled.hpp:58
constexpr hexdump_view hexdump(span< const uint8_t > data, uintptr_t base_addr=0, uint8_t bytes_per_line=16, bool show_ascii=true) noexcept
Helper for dumping safe, direct in-memory buffers (zero overhead).
Definition hexdump.hpp:52
RELOCO_TYPE_ID_NAME(microfmt::semver, "microfmt::semver")
Definition markdown.hpp:293
microfmt::string_view text
Definition markdown.hpp:294
Definition markdown.hpp:302
microfmt::string_view text
Definition markdown.hpp:303
Definition markdown.hpp:26
Definition markdown.hpp:309
microfmt::string_view alt
Definition markdown.hpp:310
microfmt::string_view url
Definition markdown.hpp:311
Definition markdown.hpp:296
microfmt::string_view text
Definition markdown.hpp:297
Definition markdown.hpp:305
microfmt::string_view label
Definition markdown.hpp:306
microfmt::string_view url
Definition markdown.hpp:307
Definition markdown.hpp:299
microfmt::string_view text
Definition markdown.hpp:300