|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
declare(strict_types=1); |
|
4
|
|
|
|
|
5
|
|
|
namespace YamlStandards\Model\YamlAlphabetical; |
|
6
|
|
|
|
|
7
|
|
|
use YamlStandards\Model\Component\Parser\YamlParser; |
|
8
|
|
|
use YamlStandards\Model\Component\Parser\YamlParserLineData; |
|
9
|
|
|
use YamlStandards\Model\Component\YamlService; |
|
10
|
|
|
|
|
11
|
|
|
class YamlAlphabeticalDataFactory |
|
12
|
|
|
{ |
|
13
|
|
|
public const REGEX_KEY_COMMON_LINE_WITH_NUMBER_AT_END = '/' . YamlParserLineData::KEY_COMMON_LINE . '\d+$/'; |
|
14
|
|
|
public const REGEX_KEY_COMMENT_OR_EMPTY_LINE_WITH_NUMBER_AT_END = '/' . YamlParserLineData::KEY_COMMENT_OR_EMPTY_LINE . '\d+$/'; |
|
15
|
|
|
public const REGEX_KEY_DASH_WITH_NUMBER_AT_END = '/' . YamlParserLineData::KEY_DASH . '\d+$/'; |
|
16
|
|
|
public const REGEX_KEY_EMPTY_ARRAY_WITH_NUMBER_AT_END = '/' . YamlParserLineData::KEY_EMPTY_ARRAY . '\d+$/'; |
|
17
|
|
|
public const REGEX_KEY_ARRAY_WITHOUT_KEY_WITH_NUMBER_AT_END = '/^' . YamlParserLineData::KEY_ARRAY_WITHOUT_KEY . '\d+/'; |
|
18
|
|
|
public const REGEX_KEY_CURLY_BRACKETS_WITH_NUMBER_AT_END = '/' . YamlParserLineData::KEY_CURLY_BRACKETS . '\d+$/'; |
|
19
|
|
|
|
|
20
|
|
|
public const REGEX_VALUE_EMPTY_LINE = '/' . YamlParserLineData::EMPTY_LINE_DEFAULT_VALUE . '$/'; |
|
21
|
|
|
|
|
22
|
|
|
/** |
|
23
|
|
|
* @var int |
|
24
|
|
|
*/ |
|
25
|
|
|
private static $index; |
|
26
|
|
|
|
|
27
|
|
|
/** |
|
28
|
|
|
* @param string $pathToYamlFile |
|
29
|
|
|
* @param int $depth |
|
30
|
|
|
* @param string[] $prioritizedKeys |
|
31
|
|
|
* @return string[] |
|
32
|
|
|
*/ |
|
33
|
6 |
|
public static function getCorrectYamlLines(string $pathToYamlFile, int $depth, array $prioritizedKeys): array |
|
34
|
|
|
{ |
|
35
|
6 |
|
self::$index = 0; // start from 0 in every file |
|
36
|
|
|
|
|
37
|
6 |
|
$yamlArrayData = YamlParser::getYamlParsedDataFromFile($pathToYamlFile); |
|
38
|
6 |
|
$yamlArrayDataSorted = YamlSortService::sortArray($yamlArrayData, $depth, $prioritizedKeys); |
|
39
|
|
|
|
|
40
|
6 |
|
return self::createRightSortedYamlLines($yamlArrayDataSorted); |
|
|
|
|
|
|
41
|
|
|
} |
|
42
|
|
|
|
|
43
|
|
|
/** |
|
44
|
|
|
* @param string[]|string[][] $sortedYamlData |
|
45
|
|
|
* @return string[] |
|
46
|
|
|
*/ |
|
47
|
6 |
|
private static function createRightSortedYamlLines(array $sortedYamlData): array |
|
48
|
|
|
{ |
|
49
|
6 |
|
$rightSortedYamlLines = []; |
|
50
|
|
|
|
|
51
|
6 |
|
foreach ($sortedYamlData as $yamlKey => $yamlValue) { |
|
52
|
6 |
|
if (is_array($yamlValue) === false && ($yamlValue === YamlParserLineData::EMPTY_LINE_DEFAULT_VALUE || YamlService::isLineComment($yamlValue))) { |
|
|
|
|
|
|
53
|
6 |
|
$rightSortedYamlLines[] = preg_match(self::REGEX_VALUE_EMPTY_LINE, $yamlValue) === 0 ? $yamlValue : preg_replace(self::REGEX_VALUE_EMPTY_LINE, '', $yamlValue); |
|
|
|
|
|
|
54
|
|
|
|
|
55
|
6 |
|
continue; |
|
56
|
|
|
} |
|
57
|
|
|
|
|
58
|
6 |
|
$yamlKey = is_int($yamlKey) ? (string)$yamlKey : $yamlKey; |
|
59
|
6 |
|
if (preg_match(self::REGEX_KEY_COMMENT_OR_EMPTY_LINE_WITH_NUMBER_AT_END, $yamlKey) === 0 && |
|
60
|
6 |
|
preg_match(self::REGEX_KEY_EMPTY_ARRAY_WITH_NUMBER_AT_END, $yamlKey) === 0 |
|
61
|
|
|
) { |
|
62
|
6 |
|
$key = preg_match(self::REGEX_KEY_COMMON_LINE_WITH_NUMBER_AT_END, $yamlKey) === 0 ? $yamlKey : preg_replace(self::REGEX_KEY_COMMON_LINE_WITH_NUMBER_AT_END, '', $yamlKey); |
|
63
|
6 |
|
$key = preg_match(self::REGEX_KEY_DASH_WITH_NUMBER_AT_END, $key) === 0 ? $key : preg_replace(self::REGEX_KEY_DASH_WITH_NUMBER_AT_END, '-', $key); |
|
64
|
6 |
|
$key = preg_match(self::REGEX_KEY_CURLY_BRACKETS_WITH_NUMBER_AT_END, $key) === 0 ? $key : preg_replace(self::REGEX_KEY_CURLY_BRACKETS_WITH_NUMBER_AT_END, '', $key); |
|
65
|
6 |
|
$key = preg_match(self::REGEX_KEY_ARRAY_WITHOUT_KEY_WITH_NUMBER_AT_END, $key) === 0 ? $key : preg_replace(self::REGEX_KEY_ARRAY_WITHOUT_KEY_WITH_NUMBER_AT_END, '', $key); |
|
66
|
6 |
|
$value = is_array($yamlValue) ? '' : $yamlValue; |
|
67
|
6 |
|
$rightSortedYamlLines[] = $key . $value; |
|
68
|
|
|
|
|
69
|
6 |
|
self::$index++; |
|
70
|
|
|
} |
|
71
|
|
|
|
|
72
|
6 |
|
if (is_array($yamlValue)) { |
|
73
|
6 |
|
$result = self::createRightSortedYamlLines($yamlValue); |
|
74
|
6 |
|
$rightSortedYamlLines = array_merge($rightSortedYamlLines, $result); |
|
75
|
|
|
} |
|
76
|
|
|
} |
|
77
|
|
|
|
|
78
|
6 |
|
return $rightSortedYamlLines; |
|
|
|
|
|
|
79
|
|
|
} |
|
80
|
|
|
} |
|
81
|
|
|
|