flags property
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)],
),
);
}