Skip to content

Commit

Permalink
Add non-parameter attribute rendering
Browse files Browse the repository at this point in the history
Enable rendering of attributes for classes, exceptions, interfaces, methods and functions.
  • Loading branch information
haszi authored and kocsismate committed Jun 10, 2024
1 parent e18fd3e commit 472dd3c
Show file tree
Hide file tree
Showing 5 changed files with 339 additions and 5 deletions.
26 changes: 25 additions & 1 deletion phpdotnet/phd/Package/Generic/XHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,10 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML {
'methodsynopsis' => 'format_methodsynopsis',
'methodname' => 'format_methodname',
'member' => 'format_member',
'modifier' => 'format_modifier',
'modifier' => array(
/* DEFAULT */ 'format_modifier',
'methodparam' => 'format_methodparam_modifier',
),
'note' => 'format_note',
'orgname' => 'span',
'othercredit' => 'format_div',
Expand Down Expand Up @@ -395,6 +398,10 @@ abstract class Package_Generic_XHTML extends Format_Abstract_XHTML {
'fieldsynopsis' => 'format_fieldsynopsis_modifier_text',
'methodparam' => 'format_modifier_text',
'methodsynopsis' => 'format_modifier_text',
'constructorsynopsis' => 'format_modifier_text',
'ooclass' => 'format_modifier_text',
'ooexception' => 'format_modifier_text',
'oointerface' => 'format_modifier_text',
),
/** Those are used to retrieve the class/interface name to be able to remove it from method names */
'classname' => [
Expand Down Expand Up @@ -1220,6 +1227,23 @@ public function format_fieldsynopsis_modifier_text($value, $tag) {
}

public function format_modifier($open, $name, $attrs, $props) {
if ($open) {
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"]);
return '<span class="' . $this->getRole() . '">';
}
return '<span class="modifier">';
}
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
if ($attrs[Reader::XMLNS_DOCBOOK]["role"] === "attribute") {
return '</span><br>';
}
$this->popRole();
}
return '</span>';
}

public function format_methodparam_modifier($open, $name, $attrs, $props) {
if ($open) {
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"]);
Expand Down
4 changes: 2 additions & 2 deletions tests/package/generic/attribute_formatting_001.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ Content:

<div class="section">
<p class="para">3. Function parameter with unknown attribute</p>
<div class="methodsynopsis dc-description"><span class="type">bool</span> <span class="methodname">password_verify</span><span class="attribute">#[\UnknownAttribute]</span>(<span class="methodparam"><span class="type">string</span> <code class="parameter">$password</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$hash</code></span>)</div>
<div class="methodsynopsis dc-description"><span class="type">bool</span> <span class="methodname">password_verify</span>(<span class="methodparam"><span class="attribute">#[\UnknownAttribute]</span><span class="type">string</span> <code class="parameter">$password</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$hash</code></span>)</div>

</div>

<div class="section">
<p class="para">4. Function parameter with known attribute</p>
<div class="methodsynopsis dc-description"><span class="type">bool</span> <span class="methodname">password_verify</span><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span>(<span class="methodparam"><span class="type">string</span> <code class="parameter">$password</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$hash</code></span>)</div>
<div class="methodsynopsis dc-description"><span class="type">bool</span> <span class="methodname">password_verify</span>(<span class="methodparam"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><span class="type">string</span> <code class="parameter">$password</code></span>, <span class="methodparam"><span class="type">string</span> <code class="parameter">$hash</code></span>)</div>

</div>
</div>
170 changes: 170 additions & 0 deletions tests/package/generic/attribute_formatting_002.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
--TEST--
Attribute formatting 002 - Class and method attributes
--FILE--
<?php
namespace phpdotnet\phd;

require_once __DIR__ . "/../../setup.php";

$xml_file = __DIR__ . "/data/attribute_formatting_002.xml";

Config::init(["xml_file" => $xml_file]);

$format = new TestGenericChunkedXHTML;

$format->SQLiteIndex(
null, // $context,
null, // $index,
"class.knownattribute", // $id,
"file.knownattribute.is.in", // $filename,
"", // $parent,
"", // $sdesc,
"", // $ldesc,
"", // $element,
"", // $previous,
"", // $next,
0, // $chunk
);
$format->SQLiteIndex(
null, // $context,
null, // $index,
"class.anotherknownattribute", // $id,
"file.anotherknownattribute.is.in", // $filename,
"", // $parent,
"", // $sdesc,
"", // $ldesc,
"", // $element,
"", // $previous,
"", // $next,
0, // $chunk
);

$render = new TestRender(new Reader, new Config, $format);

$render->run();
?>
--EXPECT--
Filename: attribute-formatting-002.html
Content:
<div id="attribute-formatting-002" class="chapter">
<div class="section">
<p class="para">1. Class with unknown attributes</p>
<div class="classsynopsis"><div class="classsynopsisinfo">

<span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">class</span> <strong class="classname">DateTime</strong>
{</div>
}</div>
</div>

<div class="section">
<p class="para">2. Class with known attributes</p>
<div class="classsynopsis"><div class="classsynopsisinfo">

<span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">class</span> <strong class="classname">DateTime</strong>
{</div>
}</div>
</div>

<div class="section">
<p class="para">3. Method with unknown attributes</p>
<div class="methodsynopsis dc-description">
<span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName</span>()</div>

</div>

<div class="section">
<p class="para">4. Method with known attributes</p>
<div class="methodsynopsis dc-description"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName</span>()</div>

</div>

<div class="section">
<p class="para">5. Constructor with unknown attributes</p>
<div class="constructorsynopsis dc-description"><span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::__construct</span>()</div>

</div>

<div class="section">
<p class="para">6. Constructor with known attributes</p>
<div class="constructorsynopsis dc-description"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::__construct</span>()</div>

</div>

<div class="section">
<p class="para">7. Class, constructor and methods with unknown attributes</p>
<div class="classsynopsis"><div class="classsynopsisinfo">

<span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">class</span> <strong class="classname">DateTime</strong>
{</div>
<div class="constructorsynopsis dc-description">
<span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::__construct</span>()</div>

<div class="methodsynopsis dc-description"><span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName1</span>()</div>

<div class="methodsynopsis dc-description"><span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName2</span>()</div>

}</div>
</div>

<div class="section">
<p class="para">8. Class, constructor and methods with known attributes</p>
<div class="classsynopsis"><div class="classsynopsisinfo">

<span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">class</span> <strong class="classname">DateTime</strong>
{</div>
<div class="constructorsynopsis dc-description">
<span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::__construct</span>()</div>

<div class="methodsynopsis dc-description"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName1</span>()</div>

<div class="methodsynopsis dc-description"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="modifier">public</span> <span class="methodname">ClassName::methodName2</span>()</div>

}</div>
</div>

<div class="section">
<p class="para">9. Function with unknown attributes</p>
<div class="methodsynopsis dc-description">
<span class="attribute">#[\UnknownAttribute]</span><br>
<span class="attribute">#[\AnotherUnknownAttribute]</span><br>
<span class="type">void</span> <span class="methodname">function_name</span>)</div>

</div>

<div class="section">
<p class="para">10. Function with known attributes</p>
<div class="methodsynopsis dc-description"><span class="attribute"><a href="file.knownattribute.is.in.html">#[\KnownAttribute]</a> </span><br>
<span class="attribute"><a href="file.anotherknownattribute.is.in.html">#[\AnotherKnownAttribute]</a> </span><br>
<span class="type">void</span> <span class="methodname">function_name</span>)</div>

</div>

</div>
4 changes: 2 additions & 2 deletions tests/package/generic/data/attribute_formatting_001.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<para>3. Function parameter with unknown attribute</para>
<methodsynopsis>
<type>bool</type><methodname>password_verify</methodname>
<modifier role="attribute">#[\UnknownAttribute]</modifier><methodparam><type>string</type><parameter>password</parameter></methodparam>
<methodparam><modifier role="attribute">#[\UnknownAttribute]</modifier><type>string</type><parameter>password</parameter></methodparam>
<methodparam><type>string</type><parameter>hash</parameter></methodparam>
</methodsynopsis>
</section>
Expand All @@ -28,7 +28,7 @@
<para>4. Function parameter with known attribute</para>
<methodsynopsis>
<type>bool</type><methodname>password_verify</methodname>
<modifier role="attribute">#[\KnownAttribute]</modifier><methodparam><type>string</type><parameter>password</parameter></methodparam>
<methodparam><modifier role="attribute">#[\KnownAttribute]</modifier><type>string</type><parameter>password</parameter></methodparam>
<methodparam><type>string</type><parameter>hash</parameter></methodparam>
</methodsynopsis>
</section>
Expand Down
140 changes: 140 additions & 0 deletions tests/package/generic/data/attribute_formatting_002.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
<chapter xml:id="attribute-formatting-002">
<section>
<para>1. Class with unknown attributes</para>
<classsynopsis class="class">
<ooclass>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<classname>DateTime</classname>
</ooclass>
</classsynopsis>
</section>

<section>
<para>2. Class with known attributes</para>
<classsynopsis class="class">
<ooclass>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<classname>DateTime</classname>
</ooclass>
</classsynopsis>
</section>

<section>
<para>3. Method with unknown attributes</para>
<methodsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName</methodname>
<void/>
</methodsynopsis>
</section>

<section>
<para>4. Method with known attributes</para>
<methodsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName</methodname>
<void/>
</methodsynopsis>
</section>

<section>
<para>5. Constructor with unknown attributes</para>
<constructorsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::__construct</methodname>
<void/>
</constructorsynopsis>
</section>

<section>
<para>6. Constructor with known attributes</para>
<constructorsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::__construct</methodname>
<void/>
</constructorsynopsis>
</section>

<section>
<para>7. Class, constructor and methods with unknown attributes</para>
<classsynopsis class="class">
<ooclass>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<classname>DateTime</classname>
</ooclass>
<constructorsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::__construct</methodname>
<void/>
</constructorsynopsis>
<methodsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName1</methodname>
<void/>
</methodsynopsis>
<methodsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName2</methodname>
<void/>
</methodsynopsis>
</classsynopsis>
</section>

<section>
<para>8. Class, constructor and methods with known attributes</para>
<classsynopsis class="class">
<ooclass>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<classname>DateTime</classname>
</ooclass>
<constructorsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::__construct</methodname>
<void/>
</constructorsynopsis>
<methodsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName1</methodname>
<void/>
</methodsynopsis>
<methodsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<modifier>public</modifier> <methodname>ClassName::methodName2</methodname>
<void/>
</methodsynopsis>
</classsynopsis>
</section>

<section>
<para>9. Function with unknown attributes</para>
<methodsynopsis>
<modifier role="attribute">#[\UnknownAttribute]</modifier>
<modifier role="attribute">#[\AnotherUnknownAttribute]</modifier>
<type>void</type><methodname>function_name</methodname>
</methodsynopsis>
</section>

<section>
<para>10. Function with known attributes</para>
<methodsynopsis>
<modifier role="attribute">#[\KnownAttribute]</modifier>
<modifier role="attribute">#[\AnotherKnownAttribute]</modifier>
<type>void</type><methodname>function_name</methodname>
</methodsynopsis>
</section>

</chapter>

0 comments on commit 472dd3c

Please sign in to comment.