Exemplo n.º 1
0
 /**
  * Gets language information and stores it for later use
  *
  * @param string The filename of the language file you want to load
  * @since 1.0.0
  * @access private
  * @todo Needs to load keys for lexic permissions for keywords, regexps etc
  */
 function load_language($file_name)
 {
     if ($file_name == $this->loaded_language) {
         // this file is already loaded!
         return;
     }
     //Prepare some stuff before actually loading the language file
     $this->loaded_language = $file_name;
     $this->parse_cache_built = false;
     $this->enable_highlighting();
     $language_data = array();
     //Load the language file
     require $file_name;
     // Perhaps some checking might be added here later to check that
     // $language data is a valid thing but maybe not
     $this->language_data = $language_data;
     // Set strict mode if should be set
     if ($this->language_data['STRICT_MODE_APPLIES'] == GESHI_ALWAYS) {
         $this->strict_mode = true;
     }
     // Set permissions for all lexics to true
     // so they'll be highlighted by default
     foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
         if (!empty($this->language_data['KEYWORDS'][$key])) {
             $this->lexic_permissions['KEYWORDS'][$key] = true;
         } else {
             $this->lexic_permissions['KEYWORDS'][$key] = false;
         }
     }
     foreach (array_keys($this->language_data['COMMENT_SINGLE']) as $key) {
         $this->lexic_permissions['COMMENTS'][$key] = true;
     }
     foreach (array_keys($this->language_data['REGEXPS']) as $key) {
         $this->lexic_permissions['REGEXPS'][$key] = true;
     }
     // for BenBE and future code reviews:
     // we can use empty here since we only check for existance and emptiness of an array
     // if it is not an array at all but rather false or null this will work as intended as well
     // even if $this->language_data['PARSER_CONTROL'] is undefined this won't trigger a notice
     if (!empty($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'])) {
         foreach ($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'] as $flag => $value) {
             // it's either true or false and maybe is true as well
             $perm = $value !== GESHI_NEVER;
             if ($flag == 'ALL') {
                 $this->enable_highlighting($perm);
                 continue;
             }
             if (!isset($this->lexic_permissions[$flag])) {
                 // unknown lexic permission
                 continue;
             }
             if (is_array($this->lexic_permissions[$flag])) {
                 foreach ($this->lexic_permissions[$flag] as $key => $val) {
                     $this->lexic_permissions[$flag][$key] = $perm;
                 }
             } else {
                 $this->lexic_permissions[$flag] = $perm;
             }
         }
         unset($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS']);
     }
     //NEW in 1.0.8: Allow styles to be loaded from a separate file to override defaults
     $style_filename = substr($file_name, 0, -4) . '.style.php';
     if (is_readable($style_filename)) {
         //Clear any style_data that could have been set before ...
         if (isset($style_data)) {
             unset($style_data);
         }
         //Read the Style Information from the style file
         include $style_filename;
         //Apply the new styles to our current language styles
         if (isset($style_data) && is_array($style_data)) {
             $this->language_data['STYLES'] = GeSHi::merge_arrays($this->language_data['STYLES'], $style_data);
         }
     }
     // Set default class for CSS
     $this->overall_class = $this->language;
 }