From: skodak Date: Tue, 20 Mar 2007 17:14:18 +0000 (+0000) Subject: MDL-8955 Multilang filter doesn't accept different attribute order; merged from MOODL... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=244691e25056025b95e80fa3d5ca26deb700bc19;p=moodle.git MDL-8955 Multilang filter doesn't accept different attribute order; merged from MOODLE_18_STABLE --- diff --git a/filter/multilang/filter.php b/filter/multilang/filter.php index 22bd3c4994..aae0042956 100644 --- a/filter/multilang/filter.php +++ b/filter/multilang/filter.php @@ -41,10 +41,12 @@ function multilang_filter($courseid, $text) { // [pj] I don't know about you but I find this new implementation funny :P // [skodak] I was laughing while rewriting it ;-) + // [nicolasconnault] Should support inverted attributes: (Doesn't work curently) + // [skodak] it supports it now, though it is slower - any better idea? if (empty($CFG->filter_multilang_force_old) and !empty($CFG->filter_multilang_converted)) { // new syntax - $search = '/(.*?<\/span>)(\s*.*?<\/span>)+/is'; + $search = '/(.*?<\/span>)(\s*.*?<\/span>)+/is'; } else { // old syntax $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.*?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.*?<\/(?:lang|span)>)+/is'; @@ -67,15 +69,12 @@ function multilang_filter_impl($langblock) { $parentlang = $parentcache[$mylang]; } - if (empty($CFG->filter_multilang_force_old) and !empty($CFG->filter_multilang_converted)) { - // new syntax - $searchtosplit = '/(.*?)<\/span>/is'; - } else { - // old syntax - $searchtosplit = '/<(?:lang|span) lang="([a-zA-Z0-9_-]*)".*?>(.*?)<\/(?:lang|span)>/is'; - } + $searchtosplit = '/<(?:lang|span)[^>]+lang="([a-zA-Z0-9_-]+)"[^>]*>(.*?)<\/(?:lang|span)>/is'; - preg_match_all($searchtosplit, $langblock[0], $rawlanglist); + if (!preg_match_all($searchtosplit, $langblock[0], $rawlanglist)) { + //skip malformed blocks + return $langblock[0]; + } $langlist = array(); foreach ($rawlanglist[1] as $index=>$lang) {