| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | <?php/** * Console application, which adds textdomain argument * to all i18n function calls * * @package wordpress-i18n */error_reporting(E_ALL);require_once dirname( __FILE__ ) . '/makepot.php';class AddTextdomain {	var $modified_contents = '';	var $funcs;	function AddTextdomain() {		$makepot = new MakePOT;		$this->funcs = array_keys( $makepot->rules );	}	function usage() {		$usage = "Usage: php add-textdomain.php [-i] <domain> <file>\n\nAdds the string <domain> as a last argument to all i18n function calls in <file>\nand prints the modified php file on standard output.\n\nOptions:\n    -i    Modifies the PHP file in place, instead of printing it to standard output.\n";		fwrite(STDERR, $usage);		exit(1);	}	function process_token($token_text, $inplace) {		if ($inplace)			$this->modified_contents .= $token_text;		else			echo $token_text;	}	function process_file($domain, $source_filename, $inplace) {		$this->modified_contents = '';		$domain = addslashes($domain);		$source = file_get_contents($source_filename);		$tokens = token_get_all($source);		$in_func = false;		$args_started = false;		$parens_balance = 0;		$found_domain = false;		foreach($tokens as $token) {			$string_success = false;			if (is_array($token)) {				list($id, $text) = $token;				if (T_STRING == $id && in_array($text, $this->funcs)) {					$in_func = true;					$parens_balance = 0;					$args_started = false;					$found_domain = false;				} elseif (T_CONSTANT_ENCAPSED_STRING == $id && ("'$domain'" == $text || "\"$domain\"" == $text)) {					if ($in_func && $args_started) {						$found_domain = true;					}				}				$token = $text;			} elseif ('(' == $token){				$args_started = true;				++$parens_balance;			} elseif (')' == $token) {				--$parens_balance;				if ($in_func && 0 == $parens_balance) {					$token = $found_domain? ')' : ", '$domain')";					$in_func = false;					$args_started = false;					$found_domain = false;				}			}			$this->process_token($token, $inplace);		}		if ($inplace) {			$f = fopen($source_filename, 'w');			fwrite($f, $this->modified_contents);			fclose($f);		}	}}// run the CLI only if the file// wasn't included$included_files = get_included_files();if ($included_files[0] == __FILE__) {	$adddomain = new AddTextdomain;	if (!isset($argv[1]) || !isset($argv[2])) {		$adddomain->usage();	}	$inplace = false;	if ('-i' == $argv[1]) {		$inplace = true;		if (!isset($argv[3])) $adddomain->usage();		array_shift($argv);		}	$adddomain->process_file($argv[1], $argv[2], $inplace);}?>
 |