diff options
author | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
commit | 99679d06884120c57f43b44e55e03595f1f87bed (patch) | |
tree | a3f2a1aa1afdaeca1386d0c6e8a75344fd2241fb /inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php | |
parent | 655214ab30ee84884dc408488b85586f36263fcb (diff) | |
parent | d3b47e94705e17b3ba3529cbb1dc6efe69c5d2b7 (diff) | |
download | wallabag-99679d06884120c57f43b44e55e03595f1f87bed.tar.gz wallabag-99679d06884120c57f43b44e55e03595f1f87bed.tar.zst wallabag-99679d06884120c57f43b44e55e03595f1f87bed.zip |
Merge pull request #481 from wallabag/dev1.5.2
1.5.2
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php new file mode 100644 index 00000000..55669d1c --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php | |||
@@ -0,0 +1,101 @@ | |||
1 | <?php | ||
2 | |||
3 | class HTMLPurifier_Injector_RemoveEmpty extends HTMLPurifier_Injector | ||
4 | { | ||
5 | /** | ||
6 | * @type HTMLPurifier_Context | ||
7 | */ | ||
8 | private $context; | ||
9 | |||
10 | /** | ||
11 | * @type HTMLPurifier_Config | ||
12 | */ | ||
13 | private $config; | ||
14 | |||
15 | /** | ||
16 | * @type HTMLPurifier_AttrValidator | ||
17 | */ | ||
18 | private $attrValidator; | ||
19 | |||
20 | /** | ||
21 | * @type bool | ||
22 | */ | ||
23 | private $removeNbsp; | ||
24 | |||
25 | /** | ||
26 | * @type bool | ||
27 | */ | ||
28 | private $removeNbspExceptions; | ||
29 | |||
30 | /** | ||
31 | * @type array | ||
32 | * TODO: make me configurable | ||
33 | */ | ||
34 | private $_exclude = array('colgroup' => 1, 'th' => 1, 'td' => 1, 'iframe' => 1); | ||
35 | |||
36 | /** | ||
37 | * @param HTMLPurifier_Config $config | ||
38 | * @param HTMLPurifier_Context $context | ||
39 | * @return void | ||
40 | */ | ||
41 | public function prepare($config, $context) | ||
42 | { | ||
43 | parent::prepare($config, $context); | ||
44 | $this->config = $config; | ||
45 | $this->context = $context; | ||
46 | $this->removeNbsp = $config->get('AutoFormat.RemoveEmpty.RemoveNbsp'); | ||
47 | $this->removeNbspExceptions = $config->get('AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions'); | ||
48 | $this->attrValidator = new HTMLPurifier_AttrValidator(); | ||
49 | } | ||
50 | |||
51 | /** | ||
52 | * @param HTMLPurifier_Token $token | ||
53 | */ | ||
54 | public function handleElement(&$token) | ||
55 | { | ||
56 | if (!$token instanceof HTMLPurifier_Token_Start) { | ||
57 | return; | ||
58 | } | ||
59 | $next = false; | ||
60 | $deleted = 1; // the current tag | ||
61 | for ($i = count($this->inputZipper->back) - 1; $i >= 0; $i--, $deleted++) { | ||
62 | $next = $this->inputZipper->back[$i]; | ||
63 | if ($next instanceof HTMLPurifier_Token_Text) { | ||
64 | if ($next->is_whitespace) { | ||
65 | continue; | ||
66 | } | ||
67 | if ($this->removeNbsp && !isset($this->removeNbspExceptions[$token->name])) { | ||
68 | $plain = str_replace("\xC2\xA0", "", $next->data); | ||
69 | $isWsOrNbsp = $plain === '' || ctype_space($plain); | ||
70 | if ($isWsOrNbsp) { | ||
71 | continue; | ||
72 | } | ||
73 | } | ||
74 | } | ||
75 | break; | ||
76 | } | ||
77 | if (!$next || ($next instanceof HTMLPurifier_Token_End && $next->name == $token->name)) { | ||
78 | if (isset($this->_exclude[$token->name])) { | ||
79 | return; | ||
80 | } | ||
81 | $this->attrValidator->validateToken($token, $this->config, $this->context); | ||
82 | $token->armor['ValidateAttributes'] = true; | ||
83 | if (isset($token->attr['id']) || isset($token->attr['name'])) { | ||
84 | return; | ||
85 | } | ||
86 | $token = $deleted + 1; | ||
87 | for ($b = 0, $c = count($this->inputZipper->front); $b < $c; $b++) { | ||
88 | $prev = $this->inputZipper->front[$b]; | ||
89 | if ($prev instanceof HTMLPurifier_Token_Text && $prev->is_whitespace) { | ||
90 | continue; | ||
91 | } | ||
92 | break; | ||
93 | } | ||
94 | // This is safe because we removed the token that triggered this. | ||
95 | $this->rewindOffset($b+$deleted); | ||
96 | return; | ||
97 | } | ||
98 | } | ||
99 | } | ||
100 | |||
101 | // vim: et sw=4 sts=4 | ||