mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-23 00:41:52 +00:00
cd4500457e
Major paradigm shift in this commit is bailing ship on the "skip" integers, which were extremely buggy and error prone, and simply mark tokens as processed or not processed by injectors. Other notable changes: - Removed ad hoc decrements to inputIndex in favor of $reprocess flag variable - Moved rewind outside of processToken() - Make rewind properly ignore all other injectors - Cleanup end of document code - Reconfigure injector loops to account for skips and rewinds - Punt the empty to start/end transformation - Completely rewrite processToken to be array based - Added skip and rewind member variables to tokens - Fixed a longstanding bug with remove empty! Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>
55 lines
1.5 KiB
PHP
55 lines
1.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Abstract base token class that all others inherit from.
|
|
*/
|
|
class HTMLPurifier_Token {
|
|
public $line; /**< Line number node was on in source document. Null if unknown. */
|
|
public $col; /**< Column of line node was on in source document. Null if unknown. */
|
|
|
|
/**
|
|
* Lookup array of processing that this token is exempt from.
|
|
* Currently, valid values are "ValidateAttributes" and
|
|
* "MakeWellFormed_TagClosedError"
|
|
*/
|
|
public $armor = array();
|
|
|
|
/**
|
|
* Used during MakeWellFormed.
|
|
*/
|
|
public $skip;
|
|
public $rewind;
|
|
|
|
public function __get($n) {
|
|
if ($n === 'type') {
|
|
trigger_error('Deprecated type property called; use instanceof', E_USER_NOTICE);
|
|
switch (get_class($this)) {
|
|
case 'HTMLPurifier_Token_Start': return 'start';
|
|
case 'HTMLPurifier_Token_Empty': return 'empty';
|
|
case 'HTMLPurifier_Token_End': return 'end';
|
|
case 'HTMLPurifier_Token_Text': return 'text';
|
|
case 'HTMLPurifier_Token_Comment': return 'comment';
|
|
default: return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the position of the token in the source document.
|
|
*/
|
|
public function position($l = null, $c = null) {
|
|
$this->line = $l;
|
|
$this->col = $c;
|
|
}
|
|
|
|
/**
|
|
* Convenience function for DirectLex settings line/col position.
|
|
*/
|
|
public function rawPosition($l, $c) {
|
|
if ($c === -1) $l++;
|
|
$this->line = $l;
|
|
$this->col = $c;
|
|
}
|
|
|
|
}
|