Yaffs site version 1.1
[yaffs-website] / vendor / ezyang / htmlpurifier / library / HTMLPurifier / Injector / PurifierLinkify.php
1 <?php
2
3 /**
4  * Injector that converts configuration directive syntax %Namespace.Directive
5  * to links
6  */
7 class HTMLPurifier_Injector_PurifierLinkify extends HTMLPurifier_Injector
8 {
9     /**
10      * @type string
11      */
12     public $name = 'PurifierLinkify';
13
14     /**
15      * @type string
16      */
17     public $docURL;
18
19     /**
20      * @type array
21      */
22     public $needed = array('a' => array('href'));
23
24     /**
25      * @param HTMLPurifier_Config $config
26      * @param HTMLPurifier_Context $context
27      * @return string
28      */
29     public function prepare($config, $context)
30     {
31         $this->docURL = $config->get('AutoFormat.PurifierLinkify.DocURL');
32         return parent::prepare($config, $context);
33     }
34
35     /**
36      * @param HTMLPurifier_Token $token
37      */
38     public function handleText(&$token)
39     {
40         if (!$this->allowsElement('a')) {
41             return;
42         }
43         if (strpos($token->data, '%') === false) {
44             return;
45         }
46
47         $bits = preg_split('#%([a-z0-9]+\.[a-z0-9]+)#Si', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
48         $token = array();
49
50         // $i = index
51         // $c = count
52         // $l = is link
53         for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
54             if (!$l) {
55                 if ($bits[$i] === '') {
56                     continue;
57                 }
58                 $token[] = new HTMLPurifier_Token_Text($bits[$i]);
59             } else {
60                 $token[] = new HTMLPurifier_Token_Start(
61                     'a',
62                     array('href' => str_replace('%s', $bits[$i], $this->docURL))
63                 );
64                 $token[] = new HTMLPurifier_Token_Text('%' . $bits[$i]);
65                 $token[] = new HTMLPurifier_Token_End('a');
66             }
67         }
68     }
69 }
70
71 // vim: et sw=4 sts=4