From b10e81b04ac6fd65bfd8eddf86ce281dd52f5f5c Mon Sep 17 00:00:00 2001 From: Simon Podlipsky Date: Sat, 7 Mar 2020 16:18:02 +0100 Subject: [PATCH] Improve parameter rendering Allow to properly render: - arguments - arguments by reference - varible-length argument lists - varible-length argument lists passed by reference --- phpdotnet/phd/Package/Generic/Manpage.php | 27 +++++++++-- phpdotnet/phd/Package/Generic/PDF.php | 57 ++++++++++++++++++----- phpdotnet/phd/Package/Generic/XHTML.php | 35 +++++++++++--- phpdotnet/phd/Package/IDE/API/Param.php | 13 +++++- 4 files changed, 109 insertions(+), 23 deletions(-) diff --git a/phpdotnet/phd/Package/Generic/Manpage.php b/phpdotnet/phd/Package/Generic/Manpage.php index 48b9ea09e..ada0f0f10 100644 --- a/phpdotnet/phd/Package/Generic/Manpage.php +++ b/phpdotnet/phd/Package/Generic/Manpage.php @@ -583,10 +583,29 @@ public function format_type_method_text($value, $tag) { } public function format_parameter_method($open, $name, $attrs, $props) { - if ($open && isset($attrs[Reader::XMLNS_DOCBOOK]["role"]) && $attrs[Reader::XMLNS_DOCBOOK]["role"] == "reference") { - $this->cchunk['methodsynopsis']['params'][count($this->cchunk['methodsynopsis']['params'])-1]['reference'] = true; + if ($open) { + if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) { + $role = $attrs[Reader::XMLNS_DOCBOOK]['role']; + switch ($role) { + case 'reference': + $this->cchunk['methodsynopsis']['params'][count($this->cchunk['methodsynopsis']['params'])-1]['role_symbol'] = '&'; + + return ''; + case 'vararglist': + $this->cchunk['methodsynopsis']['params'][count($this->cchunk['methodsynopsis']['params'])-1]['role_symbol'] = '...'; + + return ''; + case 'reference_vararglist': + $this->cchunk['methodsynopsis']['params'][count($this->cchunk['methodsynopsis']['params'])-1]['role_symbol'] = '&...'; + + return ''; + } + } + + $this->cchunk['methodsynopsis']['params'][count($this->cchunk['methodsynopsis']['params'])-1]['role_symbol'] = ''; } - return ""; + + return ''; } public function format_parameter_method_text($value, $tag) { @@ -622,7 +641,7 @@ public function format_methodsynopsis($open, $name, $attrs, $props) { foreach ($this->cchunk['methodsynopsis']['params'] as $parameter) { array_push($params, ($parameter['optional'] ? "[" : "") . $parameter['type'] . " " - . ($parameter['reference'] ? " \\fI&\\fP" : " ") + . ' \\fI' . $parameter['role_symbol'] , '\\fP' . ($parameter['name'] ? "\\fI$" . $parameter['name'] . "\\fP" : "") . ($parameter['initializer'] ? " = " . $parameter['initializer'] : "") . ($parameter['optional'] ? "]" : "") ); diff --git a/phpdotnet/phd/Package/Generic/PDF.php b/phpdotnet/phd/Package/Generic/PDF.php index bfa19c560..76747df53 100644 --- a/phpdotnet/phd/Package/Generic/PDF.php +++ b/phpdotnet/phd/Package/Generic/PDF.php @@ -849,31 +849,66 @@ public function format_classsynopsis_methodsynopsis_methodname_text($value, $tag public function format_methodparam_parameter($open, $name, $attrs, $props) { if ($props["empty"]) return ''; + if ($open) { - if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) { - $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM, 10); - $this->pdfDoc->appendText(" &$"); - return ''; - } $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM, 10); - $this->pdfDoc->appendText(" $"); + + if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) { + $role = $attrs[Reader::XMLNS_DOCBOOK]['role']; + switch ($role) { + case 'reference': + $this->pdfDoc->appendText('&$'); + + return ''; + case 'vararglist': + $this->pdfDoc->appendText('...$'); + + return ''; + case 'reference_vararglist': + $this->pdfDoc->appendText('&...$'); + + return ''; + } + } + + $this->pdfDoc->appendText(' $'); + return ''; } + $this->pdfDoc->revertFont(); return ''; } public function format_parameter($open, $name, $attrs, $props) { if ($props["empty"]) return ''; + if ($open) { - if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) { - $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM_ITALIC, 10); - $this->pdfDoc->appendText(" &"); - return ''; + $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM, 10); + + if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) { + $role = $attrs[Reader::XMLNS_DOCBOOK]['role']; + switch ($role) { + case 'reference': + $this->pdfDoc->appendText('&$'); + + return ''; + case 'vararglist': + $this->pdfDoc->appendText('...$'); + + return ''; + case 'reference_vararglist': + $this->pdfDoc->appendText('&...$'); + + return ''; + } } - $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM_ITALIC, 10); + + $this->pdfDoc->appendText(' $'); + return ''; } + $this->pdfDoc->revertFont(); return ''; } diff --git a/phpdotnet/phd/Package/Generic/XHTML.php b/phpdotnet/phd/Package/Generic/XHTML.php index e941c69df..545abc2cf 100644 --- a/phpdotnet/phd/Package/Generic/XHTML.php +++ b/phpdotnet/phd/Package/Generic/XHTML.php @@ -996,13 +996,24 @@ public function format_methodparam_parameter($open, $name, $attrs, $props) if ($props["empty"]) { return ''; } + if ($open) { - if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) { - return ' &$'; + if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) { + $role = $attrs[Reader::XMLNS_DOCBOOK]['role']; + switch ($role) { + case 'reference': + return ' &$'; + case 'vararglist': + return ' ...$'; + case 'reference_vararglist': + return ' &...$'; + } } + return ' $'; } - return ""; + + return ''; } public function format_initializer($open, $name, $attrs) { @@ -1011,18 +1022,30 @@ public function format_initializer($open, $name, $attrs) { } return ''; } + public function format_parameter($open, $name, $attrs, $props) { if ($props["empty"]) { return ''; } + if ($open) { - if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) { - return '&'; + if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) { + $role = $attrs[Reader::XMLNS_DOCBOOK]['role']; + switch ($role) { + case 'reference': + return '&'; + case 'vararglist': + return ' ...'; + case 'reference_vararglist': + return '&...'; + } } + return ''; } - return ""; + + return ''; } public function format_void($open, $name, $attrs, $props) { diff --git a/phpdotnet/phd/Package/IDE/API/Param.php b/phpdotnet/phd/Package/IDE/API/Param.php index 4b67f7f96..1b04a6aa3 100644 --- a/phpdotnet/phd/Package/IDE/API/Param.php +++ b/phpdotnet/phd/Package/IDE/API/Param.php @@ -12,6 +12,8 @@ */ namespace phpdotnet\phd; +use function substr; + /** * Class to parse the function parameters. * @@ -81,8 +83,15 @@ public function __construct(\SimpleXMLElement $xmlElement) public function __toString() { $str = $this->getType(); - $str .= (substr($this->getName(), 0, 1) != '$') ? ' $' : ' '; - $str .= $this->getName(); + $str .= ' '; + if (substr($this->getName(), 0, 3) === '...') { + $str .= str_replace('...', '...$', $this->getName()); + } elseif (substr($this->getName(), 0, 1) === '$') { + $str .= $this->getName(); + } else { + $str .= '$'; + $str .= $this->getName(); + } if ($this->isOptional()) { $str .= ' = ';