mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-07-22 04:53:35 -04:00
55 lines
1.3 KiB
PHP
55 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Gt\CssXPath;
|
|
|
|
class XPathExpression {
|
|
/** @var array<int, string> */
|
|
private array $parts;
|
|
private bool $hasElement = false;
|
|
|
|
public function __construct(string $prefix) {
|
|
$this->parts = [$prefix];
|
|
}
|
|
|
|
public function appendElement(string $element, bool $htmlMode):void {
|
|
$this->parts[] = $htmlMode ? strtolower($element) : $element;
|
|
$this->hasElement = true;
|
|
}
|
|
|
|
public function ensureElement():void {
|
|
if($this->hasElement) {
|
|
return;
|
|
}
|
|
|
|
$this->parts[] = "*";
|
|
$this->hasElement = true;
|
|
}
|
|
|
|
public function appendFragment(string $fragment):void {
|
|
$this->parts[] = $fragment;
|
|
}
|
|
|
|
public function markElementMissing():void {
|
|
$this->hasElement = false;
|
|
}
|
|
|
|
public function prependToLast(string $prefix):void {
|
|
$index = count($this->parts) - 1;
|
|
$this->parts[$index] = $prefix . $this->parts[$index];
|
|
}
|
|
|
|
public function replaceInLast(string $search, string $replace):void {
|
|
$index = count($this->parts) - 1;
|
|
$this->parts[$index] = str_replace($search, $replace, $this->parts[$index]);
|
|
}
|
|
|
|
public function lastPartEndsWith(string $suffix):bool {
|
|
$index = count($this->parts) - 1;
|
|
return substr($this->parts[$index], -strlen($suffix)) === $suffix;
|
|
}
|
|
|
|
public function toString():string {
|
|
return implode("", $this->parts);
|
|
}
|
|
}
|