Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 12 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
| LengthUnit | |
0.00% |
0 / 12 |
|
0.00% |
0 / 4 |
42 | |
0.00% |
0 / 1 |
| isAbsolute | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
| isFontRelative | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
| isContainerRelative | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
| isViewportRelative | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
12 | |||
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace 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 | */ |
| 12 | enum 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 | } |