HookRegistrant   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 96.15%

Importance

Changes 0
Metric Value
dl 0
loc 76
rs 10
c 0
b 0
f 0
ccs 25
cts 26
cp 0.9615
wmc 7
lcom 1
cbo 3

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A registerFunction() 0 11 2
A registerFunctionHandler() 0 3 1
A registerHook() 0 10 2
A registerHookHandler() 0 3 1
1
<?php
2
3
namespace ParserHooks;
4
5
use Parser;
6
use PPFrame;
7
8
/**
9
 * Parser hook runner registrant.
10
 * Registers hook runners to a parser.
11
 *
12
 * @since 1.0
13
 *
14
 * @licence GNU GPL v2+
15
 * @author Jeroen De Dauw < [email protected] >
16
 */
17
class HookRegistrant {
18
19
	/**
20
	 * @since 1.0
21
	 *
22
	 * @var Parser
23
	 */
24
	protected $parser;
25
26
	/**
27
	 * @since 1.0
28
	 *
29
	 * @param Parser $parser
30
	 */
31 13
	public function __construct( Parser &$parser ) {
32 13
		$this->parser = $parser;
33 13
	}
34
35
	/**
36
	 * @since 1.0
37
	 *
38
	 * @param FunctionRunner $runner
39
	 */
40 6
	public function registerFunction( FunctionRunner $runner ) {
41 6
		foreach ( $runner->getDefinition()->getNames() as $name ) {
42 6
			$this->parser->setFunctionHook(
43 6
				$name,
44 6
				function( Parser $parser, PPFrame $frame, array $arguments ) use ( $runner ) {
45
					return $runner->run( $parser, $arguments, $frame );
46 6
				},
47 6
				Parser::SFH_OBJECT_ARGS
48
			);
49
		}
50 6
	}
51
52
	/**
53
	 * Register a parser function.
54
	 *
55
	 * @since 1.1
56
	 *
57
	 * @param HookDefinition $definition
58
	 * @param HookHandler $handler
59
	 */
60 3
	public function registerFunctionHandler( HookDefinition $definition, HookHandler $handler ) {
61 3
		$this->registerFunction( new FunctionRunner( $definition, $handler ) );
62 3
	}
63
64
	/**
65
	 * @since 1.0
66
	 *
67
	 * @param HookRunner $runner
68
	 */
69 7
	public function registerHook( HookRunner $runner ) {
70 7
		foreach ( $runner->getDefinition()->getNames() as $name ) {
71 7
			$this->parser->setHook(
72 7
				$name,
73 7
				function( $text, array $arguments, Parser $parser, PPFrame $frame ) use ( $runner ) {
74 1
					return $runner->run( $text, $arguments, $parser, $frame );
75 7
				}
76
			);
77
		}
78 7
	}
79
80
	/**
81
	 * Register a tag function.
82
	 *
83
	 * @since 1.1
84
	 *
85
	 * @param HookDefinition $definition
86
	 * @param HookHandler $handler
87
	 */
88 3
	public function registerHookHandler( HookDefinition $definition, HookHandler $handler ) {
89 3
		$this->registerHook( new HookRunner( $definition, $handler ) );
90 3
	}
91
92
}