"); } if (!is_readable($attr["src"])) { return PEAR::raiseError("Cannot read 'src' file '$attr[src]' in "); } } } function tagend_function_code($attr, $data, $line=0, $file="") { if (isset($attr["src"])) { return $this->helper->setCode(CodeGen_Tools_IndentC::linetrim(file_get_contents($attr["src"]))); } else { return $this->helper->setCode($data, $line, $file); } } function tagstart_function_notest($attr) { return $this->noAttributes($attr); } function tagend_function_notest($attr, $data) { return $this->helper->setTestCode(""); } function tagstart_function_test($attr) { return $this->noAttributes($attr); } function tagstart_function_test_description($attr) { return $this->noAttributes($attr); } function tagend_function_test_description($attr, $data) { return $this->helper->setTestDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_code($attr) { return $this->noAttributes($attr); } function tagend_function_test_code($attr, $data) { return $this->helper->setTestCode(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_result($attr) { return $this->checkAttributes($attr, array("mode")); } function tagend_function_test_result($attr, $data) { return $this->helper->setTestResult(CodeGen_Tools_IndentC::linetrim($data), @$attr['mode']); } function tagstart_function_test_ini($attr) { return $this->noAttributes($attr); } function tagend_function_test_ini($attr, $data) { return $this->helper->setTestIni(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_skipif($attr) { return $this->noAttributes($attr); } function tagend_function_test_skipif($attr, $data) { return $this->helper->setTestSkipIf(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_extension_function($attr, $data) { $err = $this->extension->addFunction($this->helper); $this->popHelper(); return $err; } function tagend_extension_functions_function($attr, $data) { return $this->tagend_extension_function($attr, $data); } function tagend_group_function($attr, $data) { return $this->tagend_extension_function($attr, $data); } function tagstart_functions($attr) { return $this->noAttributes($attr); } function tagstart_extension_resource($attr) { $err = $this->checkAttributes($attr, array("name", "payload", "alloc", "if")); if (PEAR::isError($err)) { return $err; } $this->pushHelper(new CodeGen_PECL_Element_Resource); if (isset($attr["name"])) { $err = $this->helper->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for resource missing"); } if (isset($attr["payload"])) { $err = $this->helper->setPayload($attr["payload"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("payload attribut for resource missing"); } if (isset($attr["alloc"])) { $value = $this->toBool($attr["alloc"], "alloc"); if (PEAR::isError($value)) { return $value; } $err = $this->helper->setAlloc($value); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $this->helper->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $this->helper->addIfCondition($if); } } return true; } function tagstart_resources_resource($attr) { return $this->tagstart_extension_resource($attr); } function tagstart_group_resource($attr) { return $this->tagstart_extension_resource($attr); } function tagend_resource_destruct($attr, $data) { return $this->helper->setDestruct(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_resource_description($attr, $data) { return $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_extension_resource($attr, $data) { $err = $this->extension->addResource($this->helper); $this->popHelper(); return $err; } function tagend_resources_resource($attr, $data) { return $this->tagend_extension_resource($attr, $data); } function tagend_group_resource($attr, $data) { return $this->tagend_extension_resource($attr, $data); } function tagend_resources($attr, $data) { return true; } function tagend_extension_logo($attr, $data) { // TODO checks if (!isset($attr["name"])) { $attr["name"] = $this->extension->getName(); } $logo = new CodeGen_PECL_Element_Logo($attr["name"]); if (!isset($attr["mimetype"])) { $attr["mimetype"] = false; } if (isset($attr["src"])) { $err = $logo->loadFile($attr["src"], $attr["mimetype"]); if (PEAR::isError($err)) { return $err; } } else { // we support base64 encoded embedded data only $decoded = base64_decode($data); if (!is_string($decoded)) { return PEAR::raiseError("only base64 encoded image data is supported for embedded data"); } $err = $logo->setData($decoded, $attr["mimetype"]); if (PEAR::isError($err)) { return $err; } } return $this->extension->addLogo($logo); } function tagend_group_logo($attr, $data) { $this->tagend_extension_logo($attr, $data); } function tagstart_extension_constants($attr) { $this->pushHelper($attr); } function tagend_extension_constant($attr, $data) { $const = new CodeGen_PECL_Element_Constant; if (isset($attr["name"])) { $err = $const->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for constant missing"); } if (isset($attr["type"])) { $err = $const->setType($attr["type"]); } else { $err = $const->setType("int"); // default } if (PEAR::isError($err)) { return $err; } if (isset($attr["value"])) { $err = $const->setValue($attr["value"]); } else { $const->setDefine(false); $err = $const->setValue($attr["name"]); // default -> mimic a C #define or enum value } if (PEAR::isError($err)) { return $err; } if (isset($attr["define"])) { $err = $const->setDefine($attr["define"]); } if (PEAR::isError($err)) { return $err; } if (isset($attr["group"])) { $err = $const->setGroup($attr["group"]); } else if (is_array($this->helper) && isset($this->helper["group"])) { $err = $const->setGroup($this->helper["group"]); } if (PEAR::isError($err)) { return $err; } if (isset($attr["if"])) { $condition = ($attr["if"] == "yes") ? $attr["name"] : $attr["if"]; $const->setIfCondition($condition); } else if (is_array($this->helper) && isset($this->helper["if"])) { $const->setIfCondition($this->helper["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $const->addIfCondition($if); } } $const->setDesc(CodeGen_Tools_IndentC::linetrim($data)); return $this->extension->addConstant($const); } function tagend_constants_constant($attr, $data) { return $this->tagend_extension_constant($attr, $data); } function tagend_group_constant($attr, $data) { return $this->tagend_extension_constant($attr, $data); } function tagend_constants($attr, $data) { $this->popHelper(); return true; } function tagend_extension_global($attr, $data) { $global = new CodeGen_PECL_Element_Global; if (isset($attr["name"])) { $err = $global->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for global missing"); } if (isset($attr["type"])) { $err = $global->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("type attribut for global missing"); } if (isset($attr["value"])) { $err = $global->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $global->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $global->addIfCondition($if); } } return $this->extension->addGlobal($global); } function tagend_globals_global($attr, $data) { return $this->tagend_extension_global($attr, $data); } function tagend_group_global($attr, $data) { return $this->tagend_extension_global($attr, $data); } function tagend_extension_phpini($attr, $data) { $ini = new CodeGen_PECL_Element_Ini; if (isset($attr["name"])) { $err = $ini->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for php.ini directive missing"); } if (isset($attr["type"])) { $err = $ini->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["value"])) { $err = $ini->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["access"])) { $err = $ini->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["onupdate"])) { $err = $ini->setOnUpdate($attr["onupdate"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $ini->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $ini->addIfCondition($if); } } $ini->setDesc(CodeGen_Tools_IndentC::linetrim($data)); $err = $this->extension->addPhpini($ini); if (PEAR::isError($err)) { return $err; } // php.ini settings are stored in modul-global variables $global = new CodeGen_PECL_Element_Global; $err = $global->setName($ini->getName()); if (PEAR::isError($err)) { return $err; } $err = $global->setType($ini->getType()); if (PEAR::isError($err)) { return $err; } $global->setIfCondition($ini->getIfCondition()); $err = $this->extension->addGlobal($global); return $err; } function tagend_globals_phpini($attr, $data) { return $this->tagend_extension_phpini($attr, $data); } function tagend_group_phpini($attr, $data) { return $this->tagend_extension_phpini($attr, $data); } function tagend_globals($attr, $data) { return true; } function tagstart_deps_lib($attr) { $err = $this->checkAttributes($attr, array("name", "platform", "path", "function")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["name"])) { return PEAR::raiseError(""); } if (!isset($attr["platform"])) { $attr["platform"] = "all"; } error_log("Warning: Use of tags out of sections is deprecated"); $lib = new CodeGen_PECL_Dependency_Lib($attr["name"], $attr["platform"]); if (isset($attr['path'])) { $lib->setPath($attr['path']); } if (isset($attr['function'])) { $lib->setFunction($attr['function']); } $this->extension->addLib($lib); return true; } function tagstart_deps_header($attr) { $err = $this->checkAttributes($attr, array("name", "prepend", "path")); if (PEAR::isError($err)) { return $err; } error_log("Warning: Use of tags out of sections is deprecated"); // TODO check name $header = new CodeGen_PECL_Dependency_Header($attr["name"]); if (isset($attr['path'])) { $header->setPath($attr["path"]); } if (isset($attr['prepend'])) { $header->setPrepend($attr["prepend"]); } $this->extension->addHeader($header); } function tagstart_deps_extension($attr) { $ext = new CodeGen_PECL_Dependency_Extension; $err = $ext->setName($attr['name']); if (PEAR::isError($err)) { return $err; } if (isset($attr["type"])) { $err = $ext->setType($attr['type']); if (PEAR::isError($err)) { return $err; } } if (isset($attr["version"]) || isset($attr["rel"])) { if (!isset($attr["version"])) { return PEAR::raiseError("'rel' attribut requires 'version' "); } if (!isset($attr["rel"])) { $attr["rel"] = "ge"; } $err = $ext->setVersion($attr['version'], $attr['rel']); if (PEAR::isError($err)) { return $err; } } $this->extension->addOtherExtension($ext); } function tagstart_deps_with($attr) { $with = new CodeGen_PECL_Dependency_With; if (!isset($attr['name'])) { $attr["name"] = $this->extension->getName(); } $err = $with->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["testfile"])) { $with->setTestfile($attr["testfile"]); } if (isset($attr["defaults"])) { $with->setDefaults($attr["defaults"]); } if (isset($attr["mode"])) { $err = $with->setMode($attr["mode"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["version"])) { $with->setVersion($attr["version"]); } $this->pushHelper($with); return true; } function tagstart_deps_with_header($attr) { $err = $this->checkAttributes($attr, array("name", "prepend", "path")); if (PEAR::isError($err)) { return $err; } // TODO check name $header = new CodeGen_PECL_Dependency_Header($attr["name"]); if (isset($attr['path'])) { $header->setPath($attr["path"]); } if (isset($attr['prepend'])) { $header->setPrepend($attr["prepend"]); } $this->helper->addHeader($header); } function tagstart_deps_with_lib($attr) { $err = $this->checkAttributes($attr, array("name", "platform", "path", "function")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["name"])) { return PEAR::raiseError(""); } if (!isset($attr["platform"])) { $attr["platform"] = "all"; } $lib = new CodeGen_PECL_Dependency_Lib($attr["name"], $attr["platform"]); if (isset($attr['path'])) { $lib->setPath($attr['path']); } if (isset($attr['function'])) { $lib->setFunction($attr['function']); } $this->helper->addLib($lib); } function tagend_deps_with($attr, $data) { $this->helper->setSummary($data); $this->extension->addWith($this->helper); $this->popHelper(); } function tagstart_extension_code($attr) { if (isset($attr["src"])) { if (!file_exists($attr["src"])) { return PEAR::raiseError("Soruce file '$attr[src]' not found"); } if (!is_readable($attr["src"])) { return PEAR::raiseError("Cannot read source file '$attr[src]'"); } } } function tagstart_extension_test($attr) { static $testCount = 0; $test = new CodeGen_PECL_Element_Test(); if (isset($attr["name"])) { $err = $test->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { if (!$test->getName()) { $test->setName(sprintf("%03d", ++$testCount)); } } $test->setSkipIf("!extension_loaded('".$this->extension->getName()."')"); $this->pushHelper($test); } function tagstart_extension_tests_test($attr) { return $this->tagstart_extension_test($attr); } function tagstart_extension_group_test($attr) { return $this->tagstart_extension_test($attr); } function tagend_test_title($attr, $data) { $this->helper->setTitle(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_description($attr, $data) { $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_skipif($attr, $data) { $this->helper->setSkipIf(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_get($attr, $data) { $this->helper->setGet(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_post($attr, $data) { $this->helper->setPost(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_test_code($attr) { if (isset($attr["src"])) { if (!file_exists($attr["src"])) { return PEAR::raiseError("Soruce file '$attr[src]' not found"); } if (!is_readable($attr["src"])) { return PEAR::raiseError("Cannot read source file '$attr[src]'"); } } } function tagend_test_code($attr, $data) { if (isset($attr["src"])) { $this->helper->setCode(CodeGen_Tools_IndentC::linetrim(file_get_contents($attr["src"]))); } else { $this->helper->setCode(CodeGen_Tools_IndentC::linetrim($data)); } } function tagend_test_result($attr, $data) { $err = $this->helper->setOutput(CodeGen_Tools_IndentC::linetrim($data)); if (isset($attr['mode']) && !PEAR::isError($err)) { $err = $this->helper->setMode($attr['mode']); } return $err; } function tagend_extension_test($attr, $data) { $test = $this->popHelper(); $err = $this->extension->addTest($test); return $err; } function tagend_extension_tests_test($attr, $data) { return $this->tagend_extension_test($attr, $data); } function tagend_extension_group_test($attr, $data) { return $this->tagend_extension_test($attr, $data); } function tagend_extension_tests($attr, $data) { return true; } function tagstart_extension_class($attr) { $err = $this->checkAttributes($attr, array("name", "extends", "final", "abstract", "if")); if (PEAR::isError($err)) { return $err; } $class = new CodeGen_PECL_Element_Class; $this->pushHelper($class); if (isset($attr["name"])) { $err = $class->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for class missing"); } if (isset($attr["extends"])) { $err = $class->setExtends($attr["extends"]); if (PEAR::isError($err)) { return $err; } } // TODO: make sure a class is not abstract and final at the same time if (isset($attr["final"])) { $value = $this->toBool($attr["final"], "final"); if (PEAR::isError($value)) { return $value; } if ($value) { $class->isFinal(); } } if (isset($attr["abstract"])) { $value = $this->toBool($attr["abstract"], "abstract"); if (PEAR::isError($value)) { return $value; } if ($value) { $class->isAbstract(); } } if (isset($attr["if"])) { $class->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $this->helper->addIfCondition($if); } } return true; } function tagstart_group_class($attr) { return $this->tagstart_extension_class($attr); } function tagend_class_summary($attr, $data) { return $this->helper->setSummary(trim($data)); } function tagend_class_description($attr, $data) { return $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_class_implements($attr, $data) { $err = $this->checkAttributes($attr, array("interface")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["interface"])) { return PEAR::raiseError("intarface attribute missing for "); } return $this->helper->addInterface($attr["interface"]); } function tagstart_class_property($attr) { $err = $this->checkAttributes($attr, array("name", "type", "value", "access", "static", "if")); if (PEAR::isError($err)) { return $err; } $prop = new CodeGen_PECL_Element_Property; if (!isset($attr["name"])) { return PEAR::raiseError("name attribute missing for property"); } $err = $prop->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["type"])) { $err = $prop->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["value"])) { if (!isset($attr["type"])) { return PEAR::raiseError("property value can only be set together with type"); } $err = $prop->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["access"])) { $err = $prop->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["static"])) { $value = $this->toBool($attr["static"], "static"); if (PEAR::isError($value)) { return $value; } if ($value) { $prop->isStatic(); } } if (isset($attr["if"])) { $prop->setIfCondition($attr["if"]); } return $this->helper->addProperty($prop); } function tagstart_class_constant($attr) { $err = $this->checkAttributes($attr, array("name", "type", "value", "if")); if (PEAR::isError($err)) { return $err; } $const = new CodeGen_PECL_Element_ClassConstant; if (!isset($attr["name"])) { return PEAR::raiseError("name attribute missing for class constant"); } $err = $const->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (!isset($attr["type"])) { return PEAR::raiseError("type attribute missing for class constant"); } $err = $const->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } if (!isset($attr["value"])) { return PEAR::raiseError("value attribute missing for class constant"); } $err = $const->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["if"])) { $prop->setIfCondition($attr["if"]); } return $this->helper->addConstant($const); } function tagstart_class_payload($attr) { $err = $this->checkAttributes($attr, array("type", "alloc")); if (PEAR::isError($err)) { return $err; } } function tagend_class_payload($attr, $data) { if (!isset($attr["type"])) { return PEAR::raiseError("type attribute missing for class payload"); } $this->helper->setPayloadType($attr["type"]); if (isset($attr["alloc"])) { $alloc = $this->toBool($attr["alloc"], "alloc"); if (PEAR::isError($alloc)) { return $value; } } else { $alloc = true; } $this->helper->setPayloadAlloc($alloc); } function tagend_class_init($attr, $data) { $this->helper->setPayloadCtor($data); } function tagend_class_destruct($attr, $data) { $this->helper->setPayloadDtor($data); } function tagstart_class_function($attr) { $err = $this->checkAttributes($attr, array("name", "access", "static", "abstract", "final", "procedural", "if")); if (PEAR::isError($err)) { return $err; } $method = new CodeGen_PECL_Element_Method($this->helper); $this->pushHelper($method); if (isset($attr["name"])) { $err = $method->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } if (isset($attr["access"])) { $err = $method->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["static"])) { $value = $this->toBool($attr["static"], "static"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isStatic(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["abstract"])) { $value = $this->toBool($attr["abstract"], "abstract"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isAbstract(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["final"])) { $value = $this->toBool($attr["final"], "final"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isFinal(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["procedural"])) { if ($attr["procedural"] == "" || $attr["procedural"] == "yes") { $attr["procedural"] = "default"; } $err = $method->setProceduralName($attr["procedural"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $method->setIfCondition($attr["if"]); } return true; } function tagend_class_function($attr, $data) { $method = $this->helper; $this->popHelper(); $err = $this->helper->addMethod($method); return $err; } function tagend_extension_class($attr, $data) { $err = $this->extension->addClass($this->helper); $this->popHelper(); return true; } function tagend_group_class($attr, $data) { return $this->tagend_extension_class($attr, $data); } function tagstart_extension_interface($attr) { $err = $this->checkAttributes($attr, array("name", "extends", "if")); if (PEAR::isError($err)) { return $err; } $interface = new CodeGen_PECL_Element_Interface; $this->pushHelper($interface); if (isset($attr["name"])) { $err = $interface->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for class missing"); } if (isset($attr["extends"])) { $err = $interface->setExtends($attr["extends"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $interface->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $interface->addIfCondition($if); } } return true; } function tagstart_group_interface($attr) { return $this->tagstart_extension_interface($attr); } function tagstart_interface_function($attr) { $err = $this->checkAttributes($attr, array("name")); if (PEAR::isError($err)) { return $err; } $method = new CodeGen_PECL_Element_Method($this->helper); $method->isAbstract(); $method->isInterface(); $this->pushHelper($method); if (isset($attr["name"])) { $err = $method->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } return true; } function tagend_interface_function($attr, $data) { $method = $this->helper; $this->popHelper(); $err = $this->helper->addMethod($method); return $err; } function tagend_extension_interface($attr, $data) { $err = $this->extension->addInterface($this->helper); $this->popHelper(); return true; } function tagend_group_interface($attr, $data) { return $this->tagend_extension_interface($attr, $data); } function tagstart_extension_stream($attr) { $err = $this->checkAttributes($attr, array("name")); if (PEAR::isError($err)) { return $err; } $this->pushHelper(new CodeGen_PECL_Element_Stream); if (isset($attr["name"])) { $err = $this->helper->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } } function tagstart_group_stream($attr) { return $this->extension_group_stream($attr); } function tagend_stream_open($attr, $data) { $this->helper->addCode("open", $data); } function tagend_stream_close($attr, $data) { $this->helper->addCode("close", $data); } function tagend_stream_stat($attr, $data) { $this->helper->addCode("stat", $data); } function tagend_stream_urlstat($attr, $data) { $this->helper->addCode("urlstat", $data); } function tagend_stream_diropen($attr, $data) { $this->helper->addCode("diropen", $data); } function tagend_stream_unlink($attr, $data) { $this->helper->addCode("unlink", $data); } function tagend_stream_rename($attr, $data) { $this->helper->addCode("rename", $data); } function tagend_stream_mkdir($attr, $data) { $this->helper->addCode("mkdir", $data); } function tagend_stream_rmdir($attr, $data) { $this->helper->addCode("rmdir", $data); } function tagend_stream_summary($attr, $data) { $this->helper->addCode("summary", $data); } function tagend_stream_write($attr, $data) { $this->helper->addCode("write", $data); } function tagend_stream_read($attr, $data) { $this->helper->addCode("read", $data); } function tagend_stream_flush($attr, $data) { $this->helper->addCode("flush", $data); } function tagend_stream_seek($attr, $data) { $this->helper->addCode("seek", $data); } function tagend_stream_cast($attr, $data) { $this->helper->addCode("cast", $data); } function tagend_stream_set($attr, $data) { $this->helper->addCode("set", $data); } function tagend_extension_stream($attr, $data) { $this->extension->addStream($this->helper); $this->popHelper(); } function tagend_group_stream($attr, $data) { return $this->tagend_extension_stream($attr, $data); } function tagstart_channel($attr) { return $this->noAttributes($attr); } function tagstartgroup_channel($attr) { return $this->tagstart_extension_channel($attr); } function tagend_channel($attr, $data) { return $this->extension->setChannel($data); } function tagend_group_channel($attr, $data) { return $this->tagend_extension_channel($attr, $data); } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode:nil * End: */ ?>
"); } } } function tagend_function_code($attr, $data, $line=0, $file="") { if (isset($attr["src"])) { return $this->helper->setCode(CodeGen_Tools_IndentC::linetrim(file_get_contents($attr["src"]))); } else { return $this->helper->setCode($data, $line, $file); } } function tagstart_function_notest($attr) { return $this->noAttributes($attr); } function tagend_function_notest($attr, $data) { return $this->helper->setTestCode(""); } function tagstart_function_test($attr) { return $this->noAttributes($attr); } function tagstart_function_test_description($attr) { return $this->noAttributes($attr); } function tagend_function_test_description($attr, $data) { return $this->helper->setTestDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_code($attr) { return $this->noAttributes($attr); } function tagend_function_test_code($attr, $data) { return $this->helper->setTestCode(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_result($attr) { return $this->checkAttributes($attr, array("mode")); } function tagend_function_test_result($attr, $data) { return $this->helper->setTestResult(CodeGen_Tools_IndentC::linetrim($data), @$attr['mode']); } function tagstart_function_test_ini($attr) { return $this->noAttributes($attr); } function tagend_function_test_ini($attr, $data) { return $this->helper->setTestIni(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_function_test_skipif($attr) { return $this->noAttributes($attr); } function tagend_function_test_skipif($attr, $data) { return $this->helper->setTestSkipIf(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_extension_function($attr, $data) { $err = $this->extension->addFunction($this->helper); $this->popHelper(); return $err; } function tagend_extension_functions_function($attr, $data) { return $this->tagend_extension_function($attr, $data); } function tagend_group_function($attr, $data) { return $this->tagend_extension_function($attr, $data); } function tagstart_functions($attr) { return $this->noAttributes($attr); } function tagstart_extension_resource($attr) { $err = $this->checkAttributes($attr, array("name", "payload", "alloc", "if")); if (PEAR::isError($err)) { return $err; } $this->pushHelper(new CodeGen_PECL_Element_Resource); if (isset($attr["name"])) { $err = $this->helper->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for resource missing"); } if (isset($attr["payload"])) { $err = $this->helper->setPayload($attr["payload"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("payload attribut for resource missing"); } if (isset($attr["alloc"])) { $value = $this->toBool($attr["alloc"], "alloc"); if (PEAR::isError($value)) { return $value; } $err = $this->helper->setAlloc($value); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $this->helper->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $this->helper->addIfCondition($if); } } return true; } function tagstart_resources_resource($attr) { return $this->tagstart_extension_resource($attr); } function tagstart_group_resource($attr) { return $this->tagstart_extension_resource($attr); } function tagend_resource_destruct($attr, $data) { return $this->helper->setDestruct(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_resource_description($attr, $data) { return $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_extension_resource($attr, $data) { $err = $this->extension->addResource($this->helper); $this->popHelper(); return $err; } function tagend_resources_resource($attr, $data) { return $this->tagend_extension_resource($attr, $data); } function tagend_group_resource($attr, $data) { return $this->tagend_extension_resource($attr, $data); } function tagend_resources($attr, $data) { return true; } function tagend_extension_logo($attr, $data) { // TODO checks if (!isset($attr["name"])) { $attr["name"] = $this->extension->getName(); } $logo = new CodeGen_PECL_Element_Logo($attr["name"]); if (!isset($attr["mimetype"])) { $attr["mimetype"] = false; } if (isset($attr["src"])) { $err = $logo->loadFile($attr["src"], $attr["mimetype"]); if (PEAR::isError($err)) { return $err; } } else { // we support base64 encoded embedded data only $decoded = base64_decode($data); if (!is_string($decoded)) { return PEAR::raiseError("only base64 encoded image data is supported for embedded data"); } $err = $logo->setData($decoded, $attr["mimetype"]); if (PEAR::isError($err)) { return $err; } } return $this->extension->addLogo($logo); } function tagend_group_logo($attr, $data) { $this->tagend_extension_logo($attr, $data); } function tagstart_extension_constants($attr) { $this->pushHelper($attr); } function tagend_extension_constant($attr, $data) { $const = new CodeGen_PECL_Element_Constant; if (isset($attr["name"])) { $err = $const->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for constant missing"); } if (isset($attr["type"])) { $err = $const->setType($attr["type"]); } else { $err = $const->setType("int"); // default } if (PEAR::isError($err)) { return $err; } if (isset($attr["value"])) { $err = $const->setValue($attr["value"]); } else { $const->setDefine(false); $err = $const->setValue($attr["name"]); // default -> mimic a C #define or enum value } if (PEAR::isError($err)) { return $err; } if (isset($attr["define"])) { $err = $const->setDefine($attr["define"]); } if (PEAR::isError($err)) { return $err; } if (isset($attr["group"])) { $err = $const->setGroup($attr["group"]); } else if (is_array($this->helper) && isset($this->helper["group"])) { $err = $const->setGroup($this->helper["group"]); } if (PEAR::isError($err)) { return $err; } if (isset($attr["if"])) { $condition = ($attr["if"] == "yes") ? $attr["name"] : $attr["if"]; $const->setIfCondition($condition); } else if (is_array($this->helper) && isset($this->helper["if"])) { $const->setIfCondition($this->helper["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $const->addIfCondition($if); } } $const->setDesc(CodeGen_Tools_IndentC::linetrim($data)); return $this->extension->addConstant($const); } function tagend_constants_constant($attr, $data) { return $this->tagend_extension_constant($attr, $data); } function tagend_group_constant($attr, $data) { return $this->tagend_extension_constant($attr, $data); } function tagend_constants($attr, $data) { $this->popHelper(); return true; } function tagend_extension_global($attr, $data) { $global = new CodeGen_PECL_Element_Global; if (isset($attr["name"])) { $err = $global->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for global missing"); } if (isset($attr["type"])) { $err = $global->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("type attribut for global missing"); } if (isset($attr["value"])) { $err = $global->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $global->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $global->addIfCondition($if); } } return $this->extension->addGlobal($global); } function tagend_globals_global($attr, $data) { return $this->tagend_extension_global($attr, $data); } function tagend_group_global($attr, $data) { return $this->tagend_extension_global($attr, $data); } function tagend_extension_phpini($attr, $data) { $ini = new CodeGen_PECL_Element_Ini; if (isset($attr["name"])) { $err = $ini->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for php.ini directive missing"); } if (isset($attr["type"])) { $err = $ini->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["value"])) { $err = $ini->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["access"])) { $err = $ini->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["onupdate"])) { $err = $ini->setOnUpdate($attr["onupdate"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $ini->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $ini->addIfCondition($if); } } $ini->setDesc(CodeGen_Tools_IndentC::linetrim($data)); $err = $this->extension->addPhpini($ini); if (PEAR::isError($err)) { return $err; } // php.ini settings are stored in modul-global variables $global = new CodeGen_PECL_Element_Global; $err = $global->setName($ini->getName()); if (PEAR::isError($err)) { return $err; } $err = $global->setType($ini->getType()); if (PEAR::isError($err)) { return $err; } $global->setIfCondition($ini->getIfCondition()); $err = $this->extension->addGlobal($global); return $err; } function tagend_globals_phpini($attr, $data) { return $this->tagend_extension_phpini($attr, $data); } function tagend_group_phpini($attr, $data) { return $this->tagend_extension_phpini($attr, $data); } function tagend_globals($attr, $data) { return true; } function tagstart_deps_lib($attr) { $err = $this->checkAttributes($attr, array("name", "platform", "path", "function")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["name"])) { return PEAR::raiseError(""); } if (!isset($attr["platform"])) { $attr["platform"] = "all"; } error_log("Warning: Use of tags out of sections is deprecated"); $lib = new CodeGen_PECL_Dependency_Lib($attr["name"], $attr["platform"]); if (isset($attr['path'])) { $lib->setPath($attr['path']); } if (isset($attr['function'])) { $lib->setFunction($attr['function']); } $this->extension->addLib($lib); return true; } function tagstart_deps_header($attr) { $err = $this->checkAttributes($attr, array("name", "prepend", "path")); if (PEAR::isError($err)) { return $err; } error_log("Warning: Use of tags out of sections is deprecated"); // TODO check name $header = new CodeGen_PECL_Dependency_Header($attr["name"]); if (isset($attr['path'])) { $header->setPath($attr["path"]); } if (isset($attr['prepend'])) { $header->setPrepend($attr["prepend"]); } $this->extension->addHeader($header); } function tagstart_deps_extension($attr) { $ext = new CodeGen_PECL_Dependency_Extension; $err = $ext->setName($attr['name']); if (PEAR::isError($err)) { return $err; } if (isset($attr["type"])) { $err = $ext->setType($attr['type']); if (PEAR::isError($err)) { return $err; } } if (isset($attr["version"]) || isset($attr["rel"])) { if (!isset($attr["version"])) { return PEAR::raiseError("'rel' attribut requires 'version' "); } if (!isset($attr["rel"])) { $attr["rel"] = "ge"; } $err = $ext->setVersion($attr['version'], $attr['rel']); if (PEAR::isError($err)) { return $err; } } $this->extension->addOtherExtension($ext); } function tagstart_deps_with($attr) { $with = new CodeGen_PECL_Dependency_With; if (!isset($attr['name'])) { $attr["name"] = $this->extension->getName(); } $err = $with->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["testfile"])) { $with->setTestfile($attr["testfile"]); } if (isset($attr["defaults"])) { $with->setDefaults($attr["defaults"]); } if (isset($attr["mode"])) { $err = $with->setMode($attr["mode"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["version"])) { $with->setVersion($attr["version"]); } $this->pushHelper($with); return true; } function tagstart_deps_with_header($attr) { $err = $this->checkAttributes($attr, array("name", "prepend", "path")); if (PEAR::isError($err)) { return $err; } // TODO check name $header = new CodeGen_PECL_Dependency_Header($attr["name"]); if (isset($attr['path'])) { $header->setPath($attr["path"]); } if (isset($attr['prepend'])) { $header->setPrepend($attr["prepend"]); } $this->helper->addHeader($header); } function tagstart_deps_with_lib($attr) { $err = $this->checkAttributes($attr, array("name", "platform", "path", "function")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["name"])) { return PEAR::raiseError(""); } if (!isset($attr["platform"])) { $attr["platform"] = "all"; } $lib = new CodeGen_PECL_Dependency_Lib($attr["name"], $attr["platform"]); if (isset($attr['path'])) { $lib->setPath($attr['path']); } if (isset($attr['function'])) { $lib->setFunction($attr['function']); } $this->helper->addLib($lib); } function tagend_deps_with($attr, $data) { $this->helper->setSummary($data); $this->extension->addWith($this->helper); $this->popHelper(); } function tagstart_extension_code($attr) { if (isset($attr["src"])) { if (!file_exists($attr["src"])) { return PEAR::raiseError("Soruce file '$attr[src]' not found"); } if (!is_readable($attr["src"])) { return PEAR::raiseError("Cannot read source file '$attr[src]'"); } } } function tagstart_extension_test($attr) { static $testCount = 0; $test = new CodeGen_PECL_Element_Test(); if (isset($attr["name"])) { $err = $test->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { if (!$test->getName()) { $test->setName(sprintf("%03d", ++$testCount)); } } $test->setSkipIf("!extension_loaded('".$this->extension->getName()."')"); $this->pushHelper($test); } function tagstart_extension_tests_test($attr) { return $this->tagstart_extension_test($attr); } function tagstart_extension_group_test($attr) { return $this->tagstart_extension_test($attr); } function tagend_test_title($attr, $data) { $this->helper->setTitle(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_description($attr, $data) { $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_skipif($attr, $data) { $this->helper->setSkipIf(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_get($attr, $data) { $this->helper->setGet(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_test_post($attr, $data) { $this->helper->setPost(CodeGen_Tools_IndentC::linetrim($data)); } function tagstart_test_code($attr) { if (isset($attr["src"])) { if (!file_exists($attr["src"])) { return PEAR::raiseError("Soruce file '$attr[src]' not found"); } if (!is_readable($attr["src"])) { return PEAR::raiseError("Cannot read source file '$attr[src]'"); } } } function tagend_test_code($attr, $data) { if (isset($attr["src"])) { $this->helper->setCode(CodeGen_Tools_IndentC::linetrim(file_get_contents($attr["src"]))); } else { $this->helper->setCode(CodeGen_Tools_IndentC::linetrim($data)); } } function tagend_test_result($attr, $data) { $err = $this->helper->setOutput(CodeGen_Tools_IndentC::linetrim($data)); if (isset($attr['mode']) && !PEAR::isError($err)) { $err = $this->helper->setMode($attr['mode']); } return $err; } function tagend_extension_test($attr, $data) { $test = $this->popHelper(); $err = $this->extension->addTest($test); return $err; } function tagend_extension_tests_test($attr, $data) { return $this->tagend_extension_test($attr, $data); } function tagend_extension_group_test($attr, $data) { return $this->tagend_extension_test($attr, $data); } function tagend_extension_tests($attr, $data) { return true; } function tagstart_extension_class($attr) { $err = $this->checkAttributes($attr, array("name", "extends", "final", "abstract", "if")); if (PEAR::isError($err)) { return $err; } $class = new CodeGen_PECL_Element_Class; $this->pushHelper($class); if (isset($attr["name"])) { $err = $class->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for class missing"); } if (isset($attr["extends"])) { $err = $class->setExtends($attr["extends"]); if (PEAR::isError($err)) { return $err; } } // TODO: make sure a class is not abstract and final at the same time if (isset($attr["final"])) { $value = $this->toBool($attr["final"], "final"); if (PEAR::isError($value)) { return $value; } if ($value) { $class->isFinal(); } } if (isset($attr["abstract"])) { $value = $this->toBool($attr["abstract"], "abstract"); if (PEAR::isError($value)) { return $value; } if ($value) { $class->isAbstract(); } } if (isset($attr["if"])) { $class->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $this->helper->addIfCondition($if); } } return true; } function tagstart_group_class($attr) { return $this->tagstart_extension_class($attr); } function tagend_class_summary($attr, $data) { return $this->helper->setSummary(trim($data)); } function tagend_class_description($attr, $data) { return $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data)); } function tagend_class_implements($attr, $data) { $err = $this->checkAttributes($attr, array("interface")); if (PEAR::isError($err)) { return $err; } if (!isset($attr["interface"])) { return PEAR::raiseError("intarface attribute missing for "); } return $this->helper->addInterface($attr["interface"]); } function tagstart_class_property($attr) { $err = $this->checkAttributes($attr, array("name", "type", "value", "access", "static", "if")); if (PEAR::isError($err)) { return $err; } $prop = new CodeGen_PECL_Element_Property; if (!isset($attr["name"])) { return PEAR::raiseError("name attribute missing for property"); } $err = $prop->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["type"])) { $err = $prop->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["value"])) { if (!isset($attr["type"])) { return PEAR::raiseError("property value can only be set together with type"); } $err = $prop->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["access"])) { $err = $prop->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["static"])) { $value = $this->toBool($attr["static"], "static"); if (PEAR::isError($value)) { return $value; } if ($value) { $prop->isStatic(); } } if (isset($attr["if"])) { $prop->setIfCondition($attr["if"]); } return $this->helper->addProperty($prop); } function tagstart_class_constant($attr) { $err = $this->checkAttributes($attr, array("name", "type", "value", "if")); if (PEAR::isError($err)) { return $err; } $const = new CodeGen_PECL_Element_ClassConstant; if (!isset($attr["name"])) { return PEAR::raiseError("name attribute missing for class constant"); } $err = $const->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } if (!isset($attr["type"])) { return PEAR::raiseError("type attribute missing for class constant"); } $err = $const->setType($attr["type"]); if (PEAR::isError($err)) { return $err; } if (!isset($attr["value"])) { return PEAR::raiseError("value attribute missing for class constant"); } $err = $const->setValue($attr["value"]); if (PEAR::isError($err)) { return $err; } if (isset($attr["if"])) { $prop->setIfCondition($attr["if"]); } return $this->helper->addConstant($const); } function tagstart_class_payload($attr) { $err = $this->checkAttributes($attr, array("type", "alloc")); if (PEAR::isError($err)) { return $err; } } function tagend_class_payload($attr, $data) { if (!isset($attr["type"])) { return PEAR::raiseError("type attribute missing for class payload"); } $this->helper->setPayloadType($attr["type"]); if (isset($attr["alloc"])) { $alloc = $this->toBool($attr["alloc"], "alloc"); if (PEAR::isError($alloc)) { return $value; } } else { $alloc = true; } $this->helper->setPayloadAlloc($alloc); } function tagend_class_init($attr, $data) { $this->helper->setPayloadCtor($data); } function tagend_class_destruct($attr, $data) { $this->helper->setPayloadDtor($data); } function tagstart_class_function($attr) { $err = $this->checkAttributes($attr, array("name", "access", "static", "abstract", "final", "procedural", "if")); if (PEAR::isError($err)) { return $err; } $method = new CodeGen_PECL_Element_Method($this->helper); $this->pushHelper($method); if (isset($attr["name"])) { $err = $method->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } if (isset($attr["access"])) { $err = $method->setAccess($attr["access"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["static"])) { $value = $this->toBool($attr["static"], "static"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isStatic(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["abstract"])) { $value = $this->toBool($attr["abstract"], "abstract"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isAbstract(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["final"])) { $value = $this->toBool($attr["final"], "final"); if (PEAR::isError($value)) { return $value; } if ($value) { $err = $method->isFinal(); if (PEAR::isError($err)) { return $err; } } } if (isset($attr["procedural"])) { if ($attr["procedural"] == "" || $attr["procedural"] == "yes") { $attr["procedural"] = "default"; } $err = $method->setProceduralName($attr["procedural"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $method->setIfCondition($attr["if"]); } return true; } function tagend_class_function($attr, $data) { $method = $this->helper; $this->popHelper(); $err = $this->helper->addMethod($method); return $err; } function tagend_extension_class($attr, $data) { $err = $this->extension->addClass($this->helper); $this->popHelper(); return true; } function tagend_group_class($attr, $data) { return $this->tagend_extension_class($attr, $data); } function tagstart_extension_interface($attr) { $err = $this->checkAttributes($attr, array("name", "extends", "if")); if (PEAR::isError($err)) { return $err; } $interface = new CodeGen_PECL_Element_Interface; $this->pushHelper($interface); if (isset($attr["name"])) { $err = $interface->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("name attribut for class missing"); } if (isset($attr["extends"])) { $err = $interface->setExtends($attr["extends"]); if (PEAR::isError($err)) { return $err; } } if (isset($attr["if"])) { $interface->setIfCondition($attr["if"]); } $groupIfs = $this->getGroupAttributeStack("if"); if (is_array($groupIfs)) { foreach($groupIfs as $if) { $interface->addIfCondition($if); } } return true; } function tagstart_group_interface($attr) { return $this->tagstart_extension_interface($attr); } function tagstart_interface_function($attr) { $err = $this->checkAttributes($attr, array("name")); if (PEAR::isError($err)) { return $err; } $method = new CodeGen_PECL_Element_Method($this->helper); $method->isAbstract(); $method->isInterface(); $this->pushHelper($method); if (isset($attr["name"])) { $err = $method->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } return true; } function tagend_interface_function($attr, $data) { $method = $this->helper; $this->popHelper(); $err = $this->helper->addMethod($method); return $err; } function tagend_extension_interface($attr, $data) { $err = $this->extension->addInterface($this->helper); $this->popHelper(); return true; } function tagend_group_interface($attr, $data) { return $this->tagend_extension_interface($attr, $data); } function tagstart_extension_stream($attr) { $err = $this->checkAttributes($attr, array("name")); if (PEAR::isError($err)) { return $err; } $this->pushHelper(new CodeGen_PECL_Element_Stream); if (isset($attr["name"])) { $err = $this->helper->setName($attr["name"]); if (PEAR::isError($err)) { return $err; } } else { return PEAR::raiseError("'name' attribut for missing"); } } function tagstart_group_stream($attr) { return $this->extension_group_stream($attr); } function tagend_stream_open($attr, $data) { $this->helper->addCode("open", $data); } function tagend_stream_close($attr, $data) { $this->helper->addCode("close", $data); } function tagend_stream_stat($attr, $data) { $this->helper->addCode("stat", $data); } function tagend_stream_urlstat($attr, $data) { $this->helper->addCode("urlstat", $data); } function tagend_stream_diropen($attr, $data) { $this->helper->addCode("diropen", $data); } function tagend_stream_unlink($attr, $data) { $this->helper->addCode("unlink", $data); } function tagend_stream_rename($attr, $data) { $this->helper->addCode("rename", $data); } function tagend_stream_mkdir($attr, $data) { $this->helper->addCode("mkdir", $data); } function tagend_stream_rmdir($attr, $data) { $this->helper->addCode("rmdir", $data); } function tagend_stream_summary($attr, $data) { $this->helper->addCode("summary", $data); } function tagend_stream_write($attr, $data) { $this->helper->addCode("write", $data); } function tagend_stream_read($attr, $data) { $this->helper->addCode("read", $data); } function tagend_stream_flush($attr, $data) { $this->helper->addCode("flush", $data); } function tagend_stream_seek($attr, $data) { $this->helper->addCode("seek", $data); } function tagend_stream_cast($attr, $data) { $this->helper->addCode("cast", $data); } function tagend_stream_set($attr, $data) { $this->helper->addCode("set", $data); } function tagend_extension_stream($attr, $data) { $this->extension->addStream($this->helper); $this->popHelper(); } function tagend_group_stream($attr, $data) { return $this->tagend_extension_stream($attr, $data); } function tagstart_channel($attr) { return $this->noAttributes($attr); } function tagstartgroup_channel($attr) { return $this->tagstart_extension_channel($attr); } function tagend_channel($attr, $data) { return $this->extension->setChannel($data); } function tagend_group_channel($attr, $data) { return $this->tagend_extension_channel($attr, $data); } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode:nil * End: */ ?>