WebKitTools:
[WebKit-https.git] / WebKitTools / Scripts / update-iexploder-cssproperties
1 #!/usr/bin/perl
2
3 # Copyright (C) 2007 Apple Inc.  All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 #
9 # 1.  Redistributions of source code must retain the above copyright
10 #     notice, this list of conditions and the following disclaimer. 
11 # 2.  Redistributions in binary form must reproduce the above copyright
12 #     notice, this list of conditions and the following disclaimer in the
13 #     documentation and/or other materials provided with the distribution. 
14 # 3.  Neither the name of Apple Inc. ("Apple") nor the names of
15 #     its contributors may be used to endorse or promote products derived
16 #     from this software without specific prior written permission. 
17 #
18 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 # This script updates WebKitTools/iExploder/htdocs/cssproperties.in based on
30 # WebCore/css/CSSPropertyNames.in.
31
32 use warnings;
33 use strict;
34
35 use FindBin;
36 use lib $FindBin::Bin;
37 use webkitdirs;
38
39 use File::Spec;
40
41 sub generateSectionFromCSSPropertyNamesFile();
42 sub readiExploderFile();
43 sub svnRevision($);
44 sub writeiExploderFile();
45
46 my $iExploderFile = File::Spec->catfile(sourceDir(), split("/", "WebKitTools/iExploder/htdocs/cssproperties.in"));
47 my $cssPropertyNamesFile = File::Spec->catfile(sourceDir(), split("/", "WebCore/css/CSSPropertyNames.in"));
48
49 my @sections = readiExploderFile();
50 $sections[0] = generateSectionFromCSSPropertyNamesFile();
51 writeiExploderFile();
52
53 print `svn stat $iExploderFile`;
54 print "Successfully updated!\n";
55
56 exit 0;
57
58 sub generateSectionFromCSSPropertyNamesFile()
59 {
60     my $revision = svnRevision($cssPropertyNamesFile);
61     my $path = File::Spec->abs2rel($cssPropertyNamesFile, sourceDir());
62     my $result = "# From WebKit svn r" . $revision . " (" . $path . ")\n";
63
64     my @properties = ();
65
66     open(IN, $cssPropertyNamesFile) || die "$!";
67     while (my $l = <IN>) {
68         chomp $l;
69         next if $l =~ m/^\s*#/ || $l =~ m/^\s*$/;
70         push(@properties, $l);
71     }
72     close(IN);
73
74     $result .= join("\n", sort { $a cmp $b } @properties) . "\n\n";
75
76     return $result;
77 }
78
79 sub readiExploderFile()
80 {
81     my @sections = ();
82     local $/ = "\n\n";
83
84     open(IN, $iExploderFile) || die "$!";
85     @sections = <IN>;
86     close(IN);
87
88     return @sections;
89 }
90
91 sub svnRevision($)
92 {
93     my ($file) = @_;
94     my $revision = "";
95
96     open INFO, "svn info '$file' |" or die;
97     while (<INFO>) {
98         if (/^Revision: (.+)/) {
99             $revision = $1;
100         }
101     }
102     close INFO;
103
104     return $revision ? $revision : "UNKNOWN";
105 }
106
107 sub writeiExploderFile()
108 {
109     open(OUT, "> $iExploderFile") || die "$!";
110     print OUT join("", @sections);
111     close(OUT);
112 }