This removes most references to Google, with some remaining since they may point to things which are still relevant. References to Google Code, Google Buzz and Google Maps have been removed
60 lines
1.6 KiB
PHP
60 lines
1.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Injector that converts http, https and ftp text URLs to actual links.
|
|
*/
|
|
class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
|
|
{
|
|
/**
|
|
* @type string
|
|
*/
|
|
public $name = 'Linkify';
|
|
|
|
/**
|
|
* @type array
|
|
*/
|
|
public $needed = array('a' => array('href'));
|
|
|
|
/**
|
|
* @param HTMLPurifier_Token $token
|
|
*/
|
|
public function handleText(&$token)
|
|
{
|
|
if (!$this->allowsElement('a')) {
|
|
return;
|
|
}
|
|
|
|
if (strpos($token->data, '://') === false) {
|
|
// our really quick heuristic failed, abort
|
|
// this may not work so well if we want to match things like
|
|
// "domainname.com", but then again, most people don't
|
|
return;
|
|
}
|
|
|
|
// there is/are URL(s). Let's split the string:
|
|
// Note: this regex is extremely permissive
|
|
$bits = preg_split('#((?:https?|ftp)://[^\s\'",<>()]+)#Su', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
|
|
|
|
|
|
$token = array();
|
|
|
|
// $i = index
|
|
// $c = count
|
|
// $l = is link
|
|
for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
|
|
if (!$l) {
|
|
if ($bits[$i] === '') {
|
|
continue;
|
|
}
|
|
$token[] = new HTMLPurifier_Token_Text($bits[$i]);
|
|
} else {
|
|
$token[] = new HTMLPurifier_Token_Start('a', array('href' => $bits[$i]));
|
|
$token[] = new HTMLPurifier_Token_Text($bits[$i]);
|
|
$token[] = new HTMLPurifier_Token_End('a');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|