public function csl_names::render in Bibliography Module 7
Same name and namespace in other branches
- 6.2 modules/CiteProc/CSL.inc \csl_names::render()
- 7.2 modules/CiteProc/CSL.inc \csl_names::render()
Overrides csl_rendering_element::render
File
- modules/
CiteProc/ CSL.inc, line 1047 - CiteProc-PHP.
Class
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;
}