toMarkdown method

String toMarkdown({
  1. String title = "",
  2. String pageLabel(
    1. int pageIndex
    )?,
})

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();
}