function _potx_process_file in Translation template extractor 7.2
Same name and namespace in other branches
- 8 potx.inc \_potx_process_file()
- 5.2 potx.inc \_potx_process_file()
- 5 potx.inc \_potx_process_file()
- 6.3 potx.inc \_potx_process_file()
- 6 potx.inc \_potx_process_file()
- 6.2 potx.inc \_potx_process_file()
- 7.3 potx.inc \_potx_process_file()
- 7 potx.inc \_potx_process_file()
Process a file and put extracted information to the given parameters.
Parameters
$file_path: Comlete path to file to process.
$strip_prefix: An integer denoting the number of chars to strip from filepath for output.
$save_callback: Callback function to use to save the collected strings.
$version_callback: Callback function to use to save collected version numbers.
$api_version: Drupal API version to work with.
5 calls to _potx_process_file()
- PotxTestCase::parseFile in tests/
potx.test - Parse the given file with the given API version.
- PotxTestCase::testDrupal8ShippedConfiguration in tests/
potx.test - Test parsing of Drupal 8 shipped configuration files.
- potx_coder_review in ./
potx.module - Callback implementation for coder review of one file.
- potx_drush_extract in ./
potx.drush.inc - Drush command callback.
- potx_select_component_form_submit in ./
potx.admin.inc - Generate translation template or translation file for the requested component.
File
- ./
potx.inc, line 187 - Extraction API used by the web and command line interface.
Code
function _potx_process_file($file_path, $strip_prefix = 0, $save_callback = '_potx_save_string', $version_callback = '_potx_save_version', $api_version = POTX_API_CURRENT) {
global $_potx_tokens, $_potx_lookup;
// Figure out the basename and extension to select extraction method.
$basename = basename($file_path);
$name_parts = pathinfo($basename);
// Always grab the CVS version number from the code
$code = file_get_contents($file_path);
$file_name = $strip_prefix > 0 ? substr($file_path, $strip_prefix) : $file_path;
_potx_find_version_number($code, $file_name, $version_callback);
// The .info files are not PHP code, no need to tokenize.
if ($name_parts['extension'] == 'info' && $api_version < POTX_API_8) {
_potx_find_info_file_strings($file_path, $file_name, $save_callback, $api_version);
return;
}
elseif ($name_parts['extension'] == 'yml' && $api_version > POTX_API_7) {
_potx_parse_yaml_file($code, $file_name, $file_path, $save_callback);
}
elseif ($name_parts['extension'] == 'js' && $api_version > POTX_API_5) {
// @todo: D7 context support.
_potx_parse_js_file($code, $file_name, $save_callback);
}
elseif ($name_parts['extension'] == 'twig' && $api_version > POTX_API_7) {
_potx_parse_twig_file($code, $file_name, $save_callback);
}
$constraint_extract = FALSE;
if (substr($name_parts['filename'], -10) == 'Constraint' && $api_version > POTX_API_7) {
$constraint_extract = TRUE;
}
// Extract raw PHP language tokens.
$raw_tokens = token_get_all($code);
unset($code);
// Remove whitespace and possible HTML (the later in templates for example),
// count line numbers so we can include them in the output.
$_potx_tokens = array();
$_potx_lookup = array();
$token_number = 0;
$line_number = 1;
foreach ($raw_tokens as $token) {
if (!is_array($token) || $token[0] != T_WHITESPACE && $token[0] != T_INLINE_HTML) {
if (is_array($token)) {
$token[] = $line_number;
$constraint_match = $constraint_extract && $token[0] == T_VARIABLE && strlen($token[1]) >= 7 && substr_compare($token[1], 'message', -7, 7, true) === 0;
// Fill array for finding token offsets quickly.
if (in_array($token[0], array(
T_STRING,
T_DOC_COMMENT,
)) || $token[0] == T_VARIABLE && $token[1] == '$t' || $constraint_match) {
// Give doc comments a specific key because their content varies.
$key = $token[0] == T_DOC_COMMENT ? 'T_DOC_COMMENT' : ($constraint_match ? 'T_POTX_CONSTRAINT' : $token[1]);
if (!isset($_potx_lookup[$key])) {
$_potx_lookup[$key] = array();
}
$_potx_lookup[$key][] = $token_number;
}
}
$_potx_tokens[] = $token;
$token_number++;
}
// Collect line numbers.
if (is_array($token)) {
$line_number += count(explode("\n", $token[1])) - 1;
}
else {
$line_number += count(explode("\n", $token)) - 1;
}
}
unset($raw_tokens);
// Regular t() calls with different usages.
if ($api_version > POTX_API_6) {
// Drupal 7 onwards supports context on t().
_potx_find_t_calls_with_context($file_name, $save_callback);
if ($api_version < POTX_API_8) {
// st() and $t() are supported up to Drupal 7.
_potx_find_t_calls_with_context($file_name, $save_callback, '$t', POTX_STRING_BOTH);
_potx_find_t_calls_with_context($file_name, $save_callback, 'st', POTX_STRING_INSTALLER);
}
else {
// TranslationWrapper added in Drupal 8.
_potx_find_t_calls_with_context($file_name, $save_callback, 'TranslationWrapper');
}
}
else {
// Context-less API up to Drupal 6.
_potx_find_t_calls($file_name, $save_callback);
_potx_find_t_calls($file_name, $save_callback, '$t', POTX_STRING_BOTH);
_potx_find_t_calls($file_name, $save_callback, 'st', POTX_STRING_INSTALLER);
}
if ($api_version < POTX_API_8) {
// This does not support context even in Drupal 7.
_potx_find_t_calls($file_name, $save_callback, '_locale_import_message', POTX_STRING_BOTH);
}
if ($api_version > POTX_API_5) {
// Watchdog calls have both of their arguments translated from Drupal 6.x.
// @todo Drupal 8 deprecated watchdog() but did not remove it yet.
_potx_find_watchdog_calls($file_name, $save_callback);
if ($api_version > POTX_API_7) {
// Logging calls may use a colorful set of methods now.
_potx_find_t_calls($file_name, $save_callback, 'debug');
_potx_find_t_calls($file_name, $save_callback, 'info');
_potx_find_t_calls($file_name, $save_callback, 'notice');
_potx_find_t_calls($file_name, $save_callback, 'warning');
_potx_find_t_calls($file_name, $save_callback, 'error');
_potx_find_t_calls($file_name, $save_callback, 'critical');
_potx_find_t_calls($file_name, $save_callback, 'alert');
_potx_find_t_calls($file_name, $save_callback, 'emergency');
_potx_find_log_calls($file_name, $save_callback);
}
}
else {
// Watchdog calls only have their first argument translated in Drupal 5.x
// and before.
_potx_find_t_calls($file_name, $save_callback, 'watchdog');
}
// Plurals need unique parsing.
_potx_find_format_plural_calls($file_name, $save_callback, 'format_plural', $api_version);
// Support for formatPlural() calls in Drupal 8+.
if ($api_version > POTX_API_7) {
_potx_find_format_plural_calls($file_name, $save_callback, 'formatPlural', $api_version);
}
if ($name_parts['extension'] == 'module') {
if ($api_version < POTX_API_7) {
_potx_find_perm_hook($file_name, $name_parts['filename'], $save_callback);
}
if ($api_version > POTX_API_5) {
// @todo: if tabs are not defined on the menu hook anymore, exclude this for 8.
_potx_find_menu_hooks($file_name, $name_parts['filename'], $save_callback);
}
}
// Support @Translation annotation (in doc comments) on Drupal 8+.
if ($api_version > POTX_API_7) {
_potx_find_translation_annotations($file_name, $save_callback);
}
if ($constraint_extract) {
_potx_find_constraint_messages($file_name, $save_callback);
}
// Special handling of some Drupal core files.
if ($api_version < POTX_API_8 && ($basename == 'locale.inc' && $api_version < POTX_API_7 || $basename == 'iso.inc')) {
_potx_find_language_names($file_name, $save_callback, $api_version);
}
elseif ($api_version > POTX_API_7 && $basename == 'LanguageManager.php') {
_potx_find_language_names($file_name, $save_callback, $api_version);
}
elseif ($basename == 'locale.module') {
// Applies to all Drupal versions, yay!
_potx_add_date_strings($file_name, $save_callback, $api_version);
}
elseif ($basename == 'common.inc') {
// Applies to all Drupal versions, yay!
_potx_add_format_interval_strings($file_name, $save_callback, $api_version);
}
elseif ($basename == 'system.module') {
// Applies to all Drupal versions, yay!
_potx_add_default_region_names($file_name, $save_callback, $api_version);
}
elseif ($basename == 'user.module' && $api_version < POTX_API_8) {
// Save default user role names (up to Drupal 7).
$save_callback('anonymous user', POTX_CONTEXT_NONE, $file_name);
$save_callback('authenticated user', POTX_CONTEXT_NONE, $file_name);
if ($api_version > POTX_API_6) {
// Administator role is included by default from Drupal 7.
$save_callback('administrator', POTX_CONTEXT_NONE, $file_name);
}
}
}