From 4b7f9e7005c4562f8b4b554ea5ea53fb1ebf804a Mon Sep 17 00:00:00 2001
From: Tom N Harris <tnharris@whoopdedo.org>
Date: Thu, 28 May 2009 23:54:38 +0200
Subject: [PATCH] Change expensive uses of split to the much faster explode.

darcs-hash:20090528215438-6942e-bf1b875e689ade6bd1a17e3d812ce16bf35c84a6.gz
---
 inc/auth.php             |  4 ++--
 inc/auth/plain.class.php |  4 ++--
 inc/common.php           |  6 +++---
 inc/mail.php             |  2 +-
 inc/pageutils.php        |  2 +-
 inc/parser/handler.php   | 12 +++++++-----
 inc/parser/lexer.php     |  2 +-
 inc/parser/metadata.php  |  2 +-
 8 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/inc/auth.php b/inc/auth.php
index 23031a29c..d497c89d6 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -166,7 +166,7 @@ function auth_login($user,$pass,$sticky=false,$silent=false){
   }else{
     // read cookie information
     $cookie = base64_decode($_COOKIE[DOKU_COOKIE]);
-    list($user,$sticky,$pass) = split('\|',$cookie,3);
+    list($user,$sticky,$pass) = explode('|',$cookie,3);
     // get session info
     $session = $_SESSION[DOKU_COOKIE]['auth'];
     if($user && $pass){
@@ -744,7 +744,7 @@ function updateprofile() {
   if ($result = $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes))) {
     // update cookie and session with the changed data
     $cookie = base64_decode($_COOKIE[DOKU_COOKIE]);
-    list($user,$sticky,$pass) = split('\|',$cookie,3);
+    list($user,$sticky,$pass) = explode('|',$cookie,3);
     if ($changes['pass']) $pass = PMA_blowfish_encrypt($changes['pass'],auth_cookiesalt());
 
     auth_setCookie($_SERVER['REMOTE_USER'],$pass,(bool)$sticky);
diff --git a/inc/auth/plain.class.php b/inc/auth/plain.class.php
index 02175d962..68976287a 100644
--- a/inc/auth/plain.class.php
+++ b/inc/auth/plain.class.php
@@ -278,8 +278,8 @@ class auth_plain extends auth_basic {
         $line = trim($line);
         if(empty($line)) continue;
 
-        $row    = split(":",$line,5);
-        $groups = split(",",$row[4]);
+        $row    = explode(":",$line,5);
+        $groups = array_values(array_filter(explode(",",$row[4])));
 
         $this->users[$row[0]]['pass'] = $row[1];
         $this->users[$row[0]]['name'] = urldecode($row[2]);
diff --git a/inc/common.php b/inc/common.php
index dfc563b7f..5c95115a6 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -884,7 +884,7 @@ function pageTemplate($data){
  * @author Andreas Gohr <andi@splitbrain.org>
  */
 function rawWikiSlices($range,$id,$rev=''){
-  list($from,$to) = split('-',$range,2);
+  list($from,$to) = explode('-',$range,2);
   $text = io_readWikiPage(wikiFN($id, $rev), $id, $rev);
   if(!$from) $from = 0;
   if(!$to)   $to   = strlen($text)+1;
@@ -1101,8 +1101,8 @@ function notify($id,$who,$rev='',$summary='',$minor=false,$replace=array()){
     $subject = $lang['mail_changed'].' '.$id;
     $text = str_replace('@OLDPAGE@',wl($id,"rev=$rev",true,'&'),$text);
     require_once(DOKU_INC.'inc/DifferenceEngine.php');
-    $df  = new Diff(split("\n",rawWiki($id,$rev)),
-                    split("\n",rawWiki($id)));
+    $df  = new Diff(explode("\n",rawWiki($id,$rev)),
+                    explode("\n",rawWiki($id)));
     $dformat = new UnifiedDiffFormatter();
     $diff    = $dformat->format($df);
   }else{
diff --git a/inc/mail.php b/inc/mail.php
index f127ea989..61d938cf8 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -125,7 +125,7 @@ function _mail_send_action($data) {
  */
 function mail_encode_address($string,$header='',$names=true){
   $headers = '';
-  $parts = split(',',$string);
+  $parts = explode(',',$string);
   foreach ($parts as $part){
     $part = trim($part);
 
diff --git a/inc/pageutils.php b/inc/pageutils.php
index c10272af3..65b140ea3 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -435,7 +435,7 @@ function resolve_pageid($ns,&$page,&$exists){
 
   //keep hashlink if exists then clean both parts
   if (strpos($page,'#')) {
-    list($page,$hash) = split('#',$page,2);
+    list($page,$hash) = explode('#',$page,2);
   } else {
     $hash = '';
   }
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 5bcb3c2f0..83f837b70 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -363,7 +363,7 @@ class Doku_Handler {
     function code($match, $state, $pos) {
         switch ( $state ) {
             case DOKU_LEXER_UNMATCHED:
-                $matches = preg_split('/>/u',$match,2);
+                $matches = explode('>',$match,2);
                 $matches[0] = trim($matches[0]);
                 if ( trim($matches[0]) == '' ) {
                     $matches[0] = NULL;
@@ -444,7 +444,7 @@ class Doku_Handler {
         $link = preg_replace(array('/^\[\[/','/\]\]$/u'),'',$match);
 
         // Split title from URL
-        $link = preg_split('/\|/u',$link,2);
+        $link = explode('|',$link,2);
         if ( !isset($link[1]) ) {
             $link[1] = NULL;
         } else if ( preg_match('/^\{\{[^\}]+\}\}$/',$link[1]) ) {
@@ -457,7 +457,7 @@ class Doku_Handler {
 
         if ( preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$link[0]) ) {
         // Interwiki
-            $interwiki = preg_split('/>/u',$link[0]);
+            $interwiki = explode('>',$link[0],2);
             $this->_addCall(
                 'interwikilink',
                 array($link[0],$link[1],strtolower($interwiki[0]),$interwiki[1]),
@@ -638,7 +638,7 @@ function Doku_Handler_Parse_Media($match) {
     $link = preg_replace(array('/^\{\{/','/\}\}$/u'),'',$match);
 
     // Split title from URL
-    $link = preg_split('/\|/u',$link,2);
+    $link = explode('|',$link,2);
 
 
     // Check alignment
@@ -997,7 +997,9 @@ class Doku_Handler_List {
         } else {
             $type = 'o';
         }
-        return count(explode('  ',str_replace("\t",'  ',$match)));
+        // Is the +1 needed? It used to be count(explode(...))
+        // but I don't think the number is seen outside this handler
+        return substr_count(str_replace("\t",'  ',$match), '  ') + 1;
     }
 }
 
diff --git a/inc/parser/lexer.php b/inc/parser/lexer.php
index 86e818d9c..d2aaf407b 100644
--- a/inc/parser/lexer.php
+++ b/inc/parser/lexer.php
@@ -513,7 +513,7 @@ class Doku_Lexer {
         // modes starting with plugin_ are all handled by the same
         // handler but with an additional parameter
         if(substr($handler,0,7)=='plugin_'){
-          list($handler,$plugin) = split('_',$handler,2);
+          list($handler,$plugin) = explode('_',$handler,2);
               return $this->_parser->$handler($content, $is_match, $pos, $plugin);
         }
 
diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php
index 79d774106..88d531af1 100644
--- a/inc/parser/metadata.php
+++ b/inc/parser/metadata.php
@@ -315,7 +315,7 @@ class Doku_Renderer_metadata extends Doku_Renderer {
 
     // first resolve and clean up the $id
     resolve_pageid(getNS($ID), $id, $exists);
-    list($page, $hash) = split('#', $id, 2);
+    list($page, $hash) = explode('#', $id, 2);
 
     // set metadata
     $this->meta['relation']['references'][$page] = $exists;
-- 
GitLab