+ foreach($entries as $entry) {
+ $originals_table .= $this->export_original($entry) . chr(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 . chr(0);
+
+ foreach($entries as $entry) {
+ $translations_table .= $this->export_translations($entry) . chr(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;
+ }
+
+ function export_original($entry) {
+ //TODO: warnings for control characters
+ $exported = $entry->singular;
+ if ($entry->is_plural) $exported .= chr(0).$entry->plural;
+ if (!is_null($entry->context)) $exported = $entry->context . chr(4) . $exported;
+ return $exported;
+ }
+
+ function export_translations($entry) {
+ //TODO: warnings for control characters
+ return implode(chr(0), $entry->translations);
+ }
+
+ function export_headers() {
+ $exported = '';
+ foreach($this->headers as $header => $value) {
+ $exported.= "$header: $value\n";
+ }
+ return $exported;
+ }
+
+ function get_byteorder($magic) {