getColorizedText method

String getColorizedText(
  1. String text,
  2. String filePath,
  3. String fileExtension,
  4. String style,
)

Get text with colorized syntax highlighting

Implementation

String getColorizedText(
    String text, String filePath, String fileExtension, String style) {
  // Create map for color prefixes based on token types
  Map<int, String> colorPrefixes = {
    0: "", // None
    1: "°", // ShortComment (gray)
    2: "°", // LongComment (gray)
    3: "²", // String (red)
    4: "²", // Number (red)
    5: "²", // Constant (red)
    6: "²", // Type (red)
    7: "¹", // Keyword (pink)
    8: "²", // Pragma (red)
    9: "", // LowerCaseIdentifier
    10: "⁰", // UpperCaseIdentifier (orange)
    11: "", // MinorCaseIdentifier
    12: "", // MajorCaseIdentifier
    13: "²", // Identifier (red)
    14: "°", // Operator (gray)
    15: "°", // Separator (gray)
    16: "°", // Delimiter (gray)
    17: "°", // Special (gray)
    18: "", // Spacing
  };

  // Parse and tokenize code
  List<CodeToken> codeTokens = _getCodeTokens(text, fileExtension);

  // Apply color markers
  String colorizedText = ":::$style\n";

  for (int i = 0; i < codeTokens.length; i++) {
    CodeToken token = codeTokens[i];
    int tokenType = token.type.index;

    // Add color prefix if needed
    if (i == 0 ||
        colorPrefixes[tokenType] !=
            colorPrefixes[codeTokens[i - 1].type.index]) {
      colorizedText += colorPrefixes[tokenType] ?? "";
    }

    // Add token text
    colorizedText += token.text;

    // Add color suffix if needed
    if (i == codeTokens.length - 1 ||
        colorPrefixes[tokenType] !=
            colorPrefixes[codeTokens[i + 1].type.index]) {
      colorizedText += colorPrefixes[tokenType] ?? "";
    }
  }

  colorizedText += ":::\n";
  return colorizedText;
}