С опозданием ровно в один день я всё-таки опубликую новые забавы, которые, я напоминаю, были открыты материалом о дескриптивном HTML. На этот раз тема парсеров остаётся такой же открытой, как и в прошлый раз, но меняется сам объект исследования: на этот раз им становится CSS.
Очень вовремя WebKit анонсирует экспериментальную поддержку переменных в CSS и теперь разработчикам станет ещё проще составлять вполне логичные, самодостаточные CSS-документы, которые позволят составлять репрезентацию для (X)HTML-документа. Введение переменных — это очевидный плюс для верстальщиков, которые, по сути, превращают CSS в ещё более мощный язык программирования (да-да, я не оговорился).
Но у нас есть своя работа: нам ждать полной поддержки во всех браузерах не хочется, поэтому мы бросимся без снаряжения в грот, на встречу новым приключениям и забавам.
В грот!
Давайте, пока нам на пятки наступает поддержка переменных в CSS, реализуем небольшой парсер, который будет реализовывать эту самую возможность. А давайте! Писать, даже если кому-то это не нравится, я буду на Ruby, так как считаю, что понять его не составляет большого труда, тем более код я всегда комментирую очень обильно (представьте себе стакан с огромным количеством сахара).
Для начала определимся, как мы будем эти переменные встраивать в сам CSS файл. Я пришёл к такому незамысловатому решению:
Итак, чтобы разграничить секцию переменных, мы будем использовать комментарии с небольшим дополнением, чтобы парсер смог их найти в коде. Секция переменных (или секции, если их несколько), начинается с символов /*@ и заканчивается символами @*/. Вот так, никакой уличной магии и не требуется.
Теперь напишем файл, над которым мы будем экспериментировать.
Не забывайте, что мы просто забавляемся, поэтому я умышленно ничего не пытаюсь осложнять в наших примерах.
Галереи
Ну что же, давайте начнём использовать интерпретатор Ruby! Перво-наперво, создаём основу нашего класса и инициализацию:
Если при создании класса мы укажем вторую переменную, то наш скрипт создаст новый файл и запишет туда весь результат работы.
Вы заметили, что мы не реализовали метод parse_cssv. Правильно заметили, поэтому приступаем:
Класс готов! Вызовем его методы на наш файл, который, допустим, называется default.cssv:
В итоге наш CSS-файл превратится вот в это:
Приключения заканчиваются
Ну вот и всё на сегодня, уважаемые читатели. Получилась вот такая маленькая новонедельная забава. Удачной недели вам, следите за новостями.