#!/usr/bin/php -qn <..> > 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 * @copyright 2004 Sagi Bashari */ // 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 = array('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; } print "\n//".$file."\n"; 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++) { if (preg_match('/plural\s*=\s*["\']?\s*(.[^\"\']*)\s*["\']?/', $matches[2][$i], $match)) { print 'ngettext("'.fs($matches[3][$i]).'","'.fs($match[1]).'",x);'."\n"; } else { print 'gettext("'.fs($matches[3][$i]).'");'."\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]); } } ?>