]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-8955 Multilang filter doesn't accept different attribute order; merged from MOODL...
authorskodak <skodak>
Tue, 20 Mar 2007 17:14:18 +0000 (17:14 +0000)
committerskodak <skodak>
Tue, 20 Mar 2007 17:14:18 +0000 (17:14 +0000)
filter/multilang/filter.php

index 22bd3c499474ff43da6ebecd098305411f37a009..aae004295672dc3397bd3d96a483681f3efe71bd 100644 (file)
@@ -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: <span class="multilang" lang="en"> (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 lang="[a-zA-Z0-9_-]+" class="multilang">.*?<\/span>)(\s*<span lang="[a-zA-Z0-9_-]+" class="multilang">.*?<\/span>)+/is';
+        $search = '/(<span(\s+lang="[a-zA-Z0-9_-]+"|\s+class="multilang"){2}\s*>.*?<\/span>)(\s*<span(\s+lang="[a-zA-Z0-9_-]+"|\s+class="multilang"){2}\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 lang="([a-zA-Z0-9_-]+)" class="multilang">(.*?)<\/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) {