From f792bb9c30f969243154149978c92a8b0b66ba6f Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:10:48 -0400 Subject: [PATCH 1/6] fix whitespace --- phpdotnet/phd/Package/Generic/XHTML.php | 1 + 1 file changed, 1 insertion(+) diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index 842a68af..4195102f 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -1063,6 +1063,7 @@ public function format_initializer($open, $name, $attrs) { } return ''; } + public function format_parameter($open, $name, $attrs, $props) { if ($props["empty"]) { From d52e243652537b200939340472abae5bb0cef4ee Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:19:42 -0400 Subject: [PATCH 2/6] get basic interface rendering working... ...just missing comma lists --- phpdotnet/phd/Package/Generic/XHTML.php | 74 ++++++++++++++++++++++++- phpdotnet/phd/Package/PHP/XHTML.php | 11 +++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index 4195102f..35c0bfe0 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -67,7 +67,8 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { /* DEFAULT */ 'span', 'ooclass' => array( /* DEFAULT */ 'strong', - 'classsynopsisinfo' => 'format_classsynopsisinfo_ooclass_classname', + 'classsynopsisinfo' => 'format_classsynopsisinfo_ooclass_classname', + 'interfacesynopsisinfo' => 'format_interfacesynopsisinfo_ooclass_classname', ), ), 'classsynopsis' => 'format_classsynopsis', @@ -134,6 +135,8 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { 'indexdiv' => 'format_dl', 'indexentry' => 'dd', 'initializer' => 'format_initializer', + 'interfacesynopsis' => 'format_interfacesynopsis', + 'interfacesynopsisinfo' => 'format_interfacesynopsisinfo', 'itemizedlist' => 'format_itemizedlist', 'legalnotice' => 'format_chunk', 'listitem' => array( @@ -381,7 +384,8 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { /* DEFAULT */ false, 'ooclass' => array( /* DEFAULT */ false, - 'classsynopsis' => 'format_classsynopsis_ooclass_classname_text', + 'classsynopsis' => 'format_classsynopsis_ooclass_classname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_ooclass_classname_text', ), ), 'methodname' => array( @@ -432,6 +436,14 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { "fieldsynopsis" => array( "modifier" => "public", ), + "interfacesynopsis" => array( + "close" => false, + "classname" => false, + ), + "interfacesynopsisinfo" => array( + "extends" => false, + "oointerface" => false, + ), "methodsynopsis" => array( "returntypes" => [], "type_separator" => null, @@ -974,6 +986,59 @@ public function format_classsynopsis($open, $name, $attrs) { return ""; } + public function format_interfacesynopsisinfo_ooclass_classname($open, $name, $attrs) + { + if ($open) { + if ($this->cchunk["interfacesynopsisinfo"]["oointerface"] === false) { + $this->cchunk["interfacesynopsisinfo"]["oointerface"] = true; + return 'interface '; + } + + return ""; + } + + if ($this->cchunk["interfacesynopsisinfo"]["oointerface"] === true) { + $this->cchunk["interfacesynopsisinfo"]["oointerface"] = null; + } + + return ""; + } + + public function format_interfacesynopsisinfo($open, $name, $attrs) + { + $this->cchunk["interfacesynopsisinfo"] = $this->dchunk["interfacesynopsisinfo"]; + if ($open) { + $name .= ' classsynopsisinfo'; + + if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"]) && $attrs[Reader::XMLNS_DOCBOOK]["role"] == "comment") { + return '
/* '; + } + + return '
'; + } + + if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"]) && $attrs[Reader::XMLNS_DOCBOOK]["role"] == "comment") { + return ' */
'; + } + $this->cchunk["interfacesynopsis"]["close"] = true; + + return ' {
'; + } + + public function format_interfacesynopsis($open, $name, $attrs) { + if ($open) { + $name .= ' classsynopsis'; + return '
'; + } + + if ($this->cchunk["interfacesynopsis"]["close"] === true) { + $this->cchunk["interfacesynopsis"]["close"] = false; + return "}
"; + } + + return ""; + } + public function format_classsynopsis_methodsynopsis_methodname_text($value, $tag) { $value = $this->TEXT($value); if ($this->cchunk["classsynopsis"]["classname"] === false) { @@ -1001,6 +1066,11 @@ public function format_classsynopsis_ooclass_classname_text($value, $tag) { return $this->TEXT($value); } + public function format_interfacesynopsis_ooclass_classname_text($value, $tag) { + $this->cchunk["interfacesynopsis"]["classname"] = $value; + return $this->TEXT($value); + } + public function format_fieldsynopsis($open, $name, $attrs) { $this->cchunk["fieldsynopsis"] = $this->dchunk["fieldsynopsis"]; if ($open) { diff --git a/phpdotnet/phd/Package/PHP/XHTML.php b/phpdotnet/phd/Package/PHP/XHTML.php index 2062436c..40928a99 100644 --- a/phpdotnet/phd/Package/PHP/XHTML.php +++ b/phpdotnet/phd/Package/PHP/XHTML.php @@ -11,7 +11,8 @@ abstract class Package_PHP_XHTML extends Package_Generic_XHTML { /* DEFAULT */ 'span', 'ooclass' => array( /* DEFAULT */ 'format_suppressed_tags', - 'classsynopsisinfo' => 'format_classsynopsisinfo_ooclass_classname', + 'classsynopsisinfo' => 'format_classsynopsisinfo_ooclass_classname', + 'interfacesynopsisinfo' => 'format_interfacesynopsisinfo_ooclass_classname', ), ), 'chapter' => 'format_container_chunk', @@ -96,7 +97,8 @@ abstract class Package_PHP_XHTML extends Package_Generic_XHTML { /* DEFAULT */ 'format_classname_text', 'ooclass' => array( /* DEFAULT */ 'format_classname_text', - 'classsynopsis' => 'format_classsynopsis_ooclass_classname_text', + 'classsynopsis' => 'format_classsynopsis_ooclass_classname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_ooclass_classname_text', ), ), 'methodname' => array( @@ -710,6 +712,11 @@ public function format_classsynopsis_ooclass_classname_text($value, $tag) { parent::format_classsynopsis_ooclass_classname_text($value, $tag); } + public function format_interfacesynopsis_ooclass_classname_text($value, $tag) { + /* intentionally not return the value, it will be printed out by "soon" */ + parent::format_interfacesynopsis_ooclass_classname_text($value, $tag); + } + public function format_classname_text($value, $tag) { if (($filename = $this->getClassnameLink(strtolower($value))) !== null && $this->cchunk["phpdoc:classref"] !== strtolower($value)) { $href = $this->chunked ? $filename.$this->ext : "#$filename"; From 85a200d564b5250472d73de4fb862e3cd7ffe6ee Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:24:21 -0400 Subject: [PATCH 3/6] Fix local interface names having FQDN on them --- phpdotnet/phd/Package/Generic/XHTML.php | 25 +++++++++++++++++++++++++ phpdotnet/phd/Package/PHP/XHTML.php | 12 ++++++++++++ 2 files changed, 37 insertions(+) diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index 35c0bfe0..63c7d665 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -393,14 +393,17 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { 'constructorsynopsis' => array( /* DEFAULT */ false, 'classsynopsis' => 'format_classsynopsis_methodsynopsis_methodname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), 'methodsynopsis' => array( /* DEFAULT */ false, 'classsynopsis' => 'format_classsynopsis_methodsynopsis_methodname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), 'destructorsynopsis' => array( /* DEFAULT */ false, 'classsynopsis' => 'format_classsynopsis_methodsynopsis_methodname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), ), 'para' => array( @@ -1025,6 +1028,28 @@ public function format_interfacesynopsisinfo($open, $name, $attrs) return ' {'; } + public function format_interfacesynopsis_methodsynopsis_methodname_text($value, $tag) { + $value = $this->TEXT($value); + if ($this->cchunk["interfacesynopsis"]["classname"] === false) { + return $value; + } + if (strpos($value, '::')) { + $explode = '::'; + } elseif (strpos($value, '->')) { + $explode = '->'; + } elseif (strpos($value, '->')) { + $explode = '->'; + } else { + return $value; + } + + list($class, $method) = explode($explode, $value); + if ($class !== $this->cchunk["interfacesynopsis"]["classname"]) { + return $value; + } + return $method; + } + public function format_interfacesynopsis($open, $name, $attrs) { if ($open) { $name .= ' classsynopsis'; diff --git a/phpdotnet/phd/Package/PHP/XHTML.php b/phpdotnet/phd/Package/PHP/XHTML.php index 40928a99..5e19db6c 100644 --- a/phpdotnet/phd/Package/PHP/XHTML.php +++ b/phpdotnet/phd/Package/PHP/XHTML.php @@ -108,6 +108,7 @@ abstract class Package_PHP_XHTML extends Package_Generic_XHTML { ), 'methodsynopsis' => array( /* DEFAULT */ 'format_classsynopsis_methodsynopsis_methodname_text', + 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), 'destructorsynopsis' => array( /* DEFAULT */ 'format_classsynopsis_methodsynopsis_methodname_text', @@ -712,6 +713,17 @@ public function format_classsynopsis_ooclass_classname_text($value, $tag) { parent::format_classsynopsis_ooclass_classname_text($value, $tag); } + public function format_interfacesynopsis_methodsynopsis_methodname_text($value, $tag) { + if ($this->cchunk["interfacesynopsis"]["classname"]) { + if (strpos($value, "::") === false && strpos($value, "->") === false) { + $value = $this->cchunk["interfacesynopsis"]["classname"] . "::" . $value; + } + } + + $display_value = parent::format_interfacesynopsis_methodsynopsis_methodname_text($value, $tag); + return $this->format_function_text($value, $tag, $display_value); + } + public function format_interfacesynopsis_ooclass_classname_text($value, $tag) { /* intentionally not return the value, it will be printed out by "soon" */ parent::format_interfacesynopsis_ooclass_classname_text($value, $tag); From fa82d110e0e9b70b329c29f0854d09c252dbafa5 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:44:07 -0400 Subject: [PATCH 4/6] fix comment --- phpdotnet/phd/Package/PHP/XHTML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpdotnet/phd/Package/PHP/XHTML.php b/phpdotnet/phd/Package/PHP/XHTML.php index 5e19db6c..e46d0a11 100644 --- a/phpdotnet/phd/Package/PHP/XHTML.php +++ b/phpdotnet/phd/Package/PHP/XHTML.php @@ -725,7 +725,7 @@ public function format_interfacesynopsis_methodsynopsis_methodname_text($value, } public function format_interfacesynopsis_ooclass_classname_text($value, $tag) { - /* intentionally not return the value, it will be printed out by "soon" */ + /* intentionally not return the value */ parent::format_interfacesynopsis_ooclass_classname_text($value, $tag); } From 9fc6c4bbb952b5974bb23fc6c6b7722cd2fd43a8 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:44:45 -0400 Subject: [PATCH 5/6] remove unused --- phpdotnet/phd/Package/Generic/XHTML.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index 63c7d665..71cf9e97 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -393,7 +393,6 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { 'constructorsynopsis' => array( /* DEFAULT */ false, 'classsynopsis' => 'format_classsynopsis_methodsynopsis_methodname_text', - 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), 'methodsynopsis' => array( /* DEFAULT */ false, @@ -403,7 +402,6 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { 'destructorsynopsis' => array( /* DEFAULT */ false, 'classsynopsis' => 'format_classsynopsis_methodsynopsis_methodname_text', - 'interfacesynopsis' => 'format_interfacesynopsis_methodsynopsis_methodname_text', ), ), 'para' => array( From af2ece492cfbd5ec5a831e4dea35b46033652152 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 May 2022 12:51:05 -0400 Subject: [PATCH 6/6] Ensure interfaces extends print with commas --- phpdotnet/phd/Package/Generic/XHTML.php | 19 +++++++++++++++++-- phpdotnet/phd/Render.php | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index 71cf9e97..e06981ae 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -165,12 +165,14 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML { 'oointerface' => array( /* DEFAULT */ 'span', 'classsynopsisinfo' => 'format_classsynopsisinfo_oointerface', + 'interfacesynopsisinfo' => 'format_interfacesynopsisinfo_oointerface', ), 'interfacename' => array( /* DEFAULT */ 'span', 'oointerface' => array( - /* DEFAULT */ 'span', - 'classsynopsisinfo' => 'format_classsynopsisinfo_oointerface_interfacename', + /* DEFAULT */ 'format_suppressed_tags', + 'classsynopsisinfo' => 'format_classsynopsisinfo_oointerface_interfacename', + 'interfacesynopsisinfo' => 'format_suppressed_tags', ), ), 'exceptionname' => 'span', @@ -1005,6 +1007,19 @@ public function format_interfacesynopsisinfo_ooclass_classname($open, $name, $at return ""; } + public function format_interfacesynopsisinfo_oointerface($open, $name, $attrs) { + if ($open) { + if ($this->cchunk["interfacesynopsisinfo"]["extends"] === false) { + $this->cchunk["interfacesynopsisinfo"]["extends"] = true; + return ''; + } + + return ', '; + } + + return ""; + } + public function format_interfacesynopsisinfo($open, $name, $attrs) { $this->cchunk["interfacesynopsisinfo"] = $this->dchunk["interfacesynopsisinfo"]; diff --git a/phpdotnet/phd/Render.php b/phpdotnet/phd/Render.php index 4117b4f4..5885579b 100644 --- a/phpdotnet/phd/Render.php +++ b/phpdotnet/phd/Render.php @@ -189,6 +189,7 @@ public function execute(Reader $r) { /* {{{ */ /* The following if is to skip unnecessary whitespaces in the implements list */ if ( + ($this->STACK[$r->depth - 1] === 'interfacesynopsisinfo' && $this->STACK[$r->depth] === 'oointerface') || ($this->STACK[$r->depth - 1] === 'classsynopsisinfo' && $this->STACK[$r->depth] === 'oointerface') || ($this->STACK[$r->depth - 1] === 'oointerface' && $this->STACK[$r->depth] === 'interfacename') ) {