PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.7
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.7
1.10.20 1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 1.10.0 1.9.17 1.9.15 1.9.16 All 164 releases
woocommerce-pos / vendor_prefixed / dompdf / php-svg-lib / src / Svg / CssLength.php

CssLength.php in WCPOS – Point of Sale (POS) plugin for WooCommerce 1.10.7, at vendor_prefixed/dompdf/php-svg-lib/src/Svg/CssLength.php

99 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WCPOS\Vendor\Svg;
4
5 class CssLength
6 {
7 /**
8 * Array of valid css length units.
9 * Should be pre-sorted by unit text length so no earlier length can be
10 * contained within a latter (eg. 'in' within 'vmin').
11 *
12 * @var string[]
13 */
14 protected static $units = ['vmax', 'vmin', 'rem', 'px', 'pt', 'cm', 'mm', 'in', 'pc', 'em', 'ex', 'ch', 'vw', 'vh', '%', 'q'];
15 /**
16 * A list of units that are inch-relative, and their unit division within an inch.
17 *
18 * @var array<string, float>
19 */
20 protected static $inchDivisions = ['in' => 1, 'cm' => 2.54, 'mm' => 25.4, 'q' => 101.6, 'pc' => 6, 'pt' => 72];
21 /**
22 * The CSS length unit indicator.
23 * Will be lower-case and one of the units listed in the '$units' array or empty.
24 *
25 * @var string
26 */
27 protected $unit = '';
28 /**
29 * The numeric value of the given length.
30 *
31 * @var float
32 */
33 protected $value = 0;
34 /**
35 * The original unparsed length provided.
36 *
37 * @var string
38 */
39 protected $unparsed;
40 public function __construct(string $length)
41 {
42 $this->unparsed = $length;
43 $this->parseLengthComponents($length);
44 }
45 /**
46 * Parse out the unit and value components from the given string length.
47 */
48 protected function parseLengthComponents(string $length) : void
49 {
50 $length = \strtolower($length);
51 foreach (self::$units as $unit) {
52 $pos = \strpos($length, $unit);
53 if ($pos) {
54 $this->value = \floatval(\substr($length, 0, $pos));
55 $this->unit = $unit;
56 return;
57 }
58 }
59 $this->unit = '';
60 $this->value = \floatval($length);
61 }
62 /**
63 * Get the unit type of this css length.
64 * Units are standardised to be lower-cased.
65 *
66 * @return string
67 */
68 public function getUnit() : string
69 {
70 return $this->unit;
71 }
72 /**
73 * Get this CSS length in the equivalent pixel count size.
74 *
75 * @param float $referenceSize
76 * @param float $dpi
77 *
78 * @return float
79 */
80 public function toPixels(float $referenceSize = 11.0, float $dpi = 96.0) : float
81 {
82 // Standard relative units
83 if (\in_array($this->unit, ['em', 'rem', 'ex', 'ch'])) {
84 return $this->value * $referenceSize;
85 }
86 // Percentage relative units
87 if (\in_array($this->unit, ['%', 'vw', 'vh', 'vmin', 'vmax'])) {
88 return $this->value * ($referenceSize / 100);
89 }
90 // Inch relative units
91 if (\in_array($this->unit, \array_keys(static::$inchDivisions))) {
92 $inchValue = $this->value * $dpi;
93 $division = static::$inchDivisions[$this->unit];
94 return $inchValue / $division;
95 }
96 return $this->value;
97 }
98 }
99