Skip to content

Commit 80c2cd3

Browse files
author
haszi
committed
Fix FQN class and method linking
Closes GH-170
1 parent f128079 commit 80c2cd3

File tree

3 files changed

+115
-4
lines changed

3 files changed

+115
-4
lines changed

phpdotnet/phd/Package/PHP/XHTML.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ public function format_type_methodparam_text($type, $tagname) {
666666
}
667667

668668
public function format_type_text($type, $tagname) {
669-
$t = strtr(strtolower($type), ["_" => "-", "\\" => "-"]);
669+
$t = strtr(ltrim(strtolower($type), "\\"), ["_" => "-", "\\" => "-"]);
670670
$fragment = "";
671671

672672
switch($t) {
@@ -714,7 +714,7 @@ public function format_type_text($type, $tagname) {
714714
return false;
715715
}
716716

717-
$classNames = ($type === "?") ? ($tagname . ' null') : ($tagname . ' ' . $type);
717+
$classNames = ($type === "?") ? ($tagname . ' null') : ($tagname . ' ' . ltrim($type, "\\"));
718718
if ($href && $this->chunked) {
719719
return '<a href="' .$href. $this->getExt().($fragment ? "#$fragment" : ""). '" class="' . $classNames . '">' .$type. '</a>';
720720
}
@@ -837,7 +837,7 @@ public function format_function_text($value, $tag, $display_value = null) {
837837
if (isset($non_functions[$value])) {
838838
$filename = "function." . str_replace("_", "-", $value);
839839
} else {
840-
$ref = strtolower($value);
840+
$ref = ltrim(strtolower($value), "\\");
841841
$filename = $this->getRefnameLink($ref);
842842
}
843843
if ($filename !== null) {
@@ -880,7 +880,7 @@ public function format_classsynopsis_oo_name_text($value, $tag) {
880880
}
881881

882882
public function format_classname_text($value, $tag) {
883-
if (($filename = $this->getClassnameLink(strtolower($value))) !== null && $this->cchunk["class_name_ref"] !== strtolower($value)) {
883+
if (($filename = $this->getClassnameLink(ltrim(strtolower($value), "\\"))) !== null && $this->cchunk["class_name_ref"] !== strtolower($value)) {
884884
$href = $this->chunked ? $filename.$this->ext : "#$filename";
885885
return '<a href="'.$href. '" class="' .$tag. '">' .$value. '</a>';
886886
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
--TEST--
2+
Class and method link rendering 001
3+
--FILE--
4+
<?php
5+
namespace phpdotnet\phd;
6+
7+
require_once __DIR__ . "/../../setup.php";
8+
9+
$config->setXml_file(
10+
__DIR__ . "/data/class_and_method_link_rendering_001.xml"
11+
);
12+
13+
$indices = [
14+
[
15+
"docbook_id" => "class.extension-namespace-existing-class",
16+
"filename" => "extensionname.classpage",
17+
"element" => "phpdoc:classref",
18+
],
19+
[
20+
"docbook_id" => "extension-namespace-classname.existingmethodname",
21+
"filename" => "extension-namespace-classname.methodpage",
22+
],
23+
];
24+
25+
$format = new TestPHPChunkedXHTML($config, $outputHandler);
26+
27+
foreach ($indices as $index) {
28+
$format->SQLiteIndex(
29+
null, // $context,
30+
null, // $index,
31+
$index["docbook_id"] ?? "", // $id,
32+
$index["filename"] ?? "", // $filename,
33+
$index["parent_id"] ?? "", // $parent,
34+
$index["sdesc"] ?? "", // $sdesc,
35+
$index["ldesc"] ?? "", // $ldesc,
36+
$index["element"] ?? "", // $element,
37+
$index["previous"] ?? "", // $previous,
38+
$index["next"] ?? "", // $next,
39+
$index["chunk"] ?? 0, // $chunk
40+
);
41+
}
42+
43+
$format->addClassname("class.extension-namespace-existing-class", "extension\\namespace\\existing_class");
44+
$format->addRefname("extension-namespace-classname.existingmethodname", "extension\\namespace\\classname::existingmethodname");
45+
46+
$render = new TestRender(new Reader($outputHandler), $config, $format);
47+
48+
$render->run();
49+
?>
50+
--EXPECTF--
51+
Filename: class_and_method_link_rendering.html
52+
Content:
53+
<div id="class_and_method_link_rendering" class="chapter">
54+
55+
<div class="section">
56+
<p class="para">1. Class linking</p>
57+
<span class="classname"><a href="class.extension-namespace-existing-class.html" class="classname">Extension\Namespace\Existing_Class</a></span>
58+
<span class="classname"><a href="class.extension-namespace-existing-class.html" class="classname">\Extension\Namespace\Existing_Class</a></span>
59+
</div>
60+
61+
<div class="section">
62+
<p class="para">2. Method/Function linking</p>
63+
<span class="methodname"><a href="extension-namespace-classname.existingmethodname.html" class="methodname">Extension\Namespace\Classname::existingMethodName()</a></span>
64+
<span class="methodname"><a href="extension-namespace-classname.existingmethodname.html" class="methodname">\Extension\Namespace\Classname::existingMethodName()</a></span>
65+
</div>
66+
67+
<div class="section">
68+
<p class="para">3. Class linking (non-FQN) in method/function parameter and return type</p>
69+
<div class="methodsynopsis dc-description"><span class="methodname"><strong>method_name</strong></span>(<span class="methodparam"><span class="type"><a href="extensionname.classpage.html" class="type Extension\Namespace\Existing_Class">Extension\Namespace\Existing_Class</a></span> <code class="parameter">$paramName</code></span>): <span class="type"><a href="extensionname.classpage.html" class="type Extension\Namespace\Existing_Class">Extension\Namespace\Existing_Class</a></span></div>
70+
71+
</div>
72+
73+
<div class="section">
74+
<p class="para">4. Class linking (FQN) in method/function parameter and return type</p>
75+
<div class="methodsynopsis dc-description"><span class="methodname"><strong>method_name</strong></span>(<span class="methodparam"><span class="type"><a href="extensionname.classpage.html" class="type Extension\Namespace\Existing_Class">\Extension\Namespace\Existing_Class</a></span> <code class="parameter">$paramName</code></span>): <span class="type"><a href="extensionname.classpage.html" class="type Extension\Namespace\Existing_Class">\Extension\Namespace\Existing_Class</a></span></div>
76+
77+
</div>
78+
79+
</div>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<chapter xml:id="class_and_method_link_rendering" xmlns="http://docbook.org/ns/docbook">
3+
4+
<section>
5+
<para>1. Class linking</para>
6+
<classname>Extension\Namespace\Existing_Class</classname>
7+
<classname>\Extension\Namespace\Existing_Class</classname>
8+
</section>
9+
10+
<section>
11+
<para>2. Method/Function linking</para>
12+
<methodname>Extension\Namespace\Classname::existingMethodName</methodname>
13+
<methodname>\Extension\Namespace\Classname::existingMethodName</methodname>
14+
</section>
15+
16+
<section>
17+
<para>3. Class linking (non-FQN) in method/function parameter and return type</para>
18+
<methodsynopsis>
19+
<type>Extension\Namespace\Existing_Class</type><methodname>method_name</methodname>
20+
<methodparam><type>Extension\Namespace\Existing_Class</type><parameter>paramName</parameter></methodparam>
21+
</methodsynopsis>
22+
</section>
23+
24+
<section>
25+
<para>4. Class linking (FQN) in method/function parameter and return type</para>
26+
<methodsynopsis>
27+
<type>\Extension\Namespace\Existing_Class</type><methodname>method_name</methodname>
28+
<methodparam><type>\Extension\Namespace\Existing_Class</type><parameter>paramName</parameter></methodparam>
29+
</methodsynopsis>
30+
</section>
31+
32+
</chapter>

0 commit comments

Comments
 (0)