Skip to content

Commit bb384a1

Browse files
committed
Don't print duplicated cli formatting characters
1 parent 93167f3 commit bb384a1

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

src/Utils/Formatter.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ public function escapeConsole($string)
528528
public function toString($token)
529529
{
530530
$text = $token->token;
531+
static $prev;
531532

532533
foreach ($this->options['formats'] as $format) {
533534
if ($token->type === $format['type']
@@ -543,15 +544,25 @@ public function toString($token)
543544
if ($this->options['type'] === 'html') {
544545
return '<span ' . $format['html'] . '>' . htmlspecialchars($text, ENT_NOQUOTES) . '</span>';
545546
} elseif ($this->options['type'] === 'cli') {
546-
return $format['cli'] . $this->escapeConsole($text);
547+
if ($prev != $format['cli']) {
548+
$prev = $format['cli'];
549+
return $format['cli'] . $this->escapeConsole($text);
550+
}
551+
552+
return $this->escapeConsole($text);
547553
}
548554

549555
break;
550556
}
551557
}
552558

553559
if ($this->options['type'] === 'cli') {
554-
return "\x1b[39m" . $this->escapeConsole($text);
560+
if ($prev != "\x1b[39m") {
561+
$prev = "\x1b[39m";
562+
return "\x1b[39m" . $this->escapeConsole($text);
563+
}
564+
565+
return $this->escapeConsole($text);
555566
} elseif ($this->options['type'] === 'html') {
556567
return htmlspecialchars($text, ENT_NOQUOTES);
557568
}

tests/Utils/FormatterTest.php

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -308,18 +308,18 @@ public function formatQueries()
308308
'DESC' . "\n" .
309309
'LIMIT 1 OFFSET 0',
310310
'cli' => "\x1b[35mSELECT" . "\n" .
311-
" \x1b[39mid\x1b[39m," . "\n" .
312-
" \x1b[35mIF\x1b[39m(\x1b[39mid \x1b[39m= \x1b[92m1\x1b[39m, \x1b[91m\"Si\"\x1b[39m, \x1b[91m\"No\"\x1b[39m)" . "\n" .
311+
" \x1b[39mid," . "\n" .
312+
" \x1b[35mIF\x1b[39m(id = \x1b[92m1\x1b[39m, \x1b[91m\"Si\"\x1b[39m, \x1b[91m\"No\"\x1b[39m)" . "\n" .
313313
"\x1b[35mFROM" . "\n" .
314314
" \x1b[36m`tbl`" . "\n" .
315315
"\x1b[35mWHERE" . "\n" .
316-
" \x1b[39mid \x1b[39m= \x1b[92m0 \x1b[35mOR \x1b[39mid \x1b[39m= \x1b[92m1" . "\n" .
316+
" \x1b[39mid = \x1b[92m0 \x1b[35mOR \x1b[39mid = \x1b[92m1" . "\n" .
317317
"\x1b[35mGROUP BY" . "\n" .
318318
" \x1b[39mid" . "\n" .
319319
"\x1b[35mORDER BY" . "\n" .
320320
" \x1b[39mid" . "\n" .
321321
"\x1b[35mDESC" . "\n" .
322-
"\x1b[35mLIMIT \x1b[92m1 \x1b[95mOFFSET \x1b[92m0" . "\x1b[0m",
322+
"LIMIT \x1b[92m1 \x1b[95mOFFSET \x1b[92m0" . "\x1b[0m",
323323
'html' => '<span class="sql-reserved">SELECT</span>' . '<br/>' .
324324
'&nbsp;&nbsp;&nbsp;&nbsp;id,' . '<br/>' .
325325
'&nbsp;&nbsp;&nbsp;&nbsp;<span class="sql-reserved">IF</span>(id = <span class="sql-number">1</span>, <span class="sql-string">"Si"</span>, <span class="sql-string">"No"</span>)' . '<br/>' .
@@ -396,8 +396,8 @@ public function formatQueries()
396396
'query' => 'select distinct count(*)',
397397
'text' => 'SELECT DISTINCT' . "\n" .
398398
' COUNT(*)',
399-
'cli' => "\x1b[35mSELECT \x1b[35mDISTINCT" . "\n" .
400-
" \x1b[95mCOUNT\x1b[39m(\x1b[39m*\x1b[39m)" . "\x1b[0m",
399+
'cli' => "\x1b[35mSELECT DISTINCT" . "\n" .
400+
" \x1b[95mCOUNT\x1b[39m(*)" . "\x1b[0m",
401401
'html' => '<span class="sql-reserved">SELECT</span> <span class="sql-reserved">DISTINCT</span>' . '<br/>' .
402402
'&nbsp;&nbsp;&nbsp;&nbsp;<span class="sql-keyword">COUNT</span>(*)',
403403
),
@@ -412,12 +412,12 @@ public function formatQueries()
412412
' *;' . "\n" .
413413
'END',
414414
'cli' => "\x1b[35mCREATE" . "\n" .
415-
"\x1b[35mPROCEDURE \x1b[39mtest_procedure\x1b[39m(\x1b[39m)\n" .
415+
"PROCEDURE \x1b[39mtest_procedure()\n" .
416416
"\x1b[95mBEGIN" . "\n" .
417417
" \x1b[35mFROM" . "\n" .
418418
" \x1b[39mtbl" . "\n" .
419419
" \x1b[35mSELECT" . "\n" .
420-
" \x1b[39m*\x1b[39m;\n" .
420+
" \x1b[39m*;\n" .
421421
"\x1b[95mEND" . "\x1b[0m",
422422
'html' => '<span class="sql-reserved">CREATE</span>' . '<br/>' .
423423
'<span class="sql-reserved">PROCEDURE</span> test_procedure()' . '<br/>' .
@@ -432,8 +432,8 @@ public function formatQueries()
432432
'query' => 'insert into foo values (0, 0, 0), (1, 1, 1)',
433433
'text' => 'INSERT INTO foo' . "\n" .
434434
'VALUES(0, 0, 0),(1, 1, 1)',
435-
'cli' => "\x1b[35mINSERT \x1b[35mINTO \x1b[39mfoo" . "\n" .
436-
"\x1b[35mVALUES\x1b[39m(\x1b[92m0\x1b[39m, \x1b[92m0\x1b[39m, \x1b[92m0\x1b[39m)\x1b[39m,\x1b[39m(\x1b[92m1\x1b[39m, \x1b[92m1\x1b[39m, \x1b[92m1\x1b[39m)" . "\x1b[0m",
435+
'cli' => "\x1b[35mINSERT INTO \x1b[39mfoo" . "\n" .
436+
"\x1b[35mVALUES\x1b[39m(\x1b[92m0\x1b[39m, \x1b[92m0\x1b[39m, \x1b[92m0\x1b[39m),(\x1b[92m1\x1b[39m, \x1b[92m1\x1b[39m, \x1b[92m1\x1b[39m)" . "\x1b[0m",
437437
'html' => '<span class="sql-reserved">INSERT</span> <span class="sql-reserved">INTO</span> foo' . '<br/>' .
438438
'<span class="sql-reserved">VALUES</span>(<span class="sql-number">0</span>, <span class="sql-number">0</span>, <span class="sql-number">0</span>),(<span class="sql-number">1</span>, <span class="sql-number">1</span>, <span class="sql-number">1</span>)',
439439
),
@@ -466,7 +466,7 @@ public function formatQueries()
466466
" \x1b[91m'<s>xss'" . "\n" .
467467
"\x1b[35mFROM" . "\n" .
468468
" \x1b[36m`<s>xss`\x1b[39m," . "\n" .
469-
" \x1b[39m< \x1b[39ms \x1b[39m> \x1b[39mnxss \x1b[37m/*s<s>xss*/" . "\x1b[0m",
469+
" < s > nxss \x1b[37m/*s<s>xss*/" . "\x1b[0m",
470470
'html' => '<span class="sql-reserved">SELECT</span>' . '<br/>' .
471471
'&nbsp;&nbsp;&nbsp;&nbsp;<span class="sql-string">\'&lt;s&gt;xss\'</span>' . '<br/>' .
472472
'<span class="sql-reserved">FROM</span>' . '<br/>' .
@@ -487,11 +487,11 @@ public function formatQueries()
487487
' `label` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT "",' . "\n" .
488488
' `query` TEXT NOT NULL,' . "\n" .
489489
' PRIMARY KEY(`id`)',
490-
'cli' => "\x1b[35mCREATE \x1b[35mTABLE \x1b[35mIF NOT EXISTS \x1b[36m`pma__bookmark`\x1b[39m(" . "\n" .
490+
'cli' => "\x1b[35mCREATE TABLE IF NOT EXISTS \x1b[36m`pma__bookmark`\x1b[39m(" . "\n" .
491491
" \x1b[36m`id` \x1b[35mINT\x1b[39m(\x1b[92m11\x1b[39m) \x1b[35mNOT NULL \x1b[95mAUTO_INCREMENT\x1b[39m," . "\n" .
492-
" \x1b[36m`dbase` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mNOT NULL \x1b[35mDEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
493-
" \x1b[36m`user` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mNOT NULL \x1b[35mDEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
494-
" \x1b[36m`label` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mCOLLATE \x1b[39mutf8_general_ci \x1b[35mNOT NULL \x1b[35mDEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
492+
" \x1b[36m`dbase` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mNOT NULL DEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
493+
" \x1b[36m`user` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mNOT NULL DEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
494+
" \x1b[36m`label` \x1b[35mVARCHAR\x1b[39m(\x1b[92m255\x1b[39m) \x1b[35mCOLLATE \x1b[39mutf8_general_ci \x1b[35mNOT NULL DEFAULT \x1b[91m\"\"\x1b[39m," . "\n" .
495495
" \x1b[36m`query` \x1b[95mTEXT \x1b[35mNOT NULL\x1b[39m," . "\n" .
496496
" \x1b[35mPRIMARY KEY\x1b[39m(\x1b[36m`id`\x1b[39m)" . "\x1b[0m",
497497
'html' => '<span class="sql-reserved">CREATE</span> <span class="sql-reserved">TABLE</span> <span class="sql-reserved">IF NOT EXISTS</span> <span class="sql-variable">`pma__bookmark`</span>(' . '<br/>' .
@@ -505,7 +505,7 @@ public function formatQueries()
505505
'join' => array(
506506
'query' => 'join tbl2 on c1=c2',
507507
'text' => 'JOIN tbl2 ON c1 = c2',
508-
'cli' => "\x1b[35mJOIN \x1b[39mtbl2 \x1b[35mON \x1b[39mc1 \x1b[39m= \x1b[39mc2" .
508+
'cli' => "\x1b[35mJOIN \x1b[39mtbl2 \x1b[35mON \x1b[39mc1 = c2" .
509509
"\x1b[0m",
510510
'html' => '<span class="sql-reserved">JOIN</span> tbl2 <span class="sql-reserved">ON</span> c1 = c2',
511511
),

0 commit comments

Comments
 (0)