示例#1
0
 /**
  * Returns the themes supported by the given language
  *
  * The names returned are in the form that GeSHi reads them, i.e. they
  * are not nice human strings. If you want the human form, use
  * {@link GeSHi::getHumanThemeName()} on each name returned.
  *
  * @param  string  $language The language to get supported themes for
  * @param  boolean $return_human If <kbd>true</kbd>, returns an array of
  *                               theme name => human-readable name. Otherwise,
  *                               just return an array of theme names.
  * @return array A list of themes supported by the language. Note that
  *               they are _not_ in preferred order
  * @since 1.1.1
  * @todo  Make them in preferred order?
  * @todo  Expensive, maybe cache?
  */
 public static function themesSupportedBy($language, $return_human = false)
 {
     $themes = array();
     //geshi_dbg('GeSHi::themesSupportedBy(' . $language . ')', GESHI_DBG_API);
     $language = GeSHi::_cleanLanguageName($language);
     //geshi_dbg('  language now ' . $language, GESHI_DBG_API);
     $dh = opendir(GESHI_THEMES_ROOT);
     while (false !== ($theme_folder = readdir($dh))) {
         if ('.' == $theme_folder || '..' == $theme_folder) {
             continue;
         }
         if (is_readable(GESHI_THEMES_ROOT . $theme_folder . '/' . $language . '.php')) {
             if ($return_human) {
                 $themes[$theme_folder] = GeSHi::getHumanThemeName($theme_folder);
             } else {
                 $themes[] = $theme_folder;
             }
             // Check for subthemes
             $dh2 = opendir(GESHI_THEMES_ROOT . $theme_folder);
             while (false !== ($subtheme_folder = readdir($dh2))) {
                 if ('.' == $subtheme_folder || '..' == $subtheme_folder || !is_dir(GESHI_THEMES_ROOT . $theme_folder . '/' . $subtheme_folder)) {
                     continue;
                 }
                 if (is_readable(GESHI_THEMES_ROOT . $theme_folder . '/' . $subtheme_folder . '/' . $language . '.php')) {
                     $subtheme_name = "{$theme_folder}/{$subtheme_folder}";
                     if ($return_human) {
                         $themes[$subtheme_name] = GeSHi::getHumanThemeName($subtheme_name);
                     } else {
                         $themes[] = $subtheme_name;
                     }
                 }
             }
         }
     }
     return $themes;
 }