Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
LengthUnit
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 isAbsolute
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 isFontRelative
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 isContainerRelative
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 isViewportRelative
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3declare(strict_types=1);
4
5namespace Phpdftk\Css\Value;
6
7/**
8 * CSS length units per CSS Values 4. Categorised into absolute (resolvable
9 * to the pixel without context), font-relative (need a font size to
10 * resolve), and viewport-relative (need a viewport size).
11 */
12enum LengthUnit: string
13{
14    // Absolute
15    case Px = 'px';
16    case Pt = 'pt';
17    case Pc = 'pc';
18    case Cm = 'cm';
19    case Mm = 'mm';
20    case Q = 'q';
21    case In = 'in';
22
23    // Font-relative
24    case Em = 'em';
25    case Rem = 'rem';
26    case Ex = 'ex';
27    case Ch = 'ch';
28    case Cap = 'cap';
29    case Lh = 'lh';
30    case Rlh = 'rlh';
31
32    // Viewport-relative
33    case Vw = 'vw';
34    case Vh = 'vh';
35    case Vmin = 'vmin';
36    case Vmax = 'vmax';
37    case Vi = 'vi';
38    case Vb = 'vb';
39    case Svw = 'svw';
40    case Svh = 'svh';
41    case Lvw = 'lvw';
42    case Lvh = 'lvh';
43    case Dvw = 'dvw';
44    case Dvh = 'dvh';
45
46    // Container-relative — CSS Containment 3 §6. Resolve against the
47    // nearest size-query container (an element with
48    // `container-type: size` / `inline-size`); fall through to 0 when
49    // no such container is in scope per spec §6.3.
50    case Cqw = 'cqw';
51    case Cqh = 'cqh';
52    case Cqi = 'cqi';
53    case Cqb = 'cqb';
54    case Cqmin = 'cqmin';
55    case Cqmax = 'cqmax';
56
57    public function isAbsolute(): bool
58    {
59        return in_array($this, [
60            self::Px, self::Pt, self::Pc, self::Cm, self::Mm, self::Q, self::In,
61        ], true);
62    }
63
64    public function isFontRelative(): bool
65    {
66        return in_array($this, [
67            self::Em, self::Rem, self::Ex, self::Ch, self::Lh, self::Rlh,
68        ], true);
69    }
70
71    public function isContainerRelative(): bool
72    {
73        return in_array($this, [
74            self::Cqw, self::Cqh, self::Cqi, self::Cqb, self::Cqmin, self::Cqmax,
75        ], true);
76    }
77
78    public function isViewportRelative(): bool
79    {
80        return !$this->isAbsolute()
81            && !$this->isFontRelative()
82            && !$this->isContainerRelative();
83    }
84}