Skip to content

Commit

Permalink
Address review comments
Browse files Browse the repository at this point in the history
Add methods to push, pop and get role, and use these for all role accesses.
Make underlying $role array private.
Add comment on $role array being a LIFO stack.
  • Loading branch information
haszi committed Feb 23, 2024
1 parent b108db8 commit 1f1d272
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 51 deletions.
21 changes: 16 additions & 5 deletions phpdotnet/phd/Format/Abstract/XHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
namespace phpdotnet\phd;

abstract class Format_Abstract_XHTML extends Format {
public $role = [];

/** @var array<?string> Last In First Out stack of roles */
private array $role = [];

/* XHTMLPhDFormat */
protected $openPara = 0;
Expand Down Expand Up @@ -39,14 +41,14 @@ public function UNDEF($open, $name, $attrs, $props) {
}

public function CDATA($str) {
switch(end($this->role)) {
switch($this->getRole()) {
case '':
return '<div class="cdata"><pre>'
. htmlspecialchars($str, ENT_QUOTES, "UTF-8")
. '</pre></div>';
default:
return '<div class="' . end($this->role) . 'code">'
. $this->highlight(trim($str), end($this->role), 'xhtml')
return '<div class="' . $this->getRole() . 'code">'
. $this->highlight(trim($str), $this->getRole(), 'xhtml')
. '</div>';
}
}
Expand Down Expand Up @@ -123,6 +125,15 @@ public function restorePara() {
}
}

}
protected function pushRole(?string $role): void {
$this->role[] = $role;
}

protected function getRole(): ?string {
return end($this->role);
}

protected function popRole(): ?string {
return array_pop($this->role);
}
}
53 changes: 22 additions & 31 deletions phpdotnet/phd/Package/Generic/XHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -705,29 +705,25 @@ public function format_option($open, $name, $attrs) {
if(!isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$attrs[Reader::XMLNS_DOCBOOK]["role"] = "unknown";
}
$this->role[] = $role = $attrs[Reader::XMLNS_DOCBOOK]["role"];
return '<strong class="' .$name.' ' .$role. '">';
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"]);
return '<strong class="' . $name . ' ' . $this->getRole() . '">';
}
array_pop($this->role);
$this->popRole();
return "</strong>";
}

public function format_literal($open, $name, $attrs)
{
if ($open) {
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$this->role[] = $attrs[Reader::XMLNS_DOCBOOK]["role"];
} else {
$this->role[] = null;
}
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"] ?? null);
return '<code class="literal">';
}
array_pop($this->role);
$this->popRole();
return '</code>';
}

public function format_literal_text($value, $tag) {
switch (end($this->role)) {
switch ($this->getRole()) {
case 'infdec':
$value = (float)$value;
$p = strpos($value, '.');
Expand Down Expand Up @@ -930,18 +926,18 @@ public function format_refsect($open, $name, $attrs) {
if(!isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$attrs[Reader::XMLNS_DOCBOOK]["role"] = "unknown-" . ++$role;
}
$this->role[] = $role = $attrs[Reader::XMLNS_DOCBOOK]["role"];
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"]);

if (isset($attrs[Reader::XMLNS_XML]["id"])) {
$id = $attrs[Reader::XMLNS_XML]["id"];
}
else {
$id = $name. "-" . $this->CURRENT_CHUNK . "-" . $role;
$id = $name. "-" . $this->CURRENT_CHUNK . "-" . $this->getRole();
}

return '<div class="' .$name.' ' .$role. '" id="' . $id . '">';
return '<div class="' .$name.' ' .$this->getRole(). '" id="' . $id . '">';
}
array_pop($this->role);
$this->popRole();
return "</div>\n";
}

Expand Down Expand Up @@ -1495,13 +1491,13 @@ public function format_step($open, $name, $attrs) {
public function format_variablelist($open, $name, $attrs, $props) {
if ($open) {
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$this->role[] = $attrs[Reader::XMLNS_DOCBOOK]["role"];
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"]);
}
$classStr = $headerStr = $idStr = '';
if (isset($attrs[Reader::XMLNS_XML]["id"])) {
$idStr = ' id="' . $attrs[Reader::XMLNS_XML]["id"] . '"';
}
if (end($this->role) === 'constant_list') {
if ($this->getRole() === 'constant_list') {
$tagName = 'table';
$classStr = ' class="doctable table"';
$headerStr = "\n" . $this->indent($props["depth"] + 1) . "<tr>\n"
Expand All @@ -1515,8 +1511,8 @@ public function format_variablelist($open, $name, $attrs, $props) {
}
return '<' . $tagName . $idStr . $classStr . '>' . $headerStr;
}
$tagName = (end($this->role) === 'constant_list') ? 'table' : 'dl';
array_pop($this->role);
$tagName = ($this->getRole() === 'constant_list') ? 'table' : 'dl';
$this->popRole();
return "</" . $tagName . ">";
}
public function format_varlistentry($open, $name, $attrs) {
Expand All @@ -1526,12 +1522,12 @@ public function format_varlistentry($open, $name, $attrs) {
} else {
unset($this->cchunk['varlistentry']['id']);
}
return (end($this->role) === 'constant_list') ? '<tr>' : '';
return ($this->getRole() === 'constant_list') ? '<tr>' : '';
}
return (end($this->role) === 'constant_list') ? '</tr>' : '';
return ($this->getRole() === 'constant_list') ? '</tr>' : '';
}
public function format_varlistentry_term($open, $name, $attrs, $props) {
$tagName = (end($this->role) === 'constant_list') ? 'td' : 'dt';
$tagName = ($this->getRole() === 'constant_list') ? 'td' : 'dt';
if ($open) {
if (isset($this->cchunk['varlistentry']['id'])) {
$id = $this->cchunk['varlistentry']['id'];
Expand All @@ -1544,7 +1540,7 @@ public function format_varlistentry_term($open, $name, $attrs, $props) {
return "</" . $tagName . ">";
}
public function format_varlistentry_listitem($open, $name, $attrs) {
$tagName = (end($this->role) === 'constant_list') ? 'td' : 'dd';
$tagName = ($this->getRole() === 'constant_list') ? 'td' : 'dd';
if ($open) {
return "<" . $tagName . ">";
}
Expand Down Expand Up @@ -1591,15 +1587,10 @@ public function format_example_content($open, $name, $attrs) {
}
public function format_programlisting($open, $name, $attrs) {
if ($open) {
if (isset($attrs[Reader::XMLNS_DOCBOOK]["role"])) {
$this->role[] = $attrs[Reader::XMLNS_DOCBOOK]["role"];
} else {
$this->role[] = null;
}

$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]["role"] ?? null);
return '<div class="example-contents">';
}
array_pop($this->role);
$this->popRole();
return "</div>\n";
}
public function format_programlisting_text($value, $tag) {
Expand Down Expand Up @@ -1690,9 +1681,9 @@ public function format_table_title($open, $name, $attrs, $props)
}
public function format_variablelist_title($open, $name, $attrs, $props) {
if ($open) {
return (end($this->role) === 'constant_list') ? "<caption><strong>" : "<strong>";
return ($this->getRole() === 'constant_list') ? "<caption><strong>" : "<strong>";
}
return (end($this->role) === 'constant_list') ? "</strong></caption>" : "</strong>";
return ($this->getRole() === 'constant_list') ? "</strong></caption>" : "</strong>";
}

public function format_mediaobject($open, $name, $attrs) {
Expand Down
24 changes: 10 additions & 14 deletions phpdotnet/phd/Package/PEAR/XHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -683,16 +683,12 @@ public function format_programlisting($open, $name, $attrs)
{
if ($open) {
$this->trim = true;
if (isset($attrs[Reader::XMLNS_DOCBOOK]['role'])) {
$this->role[] = $attrs[Reader::XMLNS_DOCBOOK]['role'];
} else {
$this->role[] = '';
}
$this->pushRole($attrs[Reader::XMLNS_DOCBOOK]['role'] ?? '');

return '<div class="'. (end($this->role) ? end($this->role) . 'code' : 'programlisting')
return '<div class="'. ($this->getRole() ? $this->getRole() . 'code' : 'programlisting')
. '">';
}
array_pop($this->role);
$this->popRole();
$this->trim = false;

return '</div>';
Expand All @@ -710,7 +706,7 @@ public function format_programlisting($open, $name, $attrs)
*/
public function format_programlisting_text($value, $tag)
{
switch(end($this->role)) {
switch($this->getRole()) {
case 'php':
if (strrpos($value, '<?php') || strrpos($value, '?>')) {
return $this->highlight(trim($value), 'php', 'xhtml');
Expand All @@ -719,7 +715,7 @@ public function format_programlisting_text($value, $tag)
}
break;
default:
return $this->highlight(trim($value), end($this->role), 'xhtml');
return $this->highlight(trim($value), $this->getRole(), 'xhtml');
}
}

Expand Down Expand Up @@ -760,26 +756,26 @@ public function CDATA($str)
if ($this->trim) {
$str = rtrim($str);
}
if (!end($this->role)) {
if (!$this->getRole()) {
return str_replace(
array("\n", ' '), array('<br/>', '&nbsp;'),
htmlspecialchars($str, ENT_QUOTES, 'UTF-8')
);
}

switch (end($this->role)) {
switch ($this->getRole()) {
case 'php':
if (strrpos($str, '<?php') || strrpos($str, '?>')) {
$str = $this->highlight(trim($str), end($this->role), 'xhtml');
$str = $this->highlight(trim($str), $this->getRole(), 'xhtml');
} else {
$str = $this->highlight("<?php\n" . trim($str) . "\n?>", end($this->role), 'xhtml');
$str = $this->highlight("<?php\n" . trim($str) . "\n?>", $this->getRole(), 'xhtml');
}
break;
case '':
$str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
break;
default:
$str = $this->highlight($str, end($this->role), 'xhtml');
$str = $this->highlight($str, $this->getRole(), 'xhtml');
break;
}

Expand Down
2 changes: 1 addition & 1 deletion phpdotnet/phd/Package/PHP/XHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -843,7 +843,7 @@ public function format_function_text($value, $tag, $display_value = null) {
if ($filename !== null) {
if ($this->CURRENT_ID !== $filename) {
$rel = $desc = "";
if (end($this->role) == "seealso") {
if ($this->getRole() === "seealso") {
$rel = ' rel="rdfs-seeAlso"';
$desc = " - " . Format::getLongDescription($filename);
}
Expand Down

0 comments on commit 1f1d272

Please sign in to comment.