You are here

public function csl_names::render in Bibliography Module 7

Same name and namespace in other branches
  1. 6.2 modules/CiteProc/CSL.inc \csl_names::render()
  2. 7.2 modules/CiteProc/CSL.inc \csl_names::render()

Overrides csl_rendering_element::render

File

modules/CiteProc/CSL.inc, line 1047
CiteProc-PHP.

Class

csl_names

Code

public function render($data, $mode = NULL) {
  $matches = array();
  $variable_parts = array();
  if (!isset($this->delimiter)) {
    $style_delimiter = $this->citeproc->style->{'names-delimiter'};
    $mode_delimiter = $this->citeproc->{$mode}->{'names-delimiter'};
    $this->delimiter = isset($mode_delimiter) ? $mode_delimiter : (isset($style_delimiter) ? $style_delimiter : '');
  }
  $variables = explode(' ', $this->variable);
  foreach ($variables as $var) {
    if (!$var || in_array($var, $this->citeproc->quash)) {
      continue;
    }
    list($contributor, $category) = explode(':', $var);
    if (isset($data->{$contributor}) && !empty($data->{$contributor}) && $this
      ->_get_category($data->{$contributor}, $category)) {
      $matches[] = $var;
    }
  }

  // We don't have any primary suspects, so lets check the substitutes...
  if (empty($matches)) {
    if (isset($this->substitutes)) {
      foreach ($this->substitutes->elements as $element) {

        // Test to see if any of the other names variables has content.
        if ($element instanceof csl_names) {
          $sub_variables = explode(' ', $element->variable);
          foreach ($sub_variables as $var) {
            list($contributor, $category) = explode(':', $var);
            if (isset($data->{$contributor}) && !empty($data->{$contributor}) && $this
              ->_get_category($data->{$contributor}, $category)) {
              $matches[] = $var;
              $this->citeproc->quash[] = $var;
            }
          }
        }
        else {
          $text = $element
            ->render($data, $mode);
          $this->citeproc->quash[] = isset($element->variable) ? $element->variable : $element->var;
          if (!empty($text)) {
            $variable_parts[] = $text;
          }
        }
        if (!empty($matches)) {
          break;
        }
      }
    }
  }
  foreach ($matches as $var) {
    if (in_array($var, $this->citeproc->quash) && in_array($var, $variables)) {
      continue;
    }
    $text = '';
    list($contributor, $category) = explode(':', $var);
    if (!empty($contributor) && ($authors = $this
      ->_get_category($data->{$contributor}, $category))) {
      foreach ($this->elements as $element) {
        if (is_a($element, 'csl_label')) {
          $element->in_names = TRUE;
          $element->plural = count($authors) > 1 ? 'multiple' : 'single';
          $element->variable = $this
            ->_get_csl_name_variable($category);
          $text .= $element
            ->render($authors, $mode);
        }
        elseif (is_a($element, 'csl_name')) {
          $text .= $element
            ->render($authors, $mode);
        }
      }
    }
    if (!empty($text)) {
      $variable_parts[] = $text;
    }
  }
  if (!empty($variable_parts)) {
    $text = implode($this->delimiter, $variable_parts);
    return $this
      ->format($text);
  }
  return;
}