MO::export_to_file_handle( resource $fh ): true

In this article

Parameters

$fhresourcerequired

Return

true

Source

public function export_to_file_handle( $fh ) {
	$entries = array_filter( $this->entries, array( $this, 'is_entry_good_for_export' ) );
	ksort( $entries );
	$magic                     = 0x950412de;
	$revision                  = 0;
	$total                     = count( $entries ) + 1; // All the headers are one entry.
	$originals_lengths_addr    = 28;
	$translations_lengths_addr = $originals_lengths_addr + 8 * $total;
	$size_of_hash              = 0;
	$hash_addr                 = $translations_lengths_addr + 8 * $total;
	$current_addr              = $hash_addr;
	fwrite(
		$fh,
		pack(
			'V*',
			$magic,
			$revision,
			$total,
			$originals_lengths_addr,
			$translations_lengths_addr,
			$size_of_hash,
			$hash_addr
		)
	);
	fseek( $fh, $originals_lengths_addr );

	// Headers' msgid is an empty string.
	fwrite( $fh, pack( 'VV', 0, $current_addr ) );
	++$current_addr;
	$originals_table = "\0";

	$reader = new POMO_Reader();

	foreach ( $entries as $entry ) {
		$originals_table .= $this->export_original( $entry ) . "\0";
		$length           = $reader->strlen( $this->export_original( $entry ) );
		fwrite( $fh, pack( 'VV', $length, $current_addr ) );
		$current_addr += $length + 1; // Account for the NULL byte after.
	}

	$exported_headers = $this->export_headers();
	fwrite( $fh, pack( 'VV', $reader->strlen( $exported_headers ), $current_addr ) );
	$current_addr      += strlen( $exported_headers ) + 1;
	$translations_table = $exported_headers . "\0";

	foreach ( $entries as $entry ) {
		$translations_table .= $this->export_translations( $entry ) . "\0";
		$length              = $reader->strlen( $this->export_translations( $entry ) );
		fwrite( $fh, pack( 'VV', $length, $current_addr ) );
		$current_addr += $length + 1;
	}

	fwrite( $fh, $originals_table );
	fwrite( $fh, $translations_table );
	return true;
}

User Contributed Notes

You must log in before being able to contribute a note or feedback.