toMarkdown method

String toMarkdown({
  1. Map<String, MarkdownAlignment> alignment = const {},
  2. Iterable<String>? columns,
  3. Map<String, int> fixed = const {},
})

A conversion of this data frame to a markdown table.

Implementation

String toMarkdown({
  Map<String, MarkdownAlignment> alignment = const {},
  Iterable<String>? columns,
  Map<String, int> fixed = const {},
}) {
  columns = columns ?? [...numericColumns.keys, ...categoricColumns.keys];
  if (columns.any((column) =>
      !numericColumns.containsKey(column) &&
      !categoricColumns.containsKey(column))) {
    throw PackhorseError.badArgument("Bad column name in $columns.");
  }

  final table = toListOfMaps(),
      row = (Iterable<String> cells) => "|${cells.join("|")}|",
      sb = StringBuffer("\n")
        ..writeln("|${columns.join("|")}|")
        ..writeln(row(columns.map((key) => alignment.containsKey(key)
            ? alignment[key]!.mark
            : MarkdownAlignment.left.mark)));

  for (final r in table) {
    sb.writeln(row(columns.map((key) => r[key]!
        .replaceAll('"', "")
        .replaceAll("<", "&lt;")
        .replaceAll(">", "&gt;"))));
  }

  return sb.toString();
}