public static function format_mixed_code($code, $language, $hl) { self::$curr = $hl; self::$delim_pieces = array(); // Remove crayon internal element from INPUT code $code = preg_replace('#' . CrayonParser::CRAYON_ELEMENT_REGEX_CAPTURE . '#msi', '', $code); if (self::$delimiters == NULL) { self::$delimiters = CrayonResources::langs()->delimiters(); } // Find all delimiters in all languages if (self::$delim_regex == NULL) { self::$delim_regex = '#(' . implode(')|(', array_values(self::$delimiters)) . ')#msi'; } // Extract delimited code, replace with internal elements $internal_code = preg_replace_callback(self::$delim_regex, 'CrayonFormatter::delim_to_internal', $code); // Format with given language $formatted_code = CrayonFormatter::format_code($internal_code, $language, $hl); // Replace internal elements with delimited pieces $formatted_code = preg_replace_callback('#\\{\\{crayon-internal:(\\d+)\\}\\}#', 'CrayonFormatter::internal_to_code', $formatted_code); return $formatted_code; }