Beispiel #1
0
 /**
  * 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);
 }
Beispiel #2
0
 /**
  * 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));
     }
 }
Beispiel #3
0
 /**
  * .
  *
  * @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;
 }
Beispiel #4
0
 /**
  * @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'));
 }
Beispiel #5
0
 /**
  * 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;
 }
Beispiel #6
0
 /**
  * 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;
 }
Beispiel #7
0
 /**
  * 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);
 }
Beispiel #8
0
 /**
  * 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;
 }