RichTextNode constructor

RichTextNode({
  1. required String path,
  2. required String raw,
  3. required String? comment,
  4. required StringInterpolation interpolation,
  5. required CaseStyle? paramCase,
  6. Map<String, Set<String>>? linkParamMap,
})

Implementation

RichTextNode({
  required super.path,
  required super.raw,
  required super.comment,
  required super.interpolation,
  required super.paramCase,
  Map<String, Set<String>>? linkParamMap,
}) {
  final rawParsedResult = _parseInterpolation(
    raw: _escapeContent(raw, interpolation),
    interpolation: interpolation,
    paramCase: null, // param case will be applied later
  );

  final parsedParams = rawParsedResult.params
      .map((p) => _parseParamWithArg(input: p, paramCase: paramCase))
      .toList();
  _params = parsedParams.map((e) => e.paramName).toSet();
  if (linkParamMap != null) {
    _params.addAll(linkParamMap.values.expand((e) => e));
  }

  _paramTypeMap = {
    for (final p in parsedParams)
      p.paramName: (p.arg != null ? 'InlineSpanBuilder' : 'InlineSpan'),
  };

  _links = {};
  _spans = _splitWithMatchAndNonMatch(
    rawParsedResult.parsedContent,
    RegexUtils.argumentsDartRegex,
    onNonMatch: (text) {
      final parsedLinksResult = _parseLinks(
        input: text,
        linkParamMap: linkParamMap,
      );
      _links.addAll(parsedLinksResult.links);
      return LiteralSpan(
        literal: parsedLinksResult.parsedContent,
        isConstant: parsedLinksResult.links.isEmpty,
      );
    },
    onMatch: (match) {
      final parsed = _parseParamWithArg(
        input: (match.group(1) ?? match.group(2))!,
        paramCase: paramCase,
      );
      final parsedArg = parsed.arg;
      if (parsedArg != null) return FunctionSpan(parsed.paramName, parsedArg);
      return VariableSpan(parsed.paramName);
    },
  ).toList();
}