0

私はjarcssparser-0.9.5.jarを使用してcssファイルをスキャンするプログラムを作成し、それに対していくつかの操作を実行しました

public static Map<String, CSSStyleRule> parseCSS(String FileName) throws IOException {
        Map<String, CSSStyleRule> rules = new LinkedHashMap<String, CSSStyleRule>();
        InputSource inputSource = new InputSource(
                new FileReader(FileName));
        CSSStyleSheet styleSheet = new CSSOMParser().parseStyleSheet(
                inputSource, null, null);

        CSSRuleList ruleList = styleSheet.getCssRules();
        for (int i = 0; i < ruleList.getLength(); i++) {
            CSSRule rule = ruleList.item(i);
            if (rule.getType() == CSSRule.STYLE_RULE) {
                CSSStyleRule styleRule = (CSSStyleRule) rule;
                rules.put(styleRule.getSelectorText(), styleRule);
            }
        }

        return rules;
    }

このコードは、「-」で始まるプロパティを含むクラスを除くすべてのクラスで正常に機能します。

.overlay
{

    filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');

}

解析後、クラス.overlayのプロパティに存在するdouble':'に対してエラーが発生します

それで、この問題を解決するためのアイデアはありますか?

4

1 に答える 1

3

投稿したコードは、実際の問題が発生している場所よりも数レベル高くなっています。問題は字句スキャナーにあります。識別子(IDENT)の定義は、ハイフンを含み、ハイフンで始まる可能性があるため、間違っているようです。

CSS3構文仕様にあるように:

CSS3では、識別子(要素名、クラス、セレクターのIDを含む([SELECT [またはこれはまだtrue]を参照))には、文字[A-Za-z0-9]とISO10646文字161以降のみを含めることができます。プラスハイフン(-)とアンダースコア(_); 数字またはハイフンの後に数字を続けることはできません。

ここで完全な仕様を参照してください。

于 2012-05-10T10:49:45.027 に答える