161 lines
2.8 KiB
PHP
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;
|
|
}
|
|
} |