You are here

protected function GeshiFilterFilter::replaceCallback in GeSHi Filter for syntax highlighting 8.2

Same name and namespace in other branches
  1. 8 src/Plugin/Filter/GeshiFilterFilter.php \Drupal\geshifilter\Plugin\Filter\GeshiFilterFilter::replaceCallback()

Callback for preg_replace_callback.

Old: _geshifilter_replace_callback($match, $format).

Parameters

array $match: Elements from array:

  • 0: complete matched string.
  • 1: tag name.
  • 2: tag attributes.
  • 3: tag content.

Return value

string Return the string processed by geshi library.

File

src/Plugin/Filter/GeshiFilterFilter.php, line 700

Class

GeshiFilterFilter
Provides a base filter for Geshi Filter.

Namespace

Drupal\geshifilter\Plugin\Filter

Code

protected function replaceCallback(array $match) {
  $complete_match = $match[0];
  $tag_name = $match[1];
  $tag_attributes = $match[2];
  $source_code = $match[3];

  // Undo linebreak and escaping from preparation phase.
  $source_code = Html::decodeEntities($source_code);

  // Initialize to default settings.
  $lang = $this->config
    ->get('default_highlighting');
  $line_numbering = $this->config
    ->get('default_line_numbering');
  $linenumbers_start = 1;
  $title = NULL;

  // Determine language based on tag name if possible.
  list($generic_code_tags, $language_tags, $tag_to_lang) = $this
    ->getTags();
  if (in_array(GeshiFilter::BRACKETS_PHPBLOCK, array_filter($this
    ->tagStyles()))) {
    $language_tags[] = 'questionmarkphp';
    $tag_to_lang['questionmarkphp'] = 'php';
  }
  if (isset($tag_to_lang[$tag_name])) {
    $lang = $tag_to_lang[$tag_name];
  }

  // Get additional settings from the tag attributes.
  $settings = $this
    ->parseAttributes($tag_attributes);
  if (isset($settings['language'])) {
    $lang = $settings['language'];
  }
  if (isset($settings['line_numbering'])) {
    $line_numbering = $settings['line_numbering'];
  }
  if (isset($settings['linenumbers_start'])) {
    $linenumbers_start = $settings['linenumbers_start'];
  }
  if (isset($settings['title'])) {
    $title = $settings['title'];
  }
  if (isset($settings['special_lines'])) {
    $special_lines = $settings['special_lines'];
  }
  if ($lang == GeshiFilter::DEFAULT_DONOTHING) {

    // Do nothing, and return the original.
    return $complete_match;
  }
  if ($lang == GeshiFilter::DEFAULT_PLAINTEXT) {

    // Use plain text 'highlighting'.
    $lang = 'text';
  }
  $inline_mode = strpos($source_code, "\n") === FALSE;

  // Process and return.
  return GeshiFilterProcess::processSourceCode($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $title, $special_lines);
}