Files
wingedit.pl/wp-content/plugins/wp-all-import/libraries/ast/XmlImportAstSequence.php
2024-11-04 20:48:19 +01:00

161 lines
2.8 KiB
PHP

<?php
/**
* @author Olexandr Zanichkovsky <olexandr.zanichkovsky@zophiatech.com>
* @package AST
*/
require_once dirname(__FILE__) . '/XmlImportAstStatement.php';
/**
* Represents statement sequence
*/
class XmlImportAstSequence extends XmlImportAstStatement
{
/**
* Sequence instance number
*
* @var int
*/
private static $sequenceInstanceNumber = 0;
/**
* Current sequence number
*
* @var int
*/
private $sequenceNumber;
/**
* Current variable number
*
* @var int
*/
private $varNumber = 0;
/**
* List of statements
*
* @var array
*/
private $statements = array();
/**
* Variable definitions
*
* @var array
*/
private $variableDefinitions = array();
/**
* Variables
*
* @var array
*/
private $variables = array();
/**
* Creates new instance
*/
public function __construct()
{
$this->sequenceNumber = self::$sequenceInstanceNumber++;
}
/**
* Adds statement to a sequence
*
* @param XmlImportAstStatement $statement
*/
public function addStatement(XmlImportAstStatement $statement)
{
$this->statements[] = $statement;
}
/**
* Gets the list of statements
*
* @return array
*/
public function getStatements()
{
return $this->statements;
}
/**
* Adds variable to a sequence
*
* @param XmlImportAstXPath $xpath
*/
public function addVariable(XmlImportAstXPath $xpath)
{
if (!array_key_exists($xpath->getValue(), $this->variables))
{
$var = '$v' . $this->sequenceNumber . '_' . $this->varNumber++;
$value = $escapedValue = strtr($xpath->getValue(), array(
"\n" => "\\n",
"\t" => "\\t",
"\r" => "\\r",
"$" => "\\$",
"\"" => "\\\"",
"\\" => "\\\\",
));
$result = $var . ' = {{XML}}->xpath("' . $value . '");';
$this->variables[$xpath->getValue()] = $var;
$this->variableDefinitions[] = $result;
}
}
/**
* Gets variable definitions
*
* @return array
*/
public function getVariableDefinitions()
{
return $this->variableDefinitions;
}
/**
* Gets variables
*
* @return array
*/
public function getVariables()
{
return $this->variables;
}
/**
* Returns the number of current instance
*
* @return int
*/
public function getSequenceNumber()
{
return $this->sequenceNumber;
}
/**
* String representation of a sequence node
*
* @return string
*/
public function __toString()
{
$result = "--> begin " . get_class($this) . "\n";
foreach ($this->getStatements() as $statement)
{
$array = explode("\n", $statement);
for ($i = 0; $i < count($array); $i++)
{
$array[$i] = ' ' . $array[$i];
}
$result .= implode("\n", $array) . "\n";
}
$result .= "--> end " . get_class($this);
return $result;
}
}