Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
NameResolver
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
1 / 1
 isAmbiguousName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getSuffix
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getDefIdFromName
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace pvc\html\factory;
4
5use pvc\htmlbuilder\definitions\types\DefinitionType;
6
7class NameResolver
8{
9    /**
10     * there are several identifiers in html which are duplicates, i.e. out of context, you would not know whether
11     * you are referring to an attribute or an element.  For this reason and because we are using a single container,
12     * there are some cases where the definition id needs to be different from the name of the object.  The
13     * method of disambiguation is to append an _attr or _element to the names of the objects and make those the
14     * definition ids.  For example, cite => cite_attr / cite_element.
15     *
16     * The ambiguous identifiers are:
17     *
18     * cite
19     * data
20     * form
21     * label
22     * span
23     * style
24     * title
25     *
26     * @var array<string>
27     */
28    private static array $ambiguousIdentifiers = [
29        'cite',
30        'data',
31        'form',
32        'label',
33        'span',
34        'style',
35        'title',
36        'type',
37    ];
38
39    /**
40     * @var string
41     */
42    private static string $attributeSuffix = '_attr';
43
44    /**
45     * @var string
46     */
47    private static string $elementSuffix = '_element';
48
49    /**
50     * @param  string  $name
51     * @return bool
52     */
53    protected static function isAmbiguousName(string $name): bool
54    {
55        return(in_array($name, self::$ambiguousIdentifiers));
56    }
57
58    /**
59     * @param  DefinitionType  $defType
60     *
61     * @return string
62     */
63    protected static function getSuffix(DefinitionType $defType): string
64    {
65        return ($defType === DefinitionType::Attribute) ?
66            self::$attributeSuffix :
67            self::$elementSuffix;
68    }
69
70    /**
71     * @param  string  $name
72     * @param  DefinitionType  $defType
73     *
74     * @return string
75     */
76    public static function getDefIdFromName(string $name, DefinitionType $defType): string
77    {
78        $suffix = self::isAmbiguousName($name) ?
79            self::getSuffix($defType) :
80            '';
81        return $name . $suffix;
82    }
83}