00001 <?php
00002
00015
00016
00017
00018 import('file.EditableFile');
00019
00020 class EditableLocaleFile extends LocaleFile {
00021 var $editableFile;
00022
00023 function EditableLocaleFile($locale, $filename) {
00024 parent::LocaleFile($locale, $filename);
00025 $this->editableFile =& new EditableFile($this->filename);
00026 }
00027
00028 function write() {
00029 $this->editableFile->write();
00030 }
00031
00032 function &getContents() {
00033 return $this->editableFile->getContents();
00034 }
00035
00036 function setContents(&$contents) {
00037 $this->editableFile->setContents($contents);
00038 }
00039
00040 function update($key, $value) {
00041 $matches = null;
00042 $quotedKey = String::regexp_quote($key);
00043 preg_match(
00044 "/<message[\W]+key=\"$quotedKey\">/",
00045 $this->getContents(),
00046 $matches,
00047 PREG_OFFSET_CAPTURE
00048 );
00049 if (!isset($matches[0])) return false;
00050
00051 $offset = $matches[0][1];
00052 $closeOffset = strpos($this->getContents(), '</message>', $offset);
00053 if ($closeOffset === FALSE) return false;
00054
00055 $newContents = substr($this->getContents(), 0, $offset);
00056 $newContents .= "<message key=\"$key\">" . $this->editableFile->xmlEscape($value);
00057 $newContents .= substr($this->getContents(), $closeOffset);
00058 $this->setContents($newContents);
00059 return true;
00060 }
00061
00062 function delete($key) {
00063 $matches = null;
00064 $quotedKey = String::regexp_quote($key);
00065 preg_match(
00066 "/[ \t]*<message[\W]+key=\"$quotedKey\">/",
00067 $this->getContents(),
00068 $matches,
00069 PREG_OFFSET_CAPTURE
00070 );
00071 if (!isset($matches[0])) return false;
00072 $offset = $matches[0][1];
00073
00074 preg_match("/<\/message>[\W]*[\r]?\n/", $this->getContents(), $matches, PREG_OFFSET_CAPTURE, $offset);
00075 if (!isset($matches[0])) return false;
00076 $closeOffset = $matches[0][1] + strlen($matches[0][0]);
00077
00078 $newContents = substr($this->getContents(), 0, $offset);
00079 $newContents .= substr($this->getContents(), $closeOffset);
00080 $this->setContents($newContents);
00081 return true;
00082 }
00083
00084 function insert($key, $value) {
00085 $offset = strrpos($this->getContents(), '</locale>');
00086 if ($offset === false) return false;
00087 $newContents = substr($this->getContents(), 0, $offset);
00088 $newContents .= "\t<message key=\"$key\">" . $this->editableFile->xmlEscape($value) . "</message>\n";
00089 $newContents .= substr($this->getContents(), $offset);
00090 $this->setContents($newContents);
00091 }
00092 }
00093 ?>