Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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