Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PhraseCollector.php
Go to the documentation of this file.
1 <?php
7 
9 
14 {
18  protected $_tokenizer;
19 
25  protected $_phrases = [];
26 
32  protected $_file;
33 
39  protected $includeObjects = false;
40 
44  protected $className = 'Phrase';
45 
53  public function __construct(Tokenizer $tokenizer, $includeObjects = false, $className = 'Phrase')
54  {
55  $this->_tokenizer = $tokenizer;
56  $this->includeObjects = $includeObjects;
57  $this->className = $className;
58  }
59 
65  public function getPhrases()
66  {
67  return $this->_phrases;
68  }
69 
76  public function parse($file)
77  {
78  $this->_phrases = [];
79  $this->_file = $file;
80  $this->_tokenizer->parse($file);
81  while (!$this->_tokenizer->isEndOfLoop()) {
82  $this->_extractPhrases();
83  }
84  }
85 
91  protected function _extractPhrases()
92  {
93  if ($firstToken = $this->_tokenizer->getNextRealToken()) {
94  if (!$this->extractMethodPhrase($firstToken) && $this->includeObjects) {
95  $this->extractObjectPhrase($firstToken);
96  }
97  }
98  }
99 
104  protected function extractMethodPhrase(Token $firstToken)
105  {
106  if ($firstToken->isEqualFunction('__')) {
107  $secondToken = $this->_tokenizer->getNextRealToken();
108  if ($secondToken && $secondToken->isOpenBrace()) {
109  $arguments = $this->_tokenizer->getFunctionArgumentsTokens();
110  $phrase = $this->_collectPhrase(array_shift($arguments));
111  if (null !== $phrase) {
112  $this->_addPhrase($phrase, count($arguments), $this->_file, $firstToken->getLine());
113  return true;
114  }
115  }
116  }
117  return false;
118  }
119 
124  protected function extractObjectPhrase(Token $firstToken)
125  {
126  if ($firstToken->isNew() && $this->_tokenizer->isMatchingClass($this->className)) {
127  $arguments = $this->_tokenizer->getFunctionArgumentsTokens();
128  $phrase = $this->_collectPhrase(array_shift($arguments));
129  if (null !== $phrase) {
130  $this->_addPhrase($phrase, count($arguments), $this->_file, $firstToken->getLine());
131  return true;
132  }
133  }
134  return false;
135  }
136 
143  protected function _collectPhrase($phraseTokens)
144  {
145  $phrase = [];
146  if ($phraseTokens) {
148  foreach ($phraseTokens as $phraseToken) {
149  if ($phraseToken->isConstantEncapsedString() || $phraseToken->isConcatenateOperator()) {
150  $phrase[] = $phraseToken->getValue();
151  }
152  }
153  if ($phrase) {
154  return implode(' ', $phrase);
155  }
156  }
157  return null;
158  }
159 
169  protected function _addPhrase($phrase, $argumentsAmount, $file, $line)
170  {
171  $this->_phrases[] = [
172  'phrase' => $phrase,
173  'arguments' => $argumentsAmount,
174  'file' => $file,
175  'line' => $line,
176  ];
177  }
178 
183  public function setIncludeObjects($includeObjects = true)
184  {
185  $this->includeObjects = (bool)$includeObjects;
186  return $this;
187  }
188 }
__construct(Tokenizer $tokenizer, $includeObjects=false, $className='Phrase')
$arguments