PO::read_entry( resource $f, int $lineno )
Description Description
Parameters Parameters
- $f
-
(resource) (Required)
- $lineno
-
(int) (Required)
Return Return
(null|false|array)
Source Source
File: wp-includes/pomo/po.php
function read_entry( $f, $lineno = 0 ) { $entry = new Translation_Entry(); // where were we in the last step // can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural $context = ''; $msgstr_index = 0; while ( true ) { $lineno++; $line = PO::read_line( $f ); if ( ! $line ) { if ( feof( $f ) ) { if ( self::is_final( $context ) ) { break; } elseif ( ! $context ) { // we haven't read a line and eof came return null; } else { return false; } } else { return false; } } if ( $line == "\n" ) { continue; } $line = trim( $line ); if ( preg_match( '/^#/', $line, $m ) ) { // the comment is the start of a new entry if ( self::is_final( $context ) ) { PO::read_line( $f, 'put-back' ); $lineno--; break; } // comments have to be at the beginning if ( $context && $context != 'comment' ) { return false; } // add comment $this->add_comment_to_entry( $entry, $line ); } elseif ( preg_match( '/^msgctxt\s+(".*")/', $line, $m ) ) { if ( self::is_final( $context ) ) { PO::read_line( $f, 'put-back' ); $lineno--; break; } if ( $context && $context != 'comment' ) { return false; } $context = 'msgctxt'; $entry->context .= PO::unpoify( $m[1] ); } elseif ( preg_match( '/^msgid\s+(".*")/', $line, $m ) ) { if ( self::is_final( $context ) ) { PO::read_line( $f, 'put-back' ); $lineno--; break; } if ( $context && $context != 'msgctxt' && $context != 'comment' ) { return false; } $context = 'msgid'; $entry->singular .= PO::unpoify( $m[1] ); } elseif ( preg_match( '/^msgid_plural\s+(".*")/', $line, $m ) ) { if ( $context != 'msgid' ) { return false; } $context = 'msgid_plural'; $entry->is_plural = true; $entry->plural .= PO::unpoify( $m[1] ); } elseif ( preg_match( '/^msgstr\s+(".*")/', $line, $m ) ) { if ( $context != 'msgid' ) { return false; } $context = 'msgstr'; $entry->translations = array( PO::unpoify( $m[1] ) ); } elseif ( preg_match( '/^msgstr\[(\d+)\]\s+(".*")/', $line, $m ) ) { if ( $context != 'msgid_plural' && $context != 'msgstr_plural' ) { return false; } $context = 'msgstr_plural'; $msgstr_index = $m[1]; $entry->translations[ $m[1] ] = PO::unpoify( $m[2] ); } elseif ( preg_match( '/^".*"$/', $line ) ) { $unpoified = PO::unpoify( $line ); switch ( $context ) { case 'msgid': $entry->singular .= $unpoified; break; case 'msgctxt': $entry->context .= $unpoified; break; case 'msgid_plural': $entry->plural .= $unpoified; break; case 'msgstr': $entry->translations[0] .= $unpoified; break; case 'msgstr_plural': $entry->translations[ $msgstr_index ] .= $unpoified; break; default: return false; } } else { return false; } } $have_translations = false; foreach ( $entry->translations as $t ) { if ( $t || ( '0' === $t ) ) { $have_translations = true; break; } } if ( false === $have_translations ) { $entry->translations = array(); } return array( 'entry' => $entry, 'lineno' => $lineno, ); }
Expand full source code Collapse full source code View on Trac