X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FComponent%2FGettext%2FPoStreamReader.php;h=a69c03ce88daf1bf0dd50b7b3e4a148e20da7b86;hb=1c1cb0980bfa6caf0c24cce671b6bb541dc87583;hp=9548ea7ea225c70ec5b52c1303d87c741a128eae;hpb=af6d1fb995500ae68849458ee10d66abbdcfb252;p=yaffs-website diff --git a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php index 9548ea7ea..a69c03ce8 100644 --- a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php +++ b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php @@ -2,7 +2,7 @@ namespace Drupal\Component\Gettext; -use Drupal\Component\Utility\SafeMarkup; +use Drupal\Component\Render\FormattableMarkup; /** * Implements Gettext PO stream reader. @@ -17,7 +17,7 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * * @var int */ - private $_line_number = 0; + protected $lineNumber = 0; /** * Parser context for the stream reader state machine. @@ -32,90 +32,90 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * * @var string */ - private $_context = 'COMMENT'; + protected $context = 'COMMENT'; /** * Current entry being read. Incomplete. * * @var array */ - private $_current_item = []; + protected $currentItem = []; /** * Current plural index for plural translations. * * @var int */ - private $_current_plural_index = 0; + protected $currentPluralIndex = 0; /** * URI of the PO stream that is being read. * * @var string */ - private $_uri = ''; + protected $uri = ''; /** * Language code for the PO stream being read. * * @var string */ - private $_langcode = NULL; + protected $langcode = NULL; /** * File handle of the current PO stream. * * @var resource */ - private $_fd; + protected $fd; /** * The PO stream header. * * @var \Drupal\Component\Gettext\PoHeader */ - private $_header; + protected $header; /** * Object wrapper for the last read source/translation pair. * * @var \Drupal\Component\Gettext\PoItem */ - private $_last_item; + protected $lastItem; /** * Indicator of whether the stream reading is finished. * * @var bool */ - private $_finished; + protected $finished; /** * Array of translated error strings recorded on reading this stream so far. * * @var array */ - private $_errors; + protected $errors; /** * {@inheritdoc} */ public function getLangcode() { - return $this->_langcode; + return $this->langcode; } /** * {@inheritdoc} */ public function setLangcode($langcode) { - $this->_langcode = $langcode; + $this->langcode = $langcode; } /** * {@inheritdoc} */ public function getHeader() { - return $this->_header; + return $this->header; } /** @@ -130,14 +130,14 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * {@inheritdoc} */ public function getURI() { - return $this->_uri; + return $this->uri; } /** * {@inheritdoc} */ public function setURI($uri) { - $this->_uri = $uri; + $this->uri = $uri; } /** @@ -150,8 +150,8 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * If the URI is not yet set. */ public function open() { - if (!empty($this->_uri)) { - $this->_fd = fopen($this->_uri, 'rb'); + if (!empty($this->uri)) { + $this->fd = fopen($this->uri, 'rb'); $this->readHeader(); } else { @@ -166,8 +166,8 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * If the stream is not open. */ public function close() { - if ($this->_fd) { - fclose($this->_fd); + if ($this->fd) { + fclose($this->fd); } else { throw new \Exception('Cannot close stream that is not open.'); @@ -179,14 +179,14 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { */ public function readItem() { // Clear out the last item. - $this->_last_item = NULL; + $this->lastItem = NULL; // Read until finished with the stream or a complete item was identified. - while (!$this->_finished && is_null($this->_last_item)) { + while (!$this->finished && is_null($this->lastItem)) { $this->readLine(); } - return $this->_last_item; + return $this->lastItem; } /** @@ -196,14 +196,14 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { * The new seek position to set. */ public function setSeek($seek) { - fseek($this->_fd, $seek); + fseek($this->fd, $seek); } /** * Gets the pointer position of the current PO stream. */ public function getSeek() { - return ftell($this->_fd); + return ftell($this->fd); } /** @@ -221,18 +221,18 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { } $header = new PoHeader(); $header->setFromString(trim($item->getTranslation())); - $this->_header = $header; + $this->header = $header; } /** * Reads a line from the PO stream and stores data internally. * - * Expands $this->_current_item based on new data for the current item. If + * Expands $this->current_item based on new data for the current item. If * this line ends the current item, it is saved with setItemFromArray() with - * data from $this->_current_item. + * data from $this->current_item. * * An internal state machine is maintained in this reader using - * $this->_context as the reading state. PO items are in between COMMENT + * $this->context as the reading state. PO items are in between COMMENT * states (when items have at least one line or comment in between them) or * indicated by MSGSTR or MSGSTR_ARR followed immediately by an MSGID or * MSGCTXT (when items closely follow each other). @@ -245,25 +245,25 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { private function readLine() { // Read a line and set the stream finished indicator if it was not // possible anymore. - $line = fgets($this->_fd); - $this->_finished = ($line === FALSE); + $line = fgets($this->fd); + $this->finished = ($line === FALSE); - if (!$this->_finished) { + if (!$this->finished) { - if ($this->_line_number == 0) { + if ($this->lineNumber == 0) { // The first line might come with a UTF-8 BOM, which should be removed. $line = str_replace("\xEF\xBB\xBF", '', $line); // Current plurality for 'msgstr[]'. - $this->_current_plural_index = 0; + $this->currentPluralIndex = 0; } // Track the line number for error reporting. - $this->_line_number++; + $this->lineNumber++; // Initialize common values for error logging. $log_vars = [ '%uri' => $this->getURI(), - '%line' => $this->_line_number, + '%line' => $this->lineNumber, ]; // Trim away the linefeed. \\n might appear at the end of the string if @@ -273,24 +273,24 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { if (!strncmp('#', $line, 1)) { // Lines starting with '#' are comments. - if ($this->_context == 'COMMENT') { + if ($this->context == 'COMMENT') { // Already in comment context, add to current comment. - $this->_current_item['#'][] = substr($line, 1); + $this->currentItem['#'][] = substr($line, 1); } - elseif (($this->_context == 'MSGSTR') || ($this->_context == 'MSGSTR_ARR')) { + elseif (($this->context == 'MSGSTR') || ($this->context == 'MSGSTR_ARR')) { // We are currently in string context, save current item. - $this->setItemFromArray($this->_current_item); + $this->setItemFromArray($this->currentItem); // Start a new entry for the comment. - $this->_current_item = []; - $this->_current_item['#'][] = substr($line, 1); + $this->currentItem = []; + $this->currentItem['#'][] = substr($line, 1); - $this->_context = 'COMMENT'; + $this->context = 'COMMENT'; return; } else { // A comment following any other context is a syntax error. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgstr" was expected but not found on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgstr" was expected but not found on line %line.', $log_vars); return FALSE; } return; @@ -298,9 +298,9 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { elseif (!strncmp('msgid_plural', $line, 12)) { // A plural form for the current source string. - if ($this->_context != 'MSGID') { + if ($this->context != 'MSGID') { // A plural form can only be added to an msgid directly. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgid_plural" was expected but not found on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgid_plural" was expected but not found on line %line.', $log_vars); return FALSE; } @@ -311,34 +311,34 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // The plural form must be wrapped in quotes. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains a syntax error on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains a syntax error on line %line.', $log_vars); return FALSE; } // Append the plural source to the current entry. - if (is_string($this->_current_item['msgid'])) { + if (is_string($this->currentItem['msgid'])) { // The first value was stored as string. Now we know the context is // plural, it is converted to array. - $this->_current_item['msgid'] = [$this->_current_item['msgid']]; + $this->currentItem['msgid'] = [$this->currentItem['msgid']]; } - $this->_current_item['msgid'][] = $quoted; + $this->currentItem['msgid'][] = $quoted; - $this->_context = 'MSGID_PLURAL'; + $this->context = 'MSGID_PLURAL'; return; } elseif (!strncmp('msgid', $line, 5)) { // Starting a new message. - if (($this->_context == 'MSGSTR') || ($this->_context == 'MSGSTR_ARR')) { + if (($this->context == 'MSGSTR') || ($this->context == 'MSGSTR_ARR')) { // We are currently in string context, save current item. - $this->setItemFromArray($this->_current_item); + $this->setItemFromArray($this->currentItem); // Start a new context for the msgid. - $this->_current_item = []; + $this->currentItem = []; } - elseif ($this->_context == 'MSGID') { + elseif ($this->context == 'MSGID') { // We are currently already in the context, meaning we passed an id with no data. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgid" is unexpected on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgid" is unexpected on line %line.', $log_vars); return FALSE; } @@ -349,25 +349,25 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // The message id must be wrapped in quotes. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: invalid format for "msgid" on line %line.', $log_vars, $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: invalid format for "msgid" on line %line.', $log_vars, $log_vars); return FALSE; } - $this->_current_item['msgid'] = $quoted; - $this->_context = 'MSGID'; + $this->currentItem['msgid'] = $quoted; + $this->context = 'MSGID'; return; } elseif (!strncmp('msgctxt', $line, 7)) { // Starting a new context. - if (($this->_context == 'MSGSTR') || ($this->_context == 'MSGSTR_ARR')) { + if (($this->context == 'MSGSTR') || ($this->context == 'MSGSTR_ARR')) { // We are currently in string context, save current item. - $this->setItemFromArray($this->_current_item); - $this->_current_item = []; + $this->setItemFromArray($this->currentItem); + $this->currentItem = []; } - elseif (!empty($this->_current_item['msgctxt'])) { + elseif (!empty($this->currentItem['msgctxt'])) { // A context cannot apply to another context. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgctxt" is unexpected on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgctxt" is unexpected on line %line.', $log_vars); return FALSE; } @@ -378,37 +378,37 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // The context string must be quoted. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: invalid format for "msgctxt" on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: invalid format for "msgctxt" on line %line.', $log_vars); return FALSE; } - $this->_current_item['msgctxt'] = $quoted; + $this->currentItem['msgctxt'] = $quoted; - $this->_context = 'MSGCTXT'; + $this->context = 'MSGCTXT'; return; } elseif (!strncmp('msgstr[', $line, 7)) { // A message string for a specific plurality. - if (($this->_context != 'MSGID') && - ($this->_context != 'MSGCTXT') && - ($this->_context != 'MSGID_PLURAL') && - ($this->_context != 'MSGSTR_ARR')) { - // Plural message strings must come after msgid, msgxtxt, + if (($this->context != 'MSGID') && + ($this->context != 'MSGCTXT') && + ($this->context != 'MSGID_PLURAL') && + ($this->context != 'MSGSTR_ARR')) { + // Plural message strings must come after msgid, msgctxt, // msgid_plural, or other msgstr[] entries. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgstr[]" is unexpected on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgstr[]" is unexpected on line %line.', $log_vars); return FALSE; } // Ensure the plurality is terminated. if (strpos($line, ']') === FALSE) { - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: invalid format for "msgstr[]" on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: invalid format for "msgstr[]" on line %line.', $log_vars); return FALSE; } // Extract the plurality. $frombracket = strstr($line, '['); - $this->_current_plural_index = substr($frombracket, 1, strpos($frombracket, ']') - 1); + $this->currentPluralIndex = substr($frombracket, 1, strpos($frombracket, ']') - 1); // Skip to the next whitespace and trim away any further whitespace, // bringing $line to the message text only. @@ -417,24 +417,24 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // The string must be quoted. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: invalid format for "msgstr[]" on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: invalid format for "msgstr[]" on line %line.', $log_vars); return FALSE; } - if (!isset($this->_current_item['msgstr']) || !is_array($this->_current_item['msgstr'])) { - $this->_current_item['msgstr'] = []; + if (!isset($this->currentItem['msgstr']) || !is_array($this->currentItem['msgstr'])) { + $this->currentItem['msgstr'] = []; } - $this->_current_item['msgstr'][$this->_current_plural_index] = $quoted; + $this->currentItem['msgstr'][$this->currentPluralIndex] = $quoted; - $this->_context = 'MSGSTR_ARR'; + $this->context = 'MSGSTR_ARR'; return; } elseif (!strncmp("msgstr", $line, 6)) { // A string pair for an msgid (with optional context). - if (($this->_context != 'MSGID') && ($this->_context != 'MSGCTXT')) { + if (($this->context != 'MSGID') && ($this->context != 'MSGCTXT')) { // Strings are only valid within an id or context scope. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: "msgstr" is unexpected on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: "msgstr" is unexpected on line %line.', $log_vars); return FALSE; } @@ -445,13 +445,13 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // The string must be quoted. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: invalid format for "msgstr" on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: invalid format for "msgstr" on line %line.', $log_vars); return FALSE; } - $this->_current_item['msgstr'] = $quoted; + $this->currentItem['msgstr'] = $quoted; - $this->_context = 'MSGSTR'; + $this->context = 'MSGSTR'; return; } elseif ($line != '') { @@ -460,37 +460,37 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $quoted = $this->parseQuoted($line); if ($quoted === FALSE) { // This string must be quoted. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: string continuation expected on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: string continuation expected on line %line.', $log_vars); return FALSE; } // Append the string to the current item. - if (($this->_context == 'MSGID') || ($this->_context == 'MSGID_PLURAL')) { - if (is_array($this->_current_item['msgid'])) { + if (($this->context == 'MSGID') || ($this->context == 'MSGID_PLURAL')) { + if (is_array($this->currentItem['msgid'])) { // Add string to last array element for plural sources. - $last_index = count($this->_current_item['msgid']) - 1; - $this->_current_item['msgid'][$last_index] .= $quoted; + $last_index = count($this->currentItem['msgid']) - 1; + $this->currentItem['msgid'][$last_index] .= $quoted; } else { // Singular source, just append the string. - $this->_current_item['msgid'] .= $quoted; + $this->currentItem['msgid'] .= $quoted; } } - elseif ($this->_context == 'MSGCTXT') { + elseif ($this->context == 'MSGCTXT') { // Multiline context name. - $this->_current_item['msgctxt'] .= $quoted; + $this->currentItem['msgctxt'] .= $quoted; } - elseif ($this->_context == 'MSGSTR') { + elseif ($this->context == 'MSGSTR') { // Multiline translation string. - $this->_current_item['msgstr'] .= $quoted; + $this->currentItem['msgstr'] .= $quoted; } - elseif ($this->_context == 'MSGSTR_ARR') { + elseif ($this->context == 'MSGSTR_ARR') { // Multiline plural translation string. - $this->_current_item['msgstr'][$this->_current_plural_index] .= $quoted; + $this->currentItem['msgstr'][$this->currentPluralIndex] .= $quoted; } else { // No valid context to append to. - $this->_errors[] = SafeMarkup::format('The translation stream %uri contains an error: unexpected string on line %line.', $log_vars); + $this->errors[] = new FormattableMarkup('The translation stream %uri contains an error: unexpected string on line %line.', $log_vars); return FALSE; } return; @@ -498,12 +498,12 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { } // Empty line read or EOF of PO stream, close out the last entry. - if (($this->_context == 'MSGSTR') || ($this->_context == 'MSGSTR_ARR')) { - $this->setItemFromArray($this->_current_item); - $this->_current_item = []; + if (($this->context == 'MSGSTR') || ($this->context == 'MSGSTR_ARR')) { + $this->setItemFromArray($this->currentItem); + $this->currentItem = []; } - elseif ($this->_context != 'COMMENT') { - $this->_errors[] = SafeMarkup::format('The translation stream %uri ended unexpectedly at line %line.', $log_vars); + elseif ($this->context != 'COMMENT') { + $this->errors[] = new FormattableMarkup('The translation stream %uri ended unexpectedly at line %line.', $log_vars); return FALSE; } @@ -533,11 +533,11 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { $item->setTranslation($value['msgstr']); $item->setPlural($plural); $item->setComment($comments); - $item->setLangcode($this->_langcode); + $item->setLangcode($this->langcode); - $this->_last_item = $item; + $this->lastItem = $item; - $this->_context = 'COMMENT'; + $this->context = 'COMMENT'; } /**