uw              Thu Mar 15 11:34:13 2001 EDT

  Modified files:              
    /php4/pear/XML      Parser.php 
  Log:
  - made it work without warnings
  - handler methods are now configurable
  - added startHandler() and endHandler()
    "event" is the default handling mode and calls these methods. Implemented them 
    as "abstract" methods.
  
  
  
Index: php4/pear/XML/Parser.php
diff -u php4/pear/XML/Parser.php:1.8 php4/pear/XML/Parser.php:1.9
--- php4/pear/XML/Parser.php:1.8        Thu Mar 15 10:39:17 2001
+++ php4/pear/XML/Parser.php    Thu Mar 15 11:34:13 2001
@@ -66,6 +66,21 @@
     */
     var $mode;
     
+    
+    /**
+    * Mapping from expat handler function to class method.
+    *
+    * @var  array
+    */        
+    var $handler = array(
+                            "character_data_handler"            => "cdataHandler",
+                            "default_handler"                   => "defaultHandler",
+                            "processing_instruction_handler"    => "piHandler",
+                            "unparsed_entitry_decl_handler"     => "unparsedHandler",
+                            "notation_decl_handler"             => "notationHandler",
+                            "external_entity_ref_handler"       => "entityrefHandler"
+                        );
+    
 
     // }}}
     // {{{ constructor()
@@ -99,69 +114,37 @@
 
     // {{{ setMode()
 
-    /**
-    *
+        /**
+    * Sets the mode and all handler.
+    *  
     * @param    string
-    * @access   public
+    * @see      $handler
     */
     function setMode($mode) {
     
         $this->mode = $mode;
         
-        $xp = $this->parser;
-        xml_set_object($xp, $this);
+        xml_set_object($this->parser, $this);
         
         switch ($mode) {
         
             case "func":
-                xml_set_element_handler($xp, "funcStartHandler", "funcEndHandler");
+                xml_set_element_handler($this->parser, "funcStartHandler", 
+"funcEndHandler");
                 break;
                 
             case "event":
-                if (method_exists($this, "startHandler") ||
-                    method_exists($this, "endHandler")) {
-                    xml_set_element_handler($xp, "startHandler", "endHandler");
-                }
+                xml_set_element_handler($this->parser, "startHandler", "endHandler");
                 break;
         }
-        
-        if (method_exists($this, "cdataHandler")) {
-            xml_set_character_data_handler($xp, "cdataHandler");
-        } else {
-            xml_set_character_data_handler($xp, "");
-        }
 
-        if (method_exists($this, "defaultHandler")) {
-            xml_set_default_handler($xp, "defaultHandler");
-        } else {
-            xml_set_default_handler($xp, "");
-        }
-
-        if (method_exists($this, "piHandler")) {
-            xml_set_processing_instruction_handler($xp, "piHandler");
-        } else {
-            xml_set_processing_instruction_handler($xp, "");
-        }
-
-        if (method_exists($this, "unparsedHandler")) {
-            xml_set_unparsed_entity_decl_handler($xp, "unparsedHandler");
-        } else {
-            xml_set_unparsed_entity_decl_handler($xp, "");
-        }
-        
-        if (method_exists($this, "notationHandler")) {
-            xml_set_notation_decl_handler($xp, "notationHandler");
-        } else {
-            xml_set_notation_decl_handler($xp, "");
-        }
-        
-        if (method_exists($this, "entityrefHandler")) {
-            xml_set_external_entity_ref_handler($xp, "entityrefHandler");
-        } else {
-            xml_set_external_entity_ref_handler($xp, "");
-        }
-        
+        foreach ($this->handler as $xml_func => $method)
+            if (method_exists($this, $method)) {
+                $xml_func = "xml_set_" . $xml_func;
+                $xml_func($this->parser, $method);    
+            }
+            
     }
+
     // }}}
     // {{{ setInputFile()
 
@@ -281,7 +264,25 @@
         }
         
     }
-
+    
+    /**
+    * 
+    * @abstract
+    */
+    function StartHandler($xp, $elem, $attribs) {
+        return NULL;
+    } 
+    
+    
+    /**
+    *
+    * @abstract
+    */
+    function EndHandler($xp, $elem) {
+        return NULL;
+    }
+    
+    
     // }}}
 }
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to