Open Journal Systems  3.3.0
TextCaseTrait.php
1 <?php
2 /*
3  * citeproc-php
4  *
5  * @link http://github.com/seboettg/citeproc-php for the source repository
6  * @copyright Copyright (c) 2016 Sebastian Böttger.
7  * @license https://opensource.org/licenses/MIT
8  */
9 
10 namespace Seboettg\CiteProc\Styles;
11 
13 use SimpleXMLElement;
14 
22 trait TextCaseTrait
23 {
24 
25  private $textCase;
26 
27  protected function initTextCaseAttributes(SimpleXMLElement $node)
28  {
29  foreach ($node->attributes() as $attribute) {
33  $name = $attribute->getName();
34  $value = (string) $attribute;
35 
36  switch ($name) {
37  case 'text-case':
38  $this->textCase = $value;
39  return;
40  }
41  }
42  }
43 
49  public function applyTextCase($text, $lang = "en")
50  {
51 
52  switch ($this->textCase) {
53  case 'uppercase':
54  $text = $this->keepNoCase(mb_strtoupper($text), $text);
55  break;
56  case 'lowercase':
57  $text = $this->keepNoCase(mb_strtolower($text), $text);
58  break;
59  case 'sentence':
61  $text = mb_strtolower($text);
62  return StringHelper::mb_ucfirst($text);
63  } else {
64  return StringHelper::mb_ucfirst($text);
65  }
66  break;
67  case 'capitalize-all':
68  $text = $this->keepNoCase(StringHelper::capitalizeAll($text), $text);
69  break;
70  case 'title':
71  if ($lang === "en") {
72  $text = $this->keepNoCase(StringHelper::capitalizeForTitle($text), $text);
73  }
74  break;
75  case 'capitalize-first':
76  $text = $this->keepNoCase(StringHelper::mb_ucfirst($text), $text);
77  break;
78  default:
79  break;
80  }
81 
82  return $text;
83  }
84 
85 
91  private function keepNoCase($render, $original)
92  {
93  if (preg_match('/<span class=\"nocase\">(\p{L}+)<\/span>/i', $original, $match)) {
94  return preg_replace('/(<span class=\"nocase\">\p{L}+<\/span>)/i', $match[1], $render);
95  }
96  return $render;
97  }
98 }
Seboettg\CiteProc\Util\StringHelper\capitalizeAll
static capitalizeAll($text)
Definition: StringHelper.php:77
Seboettg\CiteProc\Styles\initTextCaseAttributes
initTextCaseAttributes(SimpleXMLElement $node)
Definition: TextCaseTrait.php:27
Seboettg\CiteProc\Util\StringHelper\mb_ucfirst
static mb_ucfirst($string, $encoding='UTF-8')
Definition: StringHelper.php:133
Seboettg\CiteProc\Styles
Definition: AffixesTrait.php:10
Seboettg\CiteProc\Util\StringHelper
Definition: StringHelper.php:22
Seboettg\CiteProc\Styles\TextCaseTrait
trait TextCaseTrait
Definition: TextCaseTrait.php:23
Seboettg\CiteProc\Util\StringHelper\capitalizeForTitle
static capitalizeForTitle($titleString)
Definition: StringHelper.php:92
Seboettg\CiteProc\Styles\applyTextCase
applyTextCase($text, $lang="en")
Definition: TextCaseTrait.php:49
Seboettg\CiteProc\Util\StringHelper\checkUpperCaseString
static checkUpperCaseString($string)
Definition: StringHelper.php:228