/php-pear-CodeGen-PECL-1.1.3/CodeGen_PECL-1.1.3/PECL/ExtensionParser.php
PHP | 1504 lines | 1163 code | 295 blank | 46 comment | 232 complexity | 718910ffd1148fefd5e226dc8cacb4b6 MD5 | raw file
- <?php
- /**
- * Extension to the generic parser that adds PECL specific tags
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Tools and Utilities
- * @package CodeGen
- * @author Hartmut Holzgraefe <hartmut@php.net>
- * @copyright 2005-2008 Hartmut Holzgraefe
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version CVS: $Id: ExtensionParser.php,v 1.64 2007/04/26 11:23:08 hholzgra Exp $
- * @link http://pear.php.net/package/CodeGen
- */
- /**
- * includes
- */
- require_once "CodeGen/ExtensionParser.php";
- require_once "CodeGen/PECL/Maintainer.php";
- /**
- * Extension to the generic parser that adds PECL specific tags
- *
- * @category Tools and Utilities
- * @package CodeGen
- * @author Hartmut Holzgraefe <hartmut@php.net>
- * @copyright 2005-2008 Hartmut Holzgraefe
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version Release: @package_version@
- * @link http://pear.php.net/package/CodeGen
- */
- class CodeGen_PECL_ExtensionParser
- extends CodeGen_ExtensionParser
- {
- function setInputFile($filename)
- {
- $this->extension->addPackageFile("copy", $filename);
- return parent::setInputFile($filename);
- }
- function tagstart_extension_maintainer($attr)
- {
- $this->pushHelper(new CodeGen_PECL_Maintainer);
- return $this->noAttributes($attr);
- }
- function tagstart_extension_release($attr)
- {
- $this->pushHelper(new CodeGen_PECL_Release);
- return $this->noAttributes($attr);
- }
- function tagstart_extension_changelog($attr)
- {
- $this->verbatim();
- return $this->noAttributes($attr);
- }
- function tagstart_extension_function($attr)
- {
- $err = $this->checkAttributes($attr, array("name", "role", "if"));
- if (PEAR::isError($err)) {
- return $err;
- }
-
- $this->pushHelper(new CodeGen_PECL_Element_Function);
-
- $role = isset($attr["role"]) ? $attr["role"] : "public";
-
- if (isset($attr["name"])) {
- if ($role == "public" && $this->extension->getPrefix()) {
- $err = $this->helper->setName($this->extension->getPrefix()."_".$attr["name"]);
- } else {
- $err = $this->helper->setName($attr["name"]);
- }
- if (PEAR::isError($err)) {
- return $err;
- }
- } else {
- return PEAR::raiseError("'name' attribut for <function> missing");
- }
-
- $err = $this->helper->setRole($role);
- 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_extension_functions_function($attr) {
- return $this->tagstart_extension_function($attr);
- }
-
- function tagstart_group_function($attr) {
- return $this->tagstart_extension_function($attr);
- }
-
- function tagstart_function_summary($attr)
- {
- return $this->noAttributes($attr);
- }
- function tagend_function_summary($attr, $data)
- {
- return $this->helper->setSummary(trim($data));
- }
- function tagstart_function_description($attr)
- {
- $this->verbatim();
- return $this->noAttributes($attr);
- }
- function tagend_function_description($attr, $data)
- {
- return $this->helper->setDescription(CodeGen_Tools_IndentC::linetrim($data));
- }
- function tagstart_function_proto($attr)
- {
- return $this->noAttributes($attr);
- }
- function tagend_function_proto($attr, $data)
- {
- return $this->helper->setProto(trim($data), $this->extension);
- }
- function tagstart_function_code($attr)
- {
- $err = $this->checkAttributes($attr, array("src"));
- if (PEAR::isError($err)) {
- return $err;
- }
-
- if (isset($attr["src"])) {
- if (!file_exists($attr["src"])) {
- return PEAR::raiseError("'src' file '$attr[src]' not found in <code>");
- }
- if (!is_readable($attr["src"])) {
- return PEAR::raiseError("Cannot read 'src' file '$attr[src]' in <code>");
- }
- }
- }
- 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 <lib> tags out of <with> 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 <header> tags out of <with> 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 <implements>");
- }
- 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 <function> 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 <function> 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 <stream> 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:
- */
- ?>