function csl_group::render in Bibliography Module 7.2
Same name and namespace in other branches
- 6.2 modules/CiteProc/CSL.inc \csl_group::render()
- 7 modules/CiteProc/CSL.inc \csl_group::render()
Overrides csl_rendering_element::render
File
- modules/
CiteProc/ CSL.inc, line 1211
Class
Code
function render($data, $mode = NULL) {
$text = '';
$text_parts = array();
$terms = $variables = $have_variables = $element_count = 0;
foreach ($this->elements as $element) {
$element_count++;
if ($element instanceof csl_text && ($element->source == 'term' || $element->source == 'value')) {
$terms++;
}
if ($element instanceof csl_label) {
$terms++;
}
if ($element->source == 'variable' && isset($element->variable) && !empty($data->{$element->variable})) {
$variables++;
}
$text = $element
->render($data, $mode);
$delimiter = $this->delimiter;
if (!empty($text)) {
if ($delimiter && $element_count < count($this->elements)) {
//check to see if the delimiter is already the last character of the text string
//if so, remove it so we don't have two of them when we paste together the group
$stext = strip_tags(trim($text));
if (strrpos($stext, $delimiter[0]) + 1 == drupal_strlen($stext)) {
$text = str_replace($stext, '----REPLACE----', $text);
$stext = drupal_substr($stext, 0, -1);
$text = str_replace('----REPLACE----', $stext, $text);
}
}
$text_parts[] = $text;
if ($element->source == 'variable' || isset($element->variable)) {
$have_variables++;
}
if ($element->source == 'macro') {
$have_variables++;
}
}
}
if (empty($text_parts)) {
return;
}
if ($variables && !$have_variables) {
return;
}
// there has to be at least one other none empty value before the term is output
if (count($text_parts) == $terms) {
return;
}
// there has to be at least one other none empty value before the term is output
$delimiter = $this->delimiter;
$text = implode($delimiter, $text_parts);
// insert the delimiter if supplied.
return $this
->format($text);
}