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