Files
piratepoet/mailpoet/tasks/makepot/grunt-makepot.php
Jan Jakes 9f790efbf0 Move plugin files to a subfolder
[MAILPOET-3988]
2022-01-18 15:30:22 +01:00

188 lines
6.4 KiB
PHP

<?php
require_once( dirname( __FILE__ ) . '/makepot.php' );
/**
* POT generation methods for grunt-wp-i18n.
*/
class GruntMakePOT extends MakePOT {
/**
* Valid project types.
*
* @type array
*/
public $projects = array(
'wp-plugin',
'wp-theme',
);
/**
* Generate a POT file for a plugin.
*
* @param string $dir Directory to search for gettext calls.
* @param string $output POT file name.
* @param string $slug Optional. Plugin slug.
* @param string $excludes Optional. Comma-separated list of exclusion patterns.
* @param string $includes Optional. Comma-separated list of inclusion patterns.
* @return bool
*/
public function wp_plugin( $dir, $output, $slug = null, $excludes = '', $includes = '' ) {
if ( is_null( $slug ) ) {
// Guess plugin slug.
$slug = $this->guess_plugin_slug( $dir );
}
$main_file = $dir . '/' . $slug . '.php';
$source = $this->get_first_lines( $main_file, $this->max_header_lines );
$excludes = $this->normalize_patterns( $excludes );
$includes = $this->normalize_patterns( $includes );
$output = is_null( $output )? "$slug.pot" : $output;
$placeholders = array();
$placeholders['version'] = $this->get_addon_header( 'Version', $source );
$placeholders['author'] = $this->get_addon_header( 'Author', $source );
$placeholders['name'] = $this->get_addon_header( 'Plugin Name', $source );
$placeholders['slug'] = $slug;
/*$license = $this->get_addon_header( 'License', $source );
if ( $license ) {
$this->meta['wp-plugin']['comments'] = "<!=Copyright (C) {year} {author}\nThis file is distributed under the {$license}.=!>";
} else {
$this->meta['wp-plugin']['comments'] = "<!=Copyright (C) {year} {author}\nThis file is distributed under the same license as the {package-name} package.=!>";
}*/
$result = $this->xgettext( 'wp-plugin', $dir, $output, $placeholders, $excludes, $includes );
if ( ! $result ) {
return false;
}
$potextmeta = new PotExtMeta;
$result = $potextmeta->append( $main_file, $output );
return $result;
}
/**
* Generate a POT file for a theme.
*
* @param string $dir Directory to search for gettext calls.
* @param string $output POT file name.
* @param string $slug Optional. Theme slug.
* @param string $excludes Optional. Comma-separated list of exclusion patterns.
* @param string $includes Optional. Comma-separated list of inclusion patterns.
* @return bool
*/
public function wp_theme( $dir, $output, $slug = null, $excludes = '', $includes = '' ) {
if ( is_null( $slug ) ) {
// Guess theme slug.
$slug = $this->guess_plugin_slug( $dir );
}
$main_file = $dir . '/style.css';
$source = $this->get_first_lines( $main_file, $this->max_header_lines );
$excludes = $this->normalize_patterns( $excludes );
$includes = $this->normalize_patterns( $includes );
$output = is_null( $output )? "$slug.pot" : $output;
$placeholders = array();
$placeholders['version'] = $this->get_addon_header( 'Version', $source );
$placeholders['author'] = $this->get_addon_header( 'Author', $source );
$placeholders['name'] = $this->get_addon_header( 'Theme Name', $source );
$placeholders['slug'] = $slug;
$license = $this->get_addon_header( 'License', $source );
if ( $license ) {
$this->meta['wp-theme']['comments'] = "<!=Copyright (C) {year} {author}\nThis file is distributed under the {$license}.=!>";
} else {
$this->meta['wp-theme']['comments'] = "<!=Copyright (C) {year} {author}\nThis file is distributed under the same license as the {package-name} package.=!>";
}
$result = $this->xgettext( 'wp-theme', $dir, $output, $placeholders, $excludes, $includes );
if ( ! $result ) {
return false;
}
$potextmeta = new PotExtMeta;
$result = $potextmeta->append( $main_file, $output, array( 'Theme Name', 'Theme URI', 'Description', 'Author', 'Author URI' ) );
if ( ! $result ) {
return false;
}
// If we're dealing with a pre-3.4 default theme, don't extract page templates before 3.4.
$extract_templates = ! in_array( $slug, array( 'twentyten', 'twentyeleven', 'default', 'classic' ) );
if ( ! $extract_templates ) {
$wp_dir = dirname( dirname( dirname( $dir ) ) );
$extract_templates = file_exists( "$wp_dir/wp-admin/user/about.php" ) || ! file_exists( "$wp_dir/wp-load.php" );
}
if ( $extract_templates ) {
$result = $potextmeta->append( $dir, $output, array( 'Template Name' ) );
if ( ! $result ) {
return false;
}
$files = scandir( $dir );
foreach ( $files as $file ) {
if ( in_array( $file, array( '.', '..', '.git', 'CVS', 'node_modules' ) ) ) {
continue;
}
if ( is_dir( $dir . '/' . $file ) ) {
$result = $potextmeta->append( $dir . '/' . $file, $output, array( 'Template Name' ) );
if ( ! $result ) {
return false;
}
}
}
}
return $result;
}
/**
* Convert a string or array of exclusion/inclusion patterns into an array.
*
* @param string|array $patterns Comma-separated string or array of exclusion/inclusion patterns.
* @return array
*/
protected function normalize_patterns( $patterns ) {
if ( is_string( $patterns ) ) {
$patterns = explode( ',', $patterns );
}
// Remove empty items and non-strings.
return array_filter( array_filter( (array) $patterns ), 'is_string' );
}
}
/**
* CLI interface.
*
* Run the CLI only if the file wasn't included.
*/
$included_files = get_included_files();
if ( __FILE__ == $included_files[0] ) {
$makepot = new GruntMakePOT;
$method = str_replace( '-', '_', $argv[1] );
if ( in_array( count( $argv ), range( 3, 7 ) ) && in_array( $method, get_class_methods( $makepot ) ) ) {
$res = call_user_func(
array( $makepot, $method ), // Method
realpath( $argv[2] ), // Directory
isset( $argv[3] )? $argv[3] : null, // Output
isset( $argv[4] )? $argv[4] : null, // Slug
isset( $argv[5] )? $argv[5] : null, // Excludes
isset( $argv[6] )? $argv[6] : null // Includes
);
if ( false === $res ) {
fwrite( STDERR, "Couldn't generate POT file!\n" );
}
} else {
$usage = "Usage: php grunt-makepot.php PROJECT DIRECTORY [OUTPUT] [SLUG] [EXCLUDE] [INCLUDE]\n\n";
$usage .= "Generate POT file from the files in DIRECTORY [OUTPUT]\n";
$usage .= "Available projects: " . implode( ', ', $makepot->projects ) . "\n";
fwrite( STDERR, $usage);
exit( 1 );
}
}