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