/** * Apply the formatting options on a date/date-part element. * * @param string $value * @return string */ protected function format($value) { $value = $this->formatting->render($value); $value = $this->textCase->render($value); // Attributes for affixes are allowed, unless cs:date calls a localized date format if (Container::getContext()->get('form', 'date') !== '') { return $value; } return $this->affix->render($value); }
/** * Renders the name part. * * @param array $data * @return string */ public function render($data) { $isInverted = $this->isInverted($data); if ($this->name == 'given') { if (isset($data['given']) == true) { $data['given'] = $this->formating->render($data['given']); $data['given'] = $this->textCase->render($data['given']); } if (isset($data['dropping-particle']) == true) { $data['dropping-particle'] = $this->formating->render($data['dropping-particle']); $data['dropping-particle'] = $this->textCase->render($data['dropping-particle']); } // Affixes surround the "given" name-part, enclosing any demoted name particles for inverted names. $return = array(); $found = false; foreach ($data as $name => $value) { if ($name == 'given') { $return[] = $value; $found = true; } elseif ($found == true && $isInverted == true && ($name == 'non-dropping-particle' || $name == 'dropping-particle')) { $return[] = $value; } } return $this->affix->render(implode(' ', $return)); } else { if (isset($data['family']) == true) { $data['family'] = $this->formating->render($data['family']); $data['family'] = $this->textCase->render($data['family']); } if (isset($data['non-dropping-particle']) == true) { $data['non-dropping-particle'] = $this->formating->render($data['non-dropping-particle']); $data['non-dropping-particle'] = $this->textCase->render($data['non-dropping-particle']); } // Affixes surround the "family" name-part, enclosing any preceding name particles, as well as // the "suffix" name-part for non-inverted names. $return = array(); $found = false; foreach ($data as $name => $value) { if ($found == false && $isInverted == false && ($name == 'non-dropping-particle' || $name == 'dropping-particle')) { $return[] = $value; } elseif ($found == true && $isInverted == false && $name == 'suffix') { $return[] = $value; } elseif ($name == 'family') { $return[] = $value; $found = true; } } return $this->affix->render(implode(' ', $return)); } }
/** * . * * @param string|array $data * @return string|array */ public function render($data) { $variable = Container::getData()->getVariable($this->variable); $isNumeric = new IsNumeric($this->variable); if ($isNumeric->validate() == true) { $variable = $this->formatDelimiter($variable); switch ($this->form) { case 'numeric': $return = $variable; break; case 'ordinal': $return = Ordinal::render($variable); break; case 'long-ordinal': $return = Ordinal::renderLong($variable); break; case 'roman': if (preg_match('/[A-z]/', $variable) == 0) { $return = $this->calcRoman($variable); } else { $return = $variable; } break; } $return = $this->affix->render($return); $return = $this->display->render($return); $return = $this->formating->render($return); return $this->textCase->render($return); } return $variable; }
/** * @covers Geissler\CSL\Rendering\TextCase::modify * @covers Geissler\CSL\Rendering\TextCase::render */ public function testRenderModified() { $locale = Factory::locale(); $locale->readFile('de'); Container::setLocale($locale); $this->initElement('<text variable="title" text-case="sentence"/>'); $xml = '<text variable="title" text-case="uppercase"/>'; $this->assertInstanceOf('\\Geissler\\CSL\\Rendering\\TextCase', $this->object->modify(new \SimpleXMLElement($xml))); $this->assertEquals('THIS IS A PEN THAT IS A SMITH PENCIL', $this->object->render('this is a Pen that is a Smith Pencil')); }
/** * Renders the label. * * @param string|array $data * @return string * @throws \ErrorException If the variable parameter is not set */ public function render($data) { if (isset($this->variable) == false) { throw new \ErrorException('variable is not set!'); } $content = Container::getData()->getVariable($this->variable); $variable = $this->variable; if ($this->variable == 'locator') { // Must be accompanied in the input data by a label indicating the locator type, which determines which // term is rendered by cs:label when the "locator" variable is selected if (is_object(Container::getCitationItem()) == true && Container::getCitationItem()->get('label') !== null) { $variable = Container::getCitationItem()->get('label'); $content = Container::getCitationItem()->get('locator'); } else { return ''; } } // The term is only rendered if the selected variable is non-empty. if ($content == '' && $variable !== 'editortranslator') { return ''; } $plural = 'single'; switch ($this->plural) { case 'contextual': if (is_array($content) == true) { if (count($content) > 1) { $plural = 'multiple'; } } elseif (($this->variable == 'number-of-pages' || $this->variable == 'number-of-volumes') && preg_match_all('/([0-9])/', $content) > 1) { $plural = 'multiple'; } elseif (preg_match('/^[0-9]+$/', $content, $match) == 0) { $plural = 'multiple'; } break; case 'always': case 'multiple': $plural = 'multiple'; break; } $form = ''; if ($this->form !== 'long') { $form = $this->form; } $return = Container::getLocale()->getTerms($variable, $form, $plural); if ($return !== '') { $return = $this->formatting->render($return); $return = $this->textCase->render($return); $return = $this->stripPeriods->render($return); $return = $this->affix->render($return, true); } return $return; }
/** * Renders the date part, if a value is set. * * @param array $data Array with the keys: month, day, year * @return string */ public function render($data) { if (isset($data[$this->name]) == false || $data[$this->name] == '') { return ''; } $value = $this->render->render($data[$this->name]); $value = $this->formatting->render($value); $value = $this->textCase->render($value); // Attributes for affixes are allowed, unless cs:date calls a localized date format if (Container::getContext()->get('form', 'date') !== '') { $value = $this->affix->render($value); } return $value; }
/** * Display text value. * * @param string|array $data * @return string */ public function render($data) { // if part of macro in sorting context, test if text should be rendered if (Container::getContext()->get('renderJust', 'sort') !== null && in_array('', Container::getContext()->get('renderJust', 'sort')) == false) { return ''; } $data = $this->render->render($data); // no formatting while sorting if (Container::getContext()->in('sort') == true) { return $data; } if ($data !== '') { $data = $this->textCase->render($data); $data = $this->stripPeriods->render($data); $data = $this->display->render($data); $data = $this->quotes->render($data); $data = $this->formatting->render($data); } return $this->affix->render($data); }
/** * Renders the date. * * @param string $data * @return string */ public function render($data) { if ($this->formatDate() == false) { return ''; } // for sorting use numeric date if (Container::getContext()->in('sort') == true) { $return = array(); foreach ($this->dateParts as $datePart) { $object = $datePart['datepart']; $return[] = $object->render($this->data[0]); } return implode('', $return); } // enter date context Container::getContext()->enter('date', array('form' => $this->form)); if (count($this->data) == 2) { // date range $result = array(); $delimiter = '–'; $delimiterFrom = $this->partWithMaxDiff(); for ($i = 0; $i < 2; $i++) { $return = array(); foreach ($this->dateParts as $datePart) { $object = $datePart['datepart']; $return[] = $object->render($this->data[$i]); // get special delimiter if ($datePart['name'] == $delimiterFrom && $object->getRangeDelimiter() !== '') { $delimiter = $object->getRangeDelimiter(); } } $result[] = $return; } // drop equal values $length = count($result[0]); for ($i = 0; $i < $length; $i++) { if ($result[0][$i] == $result[1][$i]) { $result[0][$i] = ''; } } $result[0] = trim(implode($this->delimiter, $result[0])); $result[1] = trim(implode($this->delimiter, $result[1])); $value = implode($delimiter, $result); } elseif (isset($this->data[0]['raw']) == true) { // prefer raw date over full date $value = $this->data[0]['raw']; } else { $return = array(); foreach ($this->dateParts as $datePart) { $object = $datePart['datepart']; $return[] = $object->render($this->data[0]); } $value = implode($this->delimiter, $return); // catch non-date dates if ($value == '' && isset($this->data[0]['literal']) == true) { $value = $this->data[0]['literal']; } } if ($value == '') { $value = $this->renderSeason(); } // add year-suffix for disambiguation if ($this->addYearSuffix == true) { $value .= Container::getData()->getVariable('year-suffix'); } $value = $this->affix->render($value); $value = $this->display->render($value); $value = $this->formatting->render($value); $value = $this->textCase->render($value); Container::getContext()->leave(); return $value; }