ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
HTMLPurifier_Arborize Class Reference

Converts a stream of HTMLPurifier_Token into an HTMLPurifier_Node, and back again. More...

+ Collaboration diagram for HTMLPurifier_Arborize:

Static Public Member Functions

static arborize ($tokens, $config, $context)
static flatten ($node, $config, $context)

Detailed Description

Converts a stream of HTMLPurifier_Token into an HTMLPurifier_Node, and back again.

Note
This transformation is not an equivalence. We mutate the input token stream to make it so; see all [MUT] markers in code.

Definition at line 10 of file Arborize.php.

Member Function Documentation

static HTMLPurifier_Arborize::arborize (   $tokens,
  $config,
  $context 
)
static

Definition at line 12 of file Arborize.php.

Referenced by HTMLPurifier_Strategy_FixNesting\execute().

{
$definition = $config->getHTMLDefinition();
$parent = new HTMLPurifier_Token_Start($definition->info_parent);
$stack = array($parent->toNode());
foreach ($tokens as $token) {
$token->skip = null; // [MUT]
$token->carryover = null; // [MUT]
if ($token instanceof HTMLPurifier_Token_End) {
$token->start = null; // [MUT]
$r = array_pop($stack);
assert($r->name === $token->name);
assert(empty($token->attr));
$r->endCol = $token->col;
$r->endLine = $token->line;
$r->endArmor = $token->armor;
continue;
}
$node = $token->toNode();
$stack[count($stack)-1]->children[] = $node;
if ($token instanceof HTMLPurifier_Token_Start) {
$stack[] = $node;
}
}
assert(count($stack) == 1);
return $stack[0];
}

+ Here is the caller graph for this function:

static HTMLPurifier_Arborize::flatten (   $node,
  $config,
  $context 
)
static

Definition at line 39 of file Arborize.php.

Referenced by HTMLPurifier_Strategy_FixNesting\execute().

{
$level = 0;
$nodes = array($level => new HTMLPurifier_Queue(array($node)));
$closingTokens = array();
$tokens = array();
do {
while (!$nodes[$level]->isEmpty()) {
$node = $nodes[$level]->shift(); // FIFO
list($start, $end) = $node->toTokenPair();
if ($level > 0) {
$tokens[] = $start;
}
if ($end !== NULL) {
$closingTokens[$level][] = $end;
}
if ($node instanceof HTMLPurifier_Node_Element) {
$level++;
$nodes[$level] = new HTMLPurifier_Queue();
foreach ($node->children as $childNode) {
$nodes[$level]->push($childNode);
}
}
}
$level--;
if ($level && isset($closingTokens[$level])) {
while ($token = array_pop($closingTokens[$level])) {
$tokens[] = $token;
}
}
} while ($level > 0);
return $tokens;
}

+ Here is the caller graph for this function:


The documentation for this class was generated from the following file: