-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMDDoBaseURL.php
More file actions
executable file
·66 lines (56 loc) · 2.03 KB
/
MDDoBaseURL.php
File metadata and controls
executable file
·66 lines (56 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php defined('SYSPATH') or die('No direct script access.');
/**
* @package Kohana/Codebench
* @category Tests
* @author Geert De Deckere <geert@idoe.be>
*/
class Bench_MDDoBaseURL extends Codebench {
public $description =
'Optimization for the <code>doBaseURL()</code> method of <code>Kohana_Kodoc_Markdown</code>
for the Kohana Userguide.';
public $loops = 10000;
public $subjects = array
(
// Valid matches
'[filesystem](about.filesystem)',
'[filesystem](about.filesystem "Optional title")',
'[same page link](#id)',
'[object oriented](http://wikipedia.org/wiki/Object-Oriented_Programming)',
// Invalid matches
'',
'[filesystem](about.filesystem',
);
public function bench_original($subject)
{
// The original regex contained a bug, which is fixed here for benchmarking purposes.
// At the very start of the regex, (?!!) has been replace by (?<!!)
return preg_replace_callback('~(?<!!)\[(.+?)\]\(([^#]\S*(?:\s*".+?")?)\)~', array($this, '_add_base_url_original'), $subject);
}
public function _add_base_url_original($matches)
{
if ($matches[2] AND strpos($matches[2], '://') === FALSE)
{
// Add the base url to the link URL
$matches[2] = 'http://BASE/'.$matches[2];
}
// Recreate the link
return "[{$matches[1]}]({$matches[2]})";
}
public function bench_optimized_callback($subject)
{
return preg_replace_callback('~(?<!!)\[(.+?)\]\((?!\w++://)([^#]\S*(?:\s*+".+?")?)\)~', array($this, '_add_base_url_optimized'), $subject);
}
public function _add_base_url_optimized($matches)
{
// Add the base url to the link URL
$matches[2] = 'http://BASE/'.$matches[2];
// Recreate the link
return "[{$matches[1]}]({$matches[2]})";
}
public function bench_callback_gone($subject)
{
// All the optimized callback was doing now, is prepend some text to the URL.
// We don't need a callback for that, and that should be clearly faster.
return preg_replace('~(?<!!)(\[.+?\]\()(?!\w++://)([^#]\S*(?:\s*+".+?")?\))~', '$1http://BASE/$2', $subject);
}
}