| 
<?phpdeclare(strict_types=1);
 
 use Airship\Engine\{
 Gears,
 State,
 Translation
 };
 /**
 * These functions are defined in the global scope.
 */
 
 /**
 * I. GENERAL FUNCTIONS
 */
 /**
 * Returns true if every member of an array is NOT another array
 *
 * @param array $source
 * @return bool
 */
 function is1DArray(array $source): bool
 {
 return \count($source) === \count($source, \COUNT_RECURSIVE);
 }
 
 /**
 * Returns true if every member of an array is a 1-dimensional array.
 *
 * @param array $source
 * @param bool $allow1D Permit non-array children?
 * @param bool $constantTime Don't exit early
 * @return bool
 */
 function is2DArray(array $source, bool $allow1D = false, bool $constantTime = false): bool
 {
 $ret = !empty($source);
 foreach ($source as $row) {
 if (!\is_array($row)) {
 if ($allow1D) {
 continue;
 }
 if (!$constantTime) {
 return false;
 }
 $ret = false;
 }
 if (!\is1DArray($row)) {
 if (!$constantTime) {
 return false;
 }
 $ret = false;
 }
 }
 return $ret;
 }
 
 /**
 * II. TRANSLATION FUNCTIONS
 */
 if (!\function_exists('__')) {
 /**
 * Translate this string.
 *
 * @param string $text
 * @param string $domain
 * @param string[] ...$params
 * @return string
 */
 function __(string $text, string $domain = 'default', ...$params)
 {
 static $gear = null;
 if ($gear === null) {
 $gear = Gears::get('Translation');
 }
 if (!empty($params)) {
 \array_walk($params, '\\Airship\ViewFunctions\\get_purified');
 }
 return @\sprintf(
 $gear->literal($text, $domain),
 ...$params
 );
 }
 }
 
 if (!\function_exists('_e')) {
 /**
 * Translate and echo a string of text
 *
 * @param string $text String to translate
 * @param string[] ...$params
 * @return void
 */
 function _e(string $text, ...$params)
 {
 if (!empty($params)) {
 \array_walk($params, '\\Airship\ViewFunctions\\get_purified');
 }
 /** @noinspection PhpStrictTypeCheckingInspection */
 echo __($text, ...$params);
 }
 }
 
 if (!\function_exists('_n')) {
 /**
 * Print a number (great for handling plurals)
 *
 * @param string $text Text for a singular value
 * @param string $pltext Text for a plural value
 * @param int $arg The argument that decides which string
 * @param mixed ...$params
 * @return string
 */
 function _n(string $text, string $pltext, int $arg, ...$params) : string
 {
 if (!empty($params)) {
 \array_walk($params, '\\Airship\ViewFunctions\\get_purified');
 }
 if (abs($arg) == 1) {
 /** @noinspection PhpStrictTypeCheckingInspection */
 return __($text, ...$params);
 } else {
 /** @noinspection PhpStrictTypeCheckingInspection */
 return __($pltext, ...$params);
 }
 }
 }
 
 if (!\function_exists('trk')) {
 /**
 * Translation (lookup table based on a key)
 *
 * @param string $key
 * @param array<int, string> ...$params
 * @return string
 * @throws TypeError
 */
 function trk(string $key, ...$params): string
 {
 static $gear = null;
 if ($gear === null) {
 $gear = Gears::get('Translation');
 }
 if (!$gear instanceof Translation) {
 throw new TypeError('Translation object is the wrong type');
 }
 if (!empty($params)) {
 \array_walk($params, '\\Airship\ViewFunctions\\get_purified');
 }
 $state = State::instance();
 return $gear->lookup(
 $key,
 (string) ($state->lang ?? 'en-us'),
 ...$params
 );
 }
 }
 
 |