結城浩のはてなブログ

ふと思いついたことをパタパタと書いてます。

json2css.pl

CSS JSON (JavaScript)CSS JSON (Perl)を見て、後者のほうにCSSJSON-INHERIT-SELECTORを入れました。

#!/usr/bin/perl
use strict;
use warnings;
use JSON::Syck;

local $/;
print json2css(<>);

sub json2css {
    my $json = JSON::Syck::Load(shift);
    my $css = '';
    for my $selector (keys %$json) {
        $css .= sprintf "%s {\n", $selector;
        for my $property (keys %{$json->{$selector}}) {
            if ($property eq 'CSSJSON-INHERIT-SELECTOR') {
                my $copied_selector = $json->{$selector}->{$property};
                for my $copied_property (keys %{$json->{$copied_selector}}) {
                    $css .= sprintf "\t%s: %s;\n", $copied_property, $json->{$copied_selector}->{$copied_property};
                }
            } else {
                $css .= sprintf "\t%s: %s;\n", $property, $json->{$selector}->{$property};
            }
        }
        $css .= "}\n";
    }
    $css;
}

1;

# This script is based on
# http://naoya.g.hatena.ne.jp/naoya/20061109/1163067893
# http://www.featureblend.com/css-json.html