Upgrade bluez5_37 :Merge the code from private
[platform/upstream/bluez.git] / tools / parse_companies.pl
1 #!/usr/bin/perl
2
3 # parse companies from
4 # https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers
5
6 use strict;
7 # use URI::Encode qw(uri_decode);
8
9 my %known_entities = (
10     'nbsp' => ' ',
11     'eacute' => 'é',
12     'auml' => 'ä',
13 );
14
15 # better to use URI::Encode if you have it
16 sub uri_decode {
17     my $name = $_[0];
18     foreach my $entity (keys %known_entities) {
19         my $to = $known_entities{$entity};
20         $name =~ s/&$entity;/$to/g;
21     }
22     foreach my $entity (map { lc $_ } $name =~ /&([^;]+);/g) {
23         if ($entity ne 'amp') {
24             print "Unable to convert &$entity;, giving up\n";
25             exit 1;
26         }
27     }
28     $name =~ s/&/&/ig;
29     $name =~ s/ / /ig;
30     return $name;
31 }
32
33 # never parse HTML with regex!
34 # except when you should
35
36 my $identifier;
37 my $next_is_name = 0;
38
39 while (<>) {
40     s/\xe2\x80\x8b//g; # kill zero width space
41
42     # grab identifier (in hex)
43     if (/\<td.*(0x[0-9A-F]{4})/i) {
44         $identifier = $1;
45         $next_is_name = 1;
46
47     # next <td> should be company name
48     } elsif ($next_is_name && m|\<td.*\>(.*)\</td\>|) {
49         my $name = uri_decode($1);
50         $name =~ s/^\s+//g; # kill leading
51         $name =~ s/\s+$//g; # and trailing space
52         my $id = hex($identifier);
53         if ($id != 65535) {
54             print "\tcase $id:\n";
55             print "\t\treturn \"$name\";\n";
56         }
57         $next_is_name = 0;
58     }
59 }