FenceHolder::reveal()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
/**
4
 * This software package is licensed under `AGPL, Commercial` license[s].
5
 *
6
 * @package maslosoft/zamm
7
 * @license AGPL, Commercial
8
 *
9
 * @copyright Copyright (c) Peter Maselkowski <[email protected]>
10
 * @link https://maslosoft.com/zamm/
11
 */
12
13
namespace Maslosoft\Zamm\Helpers;
14
15
/**
16
 * This class hides fenced code from processing,
17
 * by replacing fenced fragments with placeholder,
18
 * and then this can also bring fenced fragments back.
19
 *
20
 *
21
 * @author Piotr Maselkowski <pmaselkowski at gmail.com>
22
 */
23
class FenceHolder
24
{
25
26
	private $fences = [];
27
28
	public function hide(&$docBlock)
29
	{
30
		$matches = [];
31
		preg_match_all('~(```.*?```)~ms', $docBlock, $matches);
32
		if (empty($matches[0]))
33
		{
34
			return;
35
		}
36
		$i = 0;
37
38
		// Collect matches
39
		foreach ($matches[0] as $match)
40
		{
41
			$key = sprintf('~%s@%s~', __CLASS__, $i++);
42
			$this->fences[$key] = $match;
43
		}
44
45
		$docBlock = str_replace(array_values($this->fences), array_keys($this->fences), $docBlock);
46
	}
47
48
	public function reveal(&$docBlock)
49
	{
50
		if (empty($this->fences))
51
		{
52
			return;
53
		}
54
		$docBlock = str_replace(array_keys($this->fences), array_values($this->fences), $docBlock);
55
	}
56
57
}
58