| 
<?phpfunction check_plain($text) {
 static $php525;
 
 if (!isset($php525)) {
 $php525 = version_compare(PHP_VERSION, '5.2.5', '>=');
 }
 // We duplicate the preg_match() to validate strings as UTF-8 from
 // drupal_validate_utf8() here. This avoids the overhead of an additional
 // function call, since check_plain() may be called hundreds of times during
 // a request. For PHP 5.2.5+, this check for valid UTF-8 should be handled
 // internally by PHP in htmlspecialchars().
 // @see http://www.php.net/releases/5_2_5.php
 // @todo remove this when support for either IE6 or PHP < 5.2.5 is dropped.
 
 if ($php525) {
 return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
 }
 return (preg_match('/^./us', $text) == 1) ? htmlspecialchars($text, ENT_QUOTES, 'UTF-8') : '';
 }
 
 
 function t($string, $args = array(), $langcode = NULL) {
 global $language;
 static $custom_strings;
 
 $langcode = isset($langcode) ? $langcode : $language->language;
 
 // First, check for an array of customized strings. If present, use the array
 // *instead of* database lookups. This is a high performance way to provide a
 // handful of string replacements. See settings.php for examples.
 // Cache the $custom_strings variable to improve performance.
 if (!isset($custom_strings[$langcode])) {
 $custom_strings[$langcode] = variable_get('locale_custom_strings_'. $langcode, array());
 }
 // Custom strings work for English too, even if locale module is disabled.
 if (isset($custom_strings[$langcode][$string])) {
 $string = $custom_strings[$langcode][$string];
 }
 // Translate with locale module if enabled.
 elseif (function_exists('locale') && $langcode != 'en') {
 $string = locale($string, $langcode);
 }
 if (empty($args)) {
 return $string;
 }
 else {
 // Transform arguments before inserting them.
 foreach ($args as $key => $value) {
 switch ($key[0]) {
 case '@':
 // Escaped only.
 $args[$key] = check_plain($value);
 break;
 
 case '%':
 default:
 // Escaped and placeholder.
 $args[$key] = theme('placeholder', $value);
 break;
 
 case '!':
 // Pass-through.
 }
 }
 return strtr($string, $args);
 }
 }
 
 function format_plural($count, $singular, $plural, $args = array(), $langcode = NULL) {
 $args['@count'] = $count;
 if ($count == 1) {
 return t($singular, $args, $langcode);
 }
 
 // Get the plural index through the gettext formula.
 $index = (function_exists('locale_get_plural')) ? locale_get_plural($count, $langcode) : -1;
 // Backwards compatibility.
 if ($index < 0) {
 return t($plural, $args, $langcode);
 }
 else {
 switch ($index) {
 case "0":
 return t($singular, $args, $langcode);
 case "1":
 return t($plural, $args, $langcode);
 default:
 unset($args['@count']);
 $args['@count['. $index .']'] = $count;
 return t(strtr($plural, array('@count' => '@count['. $index .']')), $args, $langcode);
 }
 }
 }
 
 function drupal_add_css($path = NULL, $type = 'module', $media = 'all', $preprocess = TRUE) {
 static $css = array();
 global $language;
 
 // Create an array of CSS files for each media type first, since each type needs to be served
 // to the browser differently.
 if (isset($path)) {
 // This check is necessary to ensure proper cascading of styles and is faster than an asort().
 if (!isset($css[$media])) {
 $css[$media] = array('module' => array(), 'theme' => array());
 }
 $css[$media][$type][$path] = $preprocess;
 
 // If the current language is RTL, add the CSS file with RTL overrides.
 if ($language->direction == LANGUAGE_RTL) {
 $rtl_path = str_replace('.css', '-rtl.css', $path);
 if (file_exists($rtl_path)) {
 $css[$media][$type][$rtl_path] = $preprocess;
 }
 }
 }
 
 return $css;
 }
 
 |