129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
#!/usr/bin/env php
 | 
						|
<?php
 | 
						|
/**
 | 
						|
 * tsmarty2c.php - rips gettext strings from smarty template
 | 
						|
 *
 | 
						|
 * ------------------------------------------------------------------------- *
 | 
						|
 * This library is free software; you can redistribute it and/or             *
 | 
						|
 * modify it under the terms of the GNU Lesser General Public                *
 | 
						|
 * License as published by the Free Software Foundation; either              *
 | 
						|
 * version 2.1 of the License, or (at your option) any later version.        *
 | 
						|
 *                                                                           *
 | 
						|
 * This library is distributed in the hope that it will be useful,           *
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
 | 
						|
 * Lesser General Public License for more details.                           *
 | 
						|
 *                                                                           *
 | 
						|
 * You should have received a copy of the GNU Lesser General Public          *
 | 
						|
 * License along with this library; if not, write to the Free Software       *
 | 
						|
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *
 | 
						|
 * ------------------------------------------------------------------------- *
 | 
						|
 *
 | 
						|
 * This command line script rips gettext strings from smarty file,
 | 
						|
 * and prints them to stdout in C format, that can later be used with the
 | 
						|
 * standard gettext tools.
 | 
						|
 *
 | 
						|
 * Usage:
 | 
						|
 * ./tsmarty2c.php <filename or directory> <file2> <..> > smarty.c
 | 
						|
 *
 | 
						|
 * If a parameter is a directory, the template files within will be parsed.
 | 
						|
 *
 | 
						|
 * @package    smarty-gettext
 | 
						|
 * @version    $Id$
 | 
						|
 * @link       http://smarty-gettext.sf.net/
 | 
						|
 * @author     Sagi Bashari <sagi@boom.org.il>
 | 
						|
 * @copyright  2004-2005 Sagi Bashari
 | 
						|
 */
 | 
						|
 | 
						|
if ( PHP_SAPI != 'cli' ) {
 | 
						|
	echo "This script can only be called from the Command Line.\n";
 | 
						|
	exit;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// smarty open tag
 | 
						|
$ldq = preg_quote( '{' );
 | 
						|
 | 
						|
// smarty close tag
 | 
						|
$rdq = preg_quote( '}' );
 | 
						|
 | 
						|
// smarty command
 | 
						|
$cmd = preg_quote( 't' );
 | 
						|
 | 
						|
// extensions of smarty files, used when going through a directory
 | 
						|
$extensions = [ 'tpl' ];
 | 
						|
 | 
						|
// "fix" string - strip slashes, escape and convert new lines to \n
 | 
						|
function fs( $str ) {
 | 
						|
	$str = stripslashes( $str );
 | 
						|
	$str = str_replace( '"', '\"', $str );
 | 
						|
	$str = str_replace( "\n", '\n', $str );
 | 
						|
 | 
						|
	return $str;
 | 
						|
}
 | 
						|
 | 
						|
// rips gettext strings from $file and prints them in C format
 | 
						|
function do_file( $file ) {
 | 
						|
	$content = @file_get_contents( $file );
 | 
						|
 | 
						|
	if ( empty( $content ) ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	global $ldq, $rdq, $cmd;
 | 
						|
 | 
						|
	preg_match_all(
 | 
						|
			"/{$ldq}\s*({$cmd})\s*([^{$rdq}]*){$rdq}([^{$ldq}]*){$ldq}\/\\1{$rdq}/",
 | 
						|
			$content,
 | 
						|
			$matches
 | 
						|
	);
 | 
						|
 | 
						|
	for ( $i = 0; $i < count( $matches[0] ); $i++ ) {
 | 
						|
		// TODO: add line number
 | 
						|
		echo "/* $file */\n"; // credit: Mike van Lammeren 2005-02-14
 | 
						|
 | 
						|
		if ( preg_match( '/plural\s*=\s*["\']?\s*(.[^\"\']*)\s*["\']?/', $matches[2][$i], $match ) ) {
 | 
						|
			echo 'ngettext("' . fs( $matches[3][$i] ) . '","' . fs( $match[1] ) . '",x);' . "\n";
 | 
						|
		} else {
 | 
						|
			echo 'gettext("' . fs( $matches[3][$i] ) . '");' . "\n";
 | 
						|
		}
 | 
						|
 | 
						|
		echo "\n";
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// go through a directory
 | 
						|
function do_dir( $dir ) {
 | 
						|
	$d = dir( $dir );
 | 
						|
 | 
						|
	while ( false !== ( $entry = $d->read() ) ) {
 | 
						|
		if ( $entry == '.' || $entry == '..' ) {
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
 | 
						|
		$entry = $dir . '/' . $entry;
 | 
						|
 | 
						|
		if ( is_dir( $entry ) ) { // if a directory, go through it
 | 
						|
			do_dir( $entry );
 | 
						|
		} else { // if file, parse only if extension is matched
 | 
						|
			$pi = pathinfo( $entry );
 | 
						|
 | 
						|
			if ( isset( $pi['extension'] ) && in_array( $pi['extension'], $GLOBALS['extensions'] ) ) {
 | 
						|
				do_file( $entry );
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	$d->close();
 | 
						|
}
 | 
						|
 | 
						|
for ( $ac = 1; $ac < $_SERVER['argc']; $ac++ ) {
 | 
						|
	if ( is_dir( $_SERVER['argv'][$ac] ) ) { // go through directory
 | 
						|
		do_dir( $_SERVER['argv'][$ac] );
 | 
						|
	} else { // do file
 | 
						|
		do_file( $_SERVER['argv'][$ac] );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
?>
 |