toMd method
String
toMd({
- KeyValueBuilderDef? titleBuilder,
- KeyValueBuilderDef? listItemBuilder,
- int headingLevel = 1,
- bool metaDataToFrontMatter = true,
- String emojiKey = TSDefaults.emojiKey,
- String frontMatterKey = TSDefaults.metaDataKey,
- String nameKey = TSDefaults.nameKey,
- String descriptionKey = TSDefaults.descriptionKey,
- String valueKey = TSDefaults.valueKey,
- String valuesKey = TSDefaults.valuesKey,
- String itemsKey = TSDefaults.itemsKey,
Implementation
String toMd({
KeyValueBuilderDef? titleBuilder,
KeyValueBuilderDef? listItemBuilder,
int headingLevel = 1,
bool metaDataToFrontMatter = true,
String emojiKey = TSDefaults.emojiKey,
String frontMatterKey = TSDefaults.metaDataKey,
String nameKey = TSDefaults.nameKey,
String descriptionKey = TSDefaults.descriptionKey,
String valueKey = TSDefaults.valueKey,
String valuesKey = TSDefaults.valuesKey,
String itemsKey = TSDefaults.itemsKey,
}) {
final buffer = StringBuffer();
if (metaDataToFrontMatter && headingLevel == 1) {
final frontMatter = this[frontMatterKey];
if (frontMatter is Map && frontMatter.isNotEmpty) {
buffer.writeln('---');
buffer.write(frontMatter.toYaml());
buffer.writeln('---');
buffer.writeln();
}
remove(frontMatterKey);
}
final headingPrefix = '#' * headingLevel;
for (final entry in entries) {
final key = entry.key.toString();
final value = entry.value;
if (value is Map) {
final title = _mdTitle(
emojiKey: emojiKey,
nameKey: nameKey,
map: value,
);
buffer.writeln('$headingPrefix $title');
buffer.writeln();
final remaining = Map.of(value)
..remove(nameKey)
..remove(emojiKey);
_writeWellKnownBody(
buffer: buffer,
remaining: remaining,
descriptionKey: descriptionKey,
valueKey: valueKey,
valuesKey: valuesKey,
itemsKey: itemsKey,
listItemBuilder: listItemBuilder,
);
if (remaining.isNotEmpty) {
buffer.write(
remaining.toMd(
titleBuilder: titleBuilder,
listItemBuilder: listItemBuilder,
headingLevel: headingLevel + 1,
metaDataToFrontMatter: metaDataToFrontMatter,
emojiKey: emojiKey,
frontMatterKey: frontMatterKey,
nameKey: nameKey,
descriptionKey: descriptionKey,
valueKey: valueKey,
valuesKey: valuesKey,
itemsKey: itemsKey,
),
);
}
} else if (value is List) {
buffer.writeln('$headingPrefix ${key.toTitleCase()}');
buffer.writeln();
for (final item in value) {
if (item is Map) {
buffer.write(
item.toMd(
titleBuilder: titleBuilder,
listItemBuilder: listItemBuilder,
headingLevel: headingLevel + 1,
metaDataToFrontMatter: metaDataToFrontMatter,
emojiKey: emojiKey,
frontMatterKey: frontMatterKey,
nameKey: nameKey,
descriptionKey: descriptionKey,
valueKey: valueKey,
valuesKey: valuesKey,
itemsKey: itemsKey,
),
);
} else {
buffer.writeln(listItemBuilder?.call(key, item) ?? '- $item');
}
}
buffer.writeln();
} else if (value == null) {
buffer.writeln('$headingPrefix ${key.toTitleCase()}');
buffer.writeln();
} else {
buffer.writeln('$headingPrefix ${key.toTitleCase()}');
buffer.writeln();
buffer.writeln(value);
buffer.writeln();
}
}
return buffer.toString();
}