someTag function

Parser<Tag> someTag(
  1. String name, {
  2. Parser? start,
  3. Parser? end,
  4. Parser? content,
  5. Parser? filters,
  6. bool hasContent = true,
})

Implementation

Parser<Tag> someTag(
  String name, {
  Parser<dynamic>? start,
  Parser<dynamic>? end,
  Parser<dynamic>? content,
  Parser<dynamic>? filters,
  bool hasContent = true,
}) {
  var parser = ((start ?? tagStart()) & string(name).trim());

  if (hasContent) {
    parser =
        parser &
        (content ?? ref0(tagContent).optional()).trim() &
        (filters ?? ref0(filter).star()).trim();
  }

  parser = parser & (end ?? tagEnd());

  return parser
      .map((values) {
        if (!hasContent) {
          return Tag(name, []);
        }
        final tagContent = values[2] is List<ASTNode>
            ? values[2] as List<ASTNode>
            : [];
        final tagFilters = values[3] is List
            ? (values[3] as List).cast<Filter>()
            : <Filter>[];
        return Tag(name, tagContent.cast(), filters: tagFilters);
      })
      .labeled('someTag');
}