toMarkdown method
A readable Markdown summary of every note, highlight and bookmark.
Implementation
String toMarkdown({String title = "", String Function(int pageIndex)? pageLabel}) {
final String Function(int pageIndex) label = pageLabel ?? (int page) => "${U.s.page} ${page + 1}";
final StringBuffer buffer = StringBuffer();
if (title.isNotEmpty) buffer.writeln("# $title\n");
if (_bookmarks.isNotEmpty) {
buffer.writeln("## ${U.s.bookmarks}\n");
for (final UDocBookmark bookmark in _bookmarks) {
buffer.writeln("- ${label(bookmark.pageIndex)}${bookmark.title.isEmpty ? "" : " — ${bookmark.title}"}${bookmark.note.isEmpty ? "" : ": ${bookmark.note}"}");
}
buffer.writeln();
}
if (_markups.isNotEmpty) {
buffer.writeln("## ${U.s.annotations}\n");
for (final List<UDocMarkup> entries in grouped) {
final UDocMarkup first = entries.first;
final String quote = entries.map((UDocMarkup markup) => markup.text.trim()).where((String text) => text.isNotEmpty).join(" ");
buffer.writeln("- **${label(first.pageIndex)}** · ${UDocPalette.labelOf(first.kind)}");
if (quote.isNotEmpty) buffer.writeln(" > $quote");
if (first.hasNote) buffer.writeln(" ${first.note}");
}
}
final List<UDocShape> written = _shapes.where((UDocShape shape) => shape.hasText).toList()
..sort((UDocShape a, UDocShape b) => a.pageIndex != b.pageIndex ? a.pageIndex.compareTo(b.pageIndex) : a.bounds.top.compareTo(b.bounds.top));
if (written.isNotEmpty) {
buffer.writeln("\n## ${U.s.drawings}\n");
for (final UDocShape shape in written) {
buffer.writeln("- **${label(shape.pageIndex)}** · ${shape.text.trim()}");
}
}
return buffer.toString().trimRight();
}