Темна ніч та функція show_source()

Швидкий брудний пост. Я під час розробки на PHP іноді користуюсь show_source(). Ну, знаєте, буває треба показати код і при цьому хоч якось підсвітити синтаксис, не встановлюючи тонну зовнішніх залежностей.

Так, це анахронізм часів PHP4. І так, за замовчанням кольори там розраховані на світле тло. Якщо у вас сайт з темним фоном, то можна поміняти кольори на щось відповідне, але це все трошки бісить.

А що як у нас сучасна адаптивна кольорова схема?

<meta name="color-scheme" content="light dark">

Тоді у нас взагалі не може бути фіксованих кольорів, бо має одночасно існувати і варіант для темної схеми, і варіант для світлої.

Спробував через змінні CSS. Погнали.

Пишемо в php.ini щось таке:

highlight.default = "var(--php-default)"
highlight.html = "var(--php-html)"
highlight.keyword = "var(--php-keyword)"
highlight.string = "var(--php-string)"
highlight.comment = "var(--php-comment)"

Або, якщо змінювати php.ini незручно, робимо це в runtime в PHP:

foreach (['default', 'html', 'keyword', 'string', 'comment'] as $key) {
    ini_set('highlight.' . $key, 'var(--php-' . $key . ')');
}

І тепер нам треба приблизно отакий CSS:

:root {
  --php-comment: #f800;
  --php-default: #00b;
  --php-html: #000;
  --php-keyword: #070;
  --php-string: #d00;
}

@media (prefers-color-scheme: dark) { 
  :root {
    --php-comment: #860;
    --php-default: #66f;
    --php-html: #ccc;
    --php-keyword: #0f3;
    --php-string: #fc0;
  }
}

Всьо, пофарбували, порядок :)