13
13
14
14
namespace PHP_CodeSniffer \Generators ;
15
15
16
+ use DOMElement ;
16
17
use DOMNode ;
17
18
18
19
class Text extends Generator
@@ -179,76 +180,14 @@ protected function getFormattedCodeComparisonBlock(DOMNode $node)
179
180
return '' ;
180
181
}
181
182
182
- $ first = trim ( $ firstCodeElm -> nodeValue );
183
- $ firstTitle = trim ( $ firstCodeElm -> getAttribute ( ' title ' ) );
183
+ $ firstTitleLines = $ this -> codeTitleToLines ( $ firstCodeElm );
184
+ $ firstLines = $ this -> codeToLines ( $ firstCodeElm );
184
185
185
- $ firstTitleLines = [];
186
- $ tempTitle = '' ;
187
- $ words = explode (' ' , $ firstTitle );
188
-
189
- foreach ($ words as $ word ) {
190
- if (strlen ($ tempTitle .$ word ) >= 45 ) {
191
- if (strlen ($ tempTitle .$ word ) === 45 ) {
192
- // Adding the extra space will push us to the edge
193
- // so we are done.
194
- $ firstTitleLines [] = $ tempTitle .$ word ;
195
- $ tempTitle = '' ;
196
- } else if (strlen ($ tempTitle .$ word ) === 46 ) {
197
- // We are already at the edge, so we are done.
198
- $ firstTitleLines [] = $ tempTitle .$ word ;
199
- $ tempTitle = '' ;
200
- } else {
201
- $ firstTitleLines [] = $ tempTitle ;
202
- $ tempTitle = $ word .' ' ;
203
- }
204
- } else {
205
- $ tempTitle .= $ word .' ' ;
206
- }
207
- }//end foreach
208
-
209
- if ($ tempTitle !== '' ) {
210
- $ firstTitleLines [] = $ tempTitle ;
211
- }
212
-
213
- $ first = str_replace (['<em> ' , '</em> ' ], '' , $ first );
214
- $ firstLines = explode ("\n" , $ first );
215
-
216
- $ second = trim ($ secondCodeElm ->nodeValue );
217
- $ secondTitle = trim ($ secondCodeElm ->getAttribute ('title ' ));
218
-
219
- $ secondTitleLines = [];
220
- $ tempTitle = '' ;
221
- $ words = explode (' ' , $ secondTitle );
222
-
223
- foreach ($ words as $ word ) {
224
- if (strlen ($ tempTitle .$ word ) >= 45 ) {
225
- if (strlen ($ tempTitle .$ word ) === 45 ) {
226
- // Adding the extra space will push us to the edge
227
- // so we are done.
228
- $ secondTitleLines [] = $ tempTitle .$ word ;
229
- $ tempTitle = '' ;
230
- } else if (strlen ($ tempTitle .$ word ) === 46 ) {
231
- // We are already at the edge, so we are done.
232
- $ secondTitleLines [] = $ tempTitle .$ word ;
233
- $ tempTitle = '' ;
234
- } else {
235
- $ secondTitleLines [] = $ tempTitle ;
236
- $ tempTitle = $ word .' ' ;
237
- }
238
- } else {
239
- $ tempTitle .= $ word .' ' ;
240
- }
241
- }//end foreach
242
-
243
- if ($ tempTitle !== '' ) {
244
- $ secondTitleLines [] = $ tempTitle ;
245
- }
246
-
247
- $ second = str_replace (['<em> ' , '</em> ' ], '' , $ second );
248
- $ secondLines = explode ("\n" , $ second );
186
+ $ secondTitleLines = $ this ->codeTitleToLines ($ secondCodeElm );
187
+ $ secondLines = $ this ->codeToLines ($ secondCodeElm );
249
188
250
189
$ titleRow = '' ;
251
- if ($ firstTitle !== '' || $ secondTitle !== '' ) {
190
+ if ($ firstTitleLines !== [] || $ secondTitleLines !== [] ) {
252
191
$ maxTitleLines = max (count ($ firstTitleLines ), count ($ secondTitleLines ));
253
192
for ($ i = 0 ; $ i < $ maxTitleLines ; $ i ++) {
254
193
if (isset ($ firstTitleLines [$ i ]) === true ) {
@@ -274,7 +213,7 @@ protected function getFormattedCodeComparisonBlock(DOMNode $node)
274
213
}//end if
275
214
276
215
$ codeRow = '' ;
277
- if ($ first !== '' || $ second !== '' ) {
216
+ if ($ firstLines !== [] || $ secondLines !== [] ) {
278
217
$ maxCodeLines = max (count ($ firstLines ), count ($ secondLines ));
279
218
for ($ i = 0 ; $ i < $ maxCodeLines ; $ i ++) {
280
219
if (isset ($ firstLines [$ i ]) === true ) {
@@ -313,4 +252,75 @@ protected function getFormattedCodeComparisonBlock(DOMNode $node)
313
252
}//end getFormattedCodeComparisonBlock()
314
253
315
254
255
+ /**
256
+ * Retrieve a code block title and split it into lines for use in an ASCII table.
257
+ *
258
+ * @param \DOMElement $codeElm The DOMElement object for a code block.
259
+ *
260
+ * @since 3.12.0
261
+ *
262
+ * @return array<string>
263
+ */
264
+ private function codeTitleToLines (DOMElement $ codeElm )
265
+ {
266
+ $ title = trim ($ codeElm ->getAttribute ('title ' ));
267
+ if ($ title === '' ) {
268
+ return [];
269
+ }
270
+
271
+ $ titleLines = [];
272
+ $ tempTitle = '' ;
273
+ $ words = explode (' ' , $ title );
274
+
275
+ foreach ($ words as $ word ) {
276
+ if (strlen ($ tempTitle .$ word ) >= 45 ) {
277
+ if (strlen ($ tempTitle .$ word ) === 45 ) {
278
+ // Adding the extra space will push us to the edge
279
+ // so we are done.
280
+ $ titleLines [] = $ tempTitle .$ word ;
281
+ $ tempTitle = '' ;
282
+ } else if (strlen ($ tempTitle .$ word ) === 46 ) {
283
+ // We are already at the edge, so we are done.
284
+ $ titleLines [] = $ tempTitle .$ word ;
285
+ $ tempTitle = '' ;
286
+ } else {
287
+ $ titleLines [] = $ tempTitle ;
288
+ $ tempTitle = $ word .' ' ;
289
+ }
290
+ } else {
291
+ $ tempTitle .= $ word .' ' ;
292
+ }
293
+ }//end foreach
294
+
295
+ if ($ tempTitle !== '' ) {
296
+ $ titleLines [] = $ tempTitle ;
297
+ }
298
+
299
+ return $ titleLines ;
300
+
301
+ }//end codeTitleToLines()
302
+
303
+
304
+ /**
305
+ * Retrieve a code block contents and split it into lines for use in an ASCII table.
306
+ *
307
+ * @param \DOMElement $codeElm The DOMElement object for a code block.
308
+ *
309
+ * @since 3.12.0
310
+ *
311
+ * @return array<string>
312
+ */
313
+ private function codeToLines (DOMElement $ codeElm )
314
+ {
315
+ $ code = trim ($ codeElm ->nodeValue );
316
+ if ($ code === '' ) {
317
+ return [];
318
+ }
319
+
320
+ $ code = str_replace (['<em> ' , '</em> ' ], '' , $ code );
321
+ return explode ("\n" , $ code );
322
+
323
+ }//end codeToLines()
324
+
325
+
316
326
}//end class
0 commit comments