import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaCodeBlock } from '../../vega-code-block';
import { CodeNodeType } from '../../types';
import { Nullable } from '../../../../types/general';
/**
 * Processing the code content into different types of nodes.
 */
export declare abstract class CodeHighlightParser extends VegaSlimmer {
  protected value: VegaCodeBlock['value'];
  /**
   * Split the HTML tag to avoid the content render to a html element.
   *
   * @example <div> -> ['<', 'div', '>']
   * @param {string} text - The code content.
   * @returns {string[]} - The code content array.
   */
  protected splitTag(text: string): string[];
  /**
   * Check the current language is a preset language and the language is not plain text.
   *
   * @param {Nullable<string>} language - The input language.
   * @returns {boolean} - The boolean result.
   */
  protected isHighlightLanguage(language: Nullable<string>): boolean;
  /**
   * Mark the line number class for the first node of each line.
   *
   * @param {CodeNodeType[]} codeNodes - The code nodes array.
   * @returns {CodeNodeType[]} - The code node array with line number tag.
   */
  protected markLineNumberNodes(codeNodes: CodeNodeType[]): CodeNodeType[];
  /**
   * Check the text has special character.
   *
   * @param {string} text - The test text.
   * @returns {boolean} - Return true is the text has <, > , /.
   */
  private hasSpecialCharacter;
  /**
   * Check the current parser should handle or not.
   */
  abstract canParse(): boolean;
  /**
   * The core function to get the code node array.
   */
  abstract parse(): CodeNodeType[];
}
