コード例 #1
0
 public static function validate_regex($regex, $element)
 {
     if (is_string($regex) && @get_class($element) == CRAYON_ELEMENT_CLASS) {
         // If the (?alt) tag has been used, insert the file into the regex
         $file = self::regex_match('#\\(\\?alt:(.+?)\\)#', $regex);
         if (count($file) == 2) {
             // Element 0 has full match, 1 has captured groups
             for ($i = 0; $i < count($file[1]); $i++) {
                 $file_lines = CrayonUtil::lines(dirname($element->path()) . crayon_s() . $file[1][$i], 'rcwh');
                 if ($file_lines !== FALSE) {
                     $file_lines = implode('|', $file_lines);
                     // If any spaces exist, treat them as whitespace
                     $file_lines = preg_replace('#[ \\t]+#msi', '\\s+', $file_lines);
                     $regex = str_replace($file[0][$i], "(?:{$file_lines})", $regex);
                 } else {
                     CrayonLog::syslog("Parsing of '{$element->path()}' failed, an (?alt) tag failed for the element '{$element->name()}'");
                     return FALSE;
                 }
             }
         }
         // If the (?default:element) function is used, replace the regex with the default, if exists
         $def = self::regex_match('#\\(\\?default(?:\\:(\\w+))?\\)#', $regex);
         if (count($def) == 2) {
             // Load default language
             $default = CrayonResources::langs()->get(CrayonLangs::DEFAULT_LANG);
             // If default has not been loaded, we can't use it, skip the element
             if (!$default) {
                 CrayonLog::syslog("Could not use default regex in the element '{$element->name()}' in '{$element->path()}'");
                 return FALSE;
             }
             for ($i = 0; $i < count($def[1]); $i++) {
                 // If an element has been provided
                 $element_name = !empty($def[1][$i]) ? $def[1][$i] : $element->name();
                 if (($default_element = $default->element($element_name)) != FALSE) {
                     $regex = str_replace($def[0][$i], '(?:' . $default_element->regex() . ')', $regex);
                 } else {
                     CrayonLog::syslog("The language at '{$element->path()}' referred to the Default Language regex for element '{$element->name()}', which did not exist.");
                     return FALSE;
                 }
             }
         }
         // If the (?html) tag is used, escape characters in html (<, > and &)
         $html = self::regex_match('#\\(\\?html:(.+?)\\)#', $regex);
         if (count($html) == 2) {
             for ($i = 0; $i < count($html[1]); $i++) {
                 $regex = str_replace($html[0][$i], htmlentities($html[1][$i]), $regex);
             }
         }
         // Ensure all parenthesis are atomic to avoid conflicting with element matches
         $regex = CrayonUtil::esc_atomic($regex);
         // Escape #, this is our delimiter
         $regex = CrayonUtil::esc_hash($regex);
         // Test if regex is valid
         if (@preg_match("#{$regex}#", '') === FALSE) {
             CrayonLog::syslog("The regex for the element '{$element->name()}' in '{$element->path()}' is not valid.");
             return FALSE;
         }
         return $regex;
     } else {
         return '';
     }
 }
コード例 #2
0
 private static function init_tags_regex($force = FALSE, $flags = NULL, &$tags_regex = NULL)
 {
     CrayonSettingsWP::load_settings();
     self::init_tag_bits();
     // Default output
     if ($tags_regex === NULL) {
         $tags_regex =& self::$tags_regex;
     }
     if ($force || $tags_regex === "") {
         // Check which tags are in $flags. If it's NULL, then all flags are true.
         $in_flag = self::in_flag($flags);
         if ($in_flag[CrayonSettings::CAPTURE_MINI_TAG] && CrayonGlobalSettings::val(CrayonSettings::CAPTURE_MINI_TAG) || $force || ($in_flag[CrayonSettings::INLINE_TAG] && (CrayonGlobalSettings::val(CrayonSettings::INLINE_TAG) && CrayonGlobalSettings::val(CrayonSettings::INLINE_TAG_CAPTURE)) || $force)) {
             $aliases = CrayonResources::langs()->ids_and_aliases();
             self::$alias_regex = '';
             for ($i = 0; $i < count($aliases); $i++) {
                 $alias = $aliases[$i];
                 $alias_regex = CrayonUtil::esc_hash(CrayonUtil::esc_regex($alias));
                 if ($i != count($aliases) - 1) {
                     $alias_regex .= '|';
                 }
                 self::$alias_regex .= $alias_regex;
             }
         }
         // Add other tags
         $tags_regex = '#(?<!\\$)(?:(\\s*\\[\\s*crayon\\b)';
         // TODO this is duplicated in capture_crayons()
         $tag_regexes = array(CrayonSettings::CAPTURE_MINI_TAG => '(\\[\\s*(' . self::$alias_regex . ')\\b)', CrayonSettings::CAPTURE_PRE => '(<\\s*pre\\b)', CrayonSettings::INLINE_TAG => '(' . self::REGEX_INLINE_CLASS . ')' . '|(\\{\\s*(' . self::$alias_regex . ')\\b([^\\}]*)\\})', CrayonSettings::PLAIN_TAG => '(\\s*\\[\\s*plain\\b)', CrayonSettings::BACKQUOTE => '(`[^`]*`)');
         foreach ($tag_regexes as $tag => $regex) {
             if ($in_flag[$tag] && (CrayonGlobalSettings::val($tag) || $force)) {
                 $tags_regex .= '|' . $regex;
             }
         }
         $tags_regex .= ')#msi';
     }
 }
コード例 #3
0
 private static function init_tags_regex()
 {
     if (!self::$is_tags_regex_init) {
         if (CrayonGlobalSettings::val(CrayonSettings::CAPTURE_MINI_TAG) || CrayonGlobalSettings::val(CrayonSettings::INLINE_TAG)) {
             $aliases = CrayonResources::langs()->ids_and_aliases();
             for ($i = 0; $i < count($aliases); $i++) {
                 $alias = $aliases[$i];
                 $alias_regex = CrayonUtil::esc_hash(CrayonUtil::esc_regex($alias));
                 if ($i != count($aliases) - 1) {
                     $alias_regex .= '|';
                 }
                 self::$alias_regex .= $alias_regex;
             }
         }
         // Add other tags
         self::$tags_regex = '#(\\s*\\[\\s*crayon\\b)';
         if (CrayonGlobalSettings::val(CrayonSettings::CAPTURE_MINI_TAG)) {
             self::$tags_regex .= '|([\\[]\\s*(' . self::$alias_regex . '))';
         }
         if (CrayonGlobalSettings::val(CrayonSettings::CAPTURE_PRE)) {
             self::$tags_regex .= '|(<\\s*pre\\b)';
         }
         if (CrayonGlobalSettings::val(CrayonSettings::INLINE_TAG)) {
             self::$tags_regex .= '|(' . self::REGEX_INLINE_CLASS . ')' . '|([\\{]\\s*(' . self::$alias_regex . '))';
         }
         if (CrayonGlobalSettings::val(CrayonSettings::PLAIN_TAG)) {
             self::$tags_regex .= '|(\\s*\\[\\s*plain\\b)';
         }
         if (CrayonGlobalSettings::val(CrayonSettings::BACKQUOTE)) {
             self::$tags_regex .= '|(`[^`]*`)';
         }
         self::$tags_regex .= '#msi';
         self::$is_tags_regex_init = TRUE;
     }
 }