PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.16
Yatra – Travel Booking & Tour Operator Software v3.0.16
3.0.16 3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 All 84 releases
yatra / vendor / dompdf / dompdf / src / Renderer / ListBullet.php

ListBullet.php in Yatra – Travel Booking & Tour Operator Software 3.0.16, at vendor/dompdf/dompdf/src/Renderer/ListBullet.php

236 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package dompdf
4 * @link https://github.com/dompdf/dompdf
5 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
6 */
7 namespace Dompdf\Renderer;
8
9 use Dompdf\Helpers;
10 use Dompdf\Frame;
11 use Dompdf\FrameDecorator\ListBullet as ListBulletFrameDecorator;
12 use Dompdf\FrameDecorator\ListBulletImage;
13 use Dompdf\Image\Cache;
14
15 /**
16 * Renders list bullets
17 *
18 * @package dompdf
19 */
20 class ListBullet extends AbstractRenderer
21 {
22 /**
23 * @param $type
24 * @return mixed|string
25 */
26 static function get_counter_chars($type)
27 {
28 static $cache = [];
29
30 if (isset($cache[$type])) {
31 return $cache[$type];
32 }
33
34 $uppercase = false;
35 $text = "";
36
37 switch ($type) {
38 case "decimal-leading-zero":
39 case "decimal":
40 case "1":
41 return "0123456789";
42
43 case "upper-alpha":
44 case "upper-latin":
45 case "A":
46 $uppercase = true;
47 case "lower-alpha":
48 case "lower-latin":
49 case "a":
50 $text = "abcdefghijklmnopqrstuvwxyz";
51 break;
52
53 case "upper-roman":
54 case "I":
55 $uppercase = true;
56 case "lower-roman":
57 case "i":
58 $text = "ivxlcdm";
59 break;
60
61 case "lower-greek":
62 for ($i = 0; $i < 24; $i++) {
63 $text .= Helpers::unichr($i + 944);
64 }
65 break;
66 }
67
68 if ($uppercase) {
69 $text = strtoupper($text);
70 }
71
72 return $cache[$type] = "$text.";
73 }
74
75 /**
76 * @param int $n
77 * @param string $type
78 * @param int|null $pad
79 *
80 * @return string
81 */
82 private function make_counter($n, $type, $pad = null)
83 {
84 $n = intval($n);
85 $text = "";
86 $uppercase = false;
87
88 switch ($type) {
89 case "decimal-leading-zero":
90 case "decimal":
91 case "1":
92 if ($pad) {
93 $text = str_pad($n, $pad, "0", STR_PAD_LEFT);
94 } else {
95 $text = $n;
96 }
97 break;
98
99 case "upper-alpha":
100 case "upper-latin":
101 case "A":
102 $uppercase = true;
103 case "lower-alpha":
104 case "lower-latin":
105 case "a":
106 $text = chr((($n - 1) % 26) + ord('a'));
107 break;
108
109 case "upper-roman":
110 case "I":
111 $uppercase = true;
112 case "lower-roman":
113 case "i":
114 $text = Helpers::dec2roman($n);
115 break;
116
117 case "lower-greek":
118 $text = Helpers::unichr($n + 944);
119 break;
120 }
121
122 if ($uppercase) {
123 $text = strtoupper($text);
124 }
125
126 return "$text.";
127 }
128
129 /**
130 * @param ListBulletFrameDecorator $frame
131 */
132 function render(Frame $frame)
133 {
134 $li = $frame->get_parent();
135 $style = $frame->get_style();
136
137 $this->_set_opacity($frame->get_opacity($style->opacity));
138
139 // Don't render bullets twice if the list item was split
140 if ($li->is_split_off) {
141 return;
142 }
143
144 $font_family = $style->font_family;
145 $font_size = $style->font_size;
146 $baseline = $this->_canvas->get_font_baseline($font_family, $font_size);
147
148 // Handle list-style-image
149 // If list style image is requested but missing, fall back to predefined types
150 if ($frame instanceof ListBulletImage && !Cache::is_broken($img = $frame->get_image_url())) {
151 [$x, $y] = $frame->get_position();
152 $w = $frame->get_width();
153 $h = $frame->get_height();
154 $y += $baseline - $h;
155
156 $this->_canvas->image($img, $x, $y, $w, $h);
157 } else {
158 $bullet_style = $style->list_style_type;
159
160 switch ($bullet_style) {
161 default:
162 case "disc":
163 case "circle":
164 [$x, $y] = $frame->get_position();
165 $offset = $font_size * ListBulletFrameDecorator::BULLET_OFFSET;
166 $r = ($font_size * ListBulletFrameDecorator::BULLET_SIZE) / 2;
167 $x += $r;
168 $y += $baseline - $r - $offset;
169 $o = $font_size * ListBulletFrameDecorator::BULLET_THICKNESS;
170 $this->_canvas->circle($x, $y, $r, $style->color, $o, null, $bullet_style !== "circle");
171 break;
172
173 case "square":
174 [$x, $y] = $frame->get_position();
175 $offset = $font_size * ListBulletFrameDecorator::BULLET_OFFSET;
176 $w = $font_size * ListBulletFrameDecorator::BULLET_SIZE;
177 $y += $baseline - $w - $offset;
178 $this->_canvas->filled_rectangle($x, $y, $w, $w, $style->color);
179 break;
180
181 case "decimal-leading-zero":
182 case "decimal":
183 case "lower-alpha":
184 case "lower-latin":
185 case "lower-roman":
186 case "lower-greek":
187 case "upper-alpha":
188 case "upper-latin":
189 case "upper-roman":
190 case "1": // HTML 4.0 compatibility
191 case "a":
192 case "i":
193 case "A":
194 case "I":
195 $pad = null;
196 if ($bullet_style === "decimal-leading-zero") {
197 $pad = strlen($li->get_parent()->get_node()->getAttribute("dompdf-children-count"));
198 }
199
200 $node = $frame->get_node();
201
202 if (!$node->hasAttribute("dompdf-counter")) {
203 return;
204 }
205
206 $index = $node->getAttribute("dompdf-counter");
207 $text = $this->make_counter($index, $bullet_style, $pad);
208
209 if (trim($text) === "") {
210 return;
211 }
212
213 $word_spacing = $style->word_spacing;
214 $letter_spacing = $style->letter_spacing;
215 $text_width = $this->_dompdf->getFontMetrics()->getTextWidth($text, $font_family, $font_size, $word_spacing, $letter_spacing);
216
217 [$x, $y] = $frame->get_position();
218 // Correct for static frame width applied by positioner
219 $x += $frame->get_width() - $text_width;
220
221 $this->_canvas->text($x, $y, $text,
222 $font_family, $font_size,
223 $style->color, $word_spacing, $letter_spacing);
224
225 case "none":
226 break;
227 }
228 }
229
230 $id = $frame->get_node()->getAttribute("id");
231 if (strlen($id) > 0) {
232 $this->_canvas->add_named_dest($id);
233 }
234 }
235 }
236