flags property

  1. @override
NatrixBlock get flags
override

flags is a section that lists applicable NatrixFlags.

Implementation

@override
NatrixBlock get flags {
  final List<NatrixFlag> flags = [];
  final Iterable<String> identifier = context.globalFlags.map((e) => e.id);
  for (final NatrixFlag flag in context.parserOutput.flags) {
    if (identifier.contains(flag.id)) {
      continue;
    }
    flags.add(flag);
  }
  if (flags.isEmpty) {
    return NatrixBlock.empty();
  }
  final List<NatrixText> lines = [];
  final List<NatrixFlag> sortable = List.of(flags);
  sortable.sort((a, b) => b.id.length.compareTo(a.id.length));
  const int space = 3;
  final int longestLength = sortable.first.id.length + 6;
  flags.sort(
    (a, b) => a.hasAcronym != b.hasAcronym
        ? a.hasAcronym
              ? -1
              : 1
        : 0,
  );
  for (final NatrixFlag flag in flags) {
    String current = "";
    if (flag.hasAcronym) {
      current += "-${flag.acronym!.c}, ";
    } else {
      current += " " * 4;
    }
    current += "--${flag.id}";
    current += " " * (longestLength - current.length + space);
    final List<NatrixText> tips = NatrixText(
      flag.tooltip,
    ).wrap(maxLineLength - current.length);
    for (int i = 0; i < tips.length; i++) {
      if (i == 0) {
        lines.add(NatrixText(current + tips[i].text));
        continue;
      }
      lines.add(NatrixText(" " * current.length + tips[i].text));
    }
  }
  return NatrixBlock(
    heading: NatrixText("Flags:", style: NatrixStyle.bold),
    content: NatrixStructure(
      spacePrefix: 1,
      sections: [NatrixColumn(lines: lines)],
    ),
  );
}