Разбирая CSS...
Итак, понадобилось мне разбирать CSS из Java. Ну понадобилось и понадобилось.
Есть два стандартных решения: SAC (Simple API for CSS, аналог SAX) и CssOM (вернее DOM2:CSS). По привычке выбрал первое решение. А дальше пошли сюрпризы:
API классное. Вот только почти ничего 'advanced' не поддерживается. Например, ни одна из реализаций не поддерживает пространства имен из CSS3. Из 13 условий поддерживаются только 8. 6 типов селекторов из 12. Но это все цветочки. Так развлечения. Реально мне нужно даже меньше.
Но... Поставленный из пакета batik не стал распознавать :first-line, :first-letter. Релиз flute превращал тот же p:first-line в 'p > :first-line'. Релиз cssparser отказался нормально работать. Взятый срез CSS работает, но чуть-чуть криво. Ужас!
Итог: flute + один костыль для first-line. И подпорка, чтобы не было чего-нибудь в духе '*[a="b"]' вместо '[a="b"]'.
Есть два стандартных решения: SAC (Simple API for CSS, аналог SAX) и CssOM (вернее DOM2:CSS). По привычке выбрал первое решение. А дальше пошли сюрпризы:
API классное. Вот только почти ничего 'advanced' не поддерживается. Например, ни одна из реализаций не поддерживает пространства имен из CSS3. Из 13 условий поддерживаются только 8. 6 типов селекторов из 12. Но это все цветочки. Так развлечения. Реально мне нужно даже меньше.
Но... Поставленный из пакета batik не стал распознавать :first-line, :first-letter. Релиз flute превращал тот же p:first-line в 'p > :first-line'. Релиз cssparser отказался нормально работать. Взятый срез CSS работает, но чуть-чуть криво. Ужас!
Итог: flute + один костыль для first-line. И подпорка, чтобы не было чего-нибудь в духе '*[a="b"]' вместо '[a="b"]'.