RichTextNode constructor

RichTextNode({
  1. required String path,
  2. required String? comment,
  3. required String raw,
  4. required StringInterpolation interpolation,
  5. required CaseStyle? paramCase,
})

Implementation

factory RichTextNode({
  required String path,
  required String? comment,
  required String raw,
  required StringInterpolation interpolation,
  required CaseStyle? paramCase,
}) {
  final escapedContent = _escapeContent(raw, interpolation);
  final rawParsedResult =
      _parseInterpolation(escapedContent, interpolation, paramCase);

  final parsedParams =
      rawParsedResult.params.map(_parseParamWithArg).toList();
  final params = parsedParams.map((e) => e.paramName).toSet();
  final paramTypeMap = Map.fromEntries(parsedParams.map((e) => MapEntry(
      e.paramName, e.arg != null ? 'InlineSpanBuilder' : 'InlineSpan')));

  final spans = _splitWithMatchAndNonMatch(
    rawParsedResult.parsedContent,
    RegexUtils.argumentsDartRegex,
    onNonMatch: (text) => LiteralSpan(text),
    onMatch: (match) {
      final parsed = _parseParamWithArg((match.group(3) ?? match.group(4))!);
      final parsedArg = parsed.arg;
      if (parsedArg != null) return FunctionSpan(parsed.paramName, parsedArg);
      return VariableSpan(parsed.paramName);
    },
  ).toList();

  return RichTextNode._(
    path: path,
    comment: comment,
    raw: raw,
    spans: spans,
    params: params,
    paramTypeMap: paramTypeMap,
  );
}