~john-koepi/ubuntu/trusty/golang/default

« back to all changes in this revision

Viewing changes to src/pkg/exp/regexp/syntax/make_perl_groups.pl

  • Committer: Bazaar Package Importer
  • Author(s): Ondřej Surý
  • Date: 2011-08-03 17:04:59 UTC
  • mfrom: (14.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20110803170459-wzd99m3567y80ila
Tags: 1:59-1
* Imported Upstream version 59
* Refresh patches to a new release
* Fix FTBFS on ARM (Closes: #634270)
* Update version.bash to work with Debian packaging and not hg
  repository

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
# Copyright 2008 The Go Authors.  All rights reserved.
 
3
# Use of this source code is governed by a BSD-style
 
4
# license that can be found in the LICENSE file.
 
5
 
 
6
# Modified version of RE2's make_perl_groups.pl.
 
7
 
 
8
# Generate table entries giving character ranges
 
9
# for POSIX/Perl character classes.  Rather than
 
10
# figure out what the definition is, it is easier to ask
 
11
# Perl about each letter from 0-128 and write down
 
12
# its answer.
 
13
 
 
14
@posixclasses = (
 
15
        "[:alnum:]",
 
16
        "[:alpha:]",
 
17
        "[:ascii:]",
 
18
        "[:blank:]",
 
19
        "[:cntrl:]",
 
20
        "[:digit:]",
 
21
        "[:graph:]",
 
22
        "[:lower:]",
 
23
        "[:print:]",
 
24
        "[:punct:]",
 
25
        "[:space:]",
 
26
        "[:upper:]",
 
27
        "[:word:]",
 
28
        "[:xdigit:]",
 
29
);
 
30
 
 
31
@perlclasses = (
 
32
        "\\d",
 
33
        "\\s",
 
34
        "\\w",
 
35
);
 
36
 
 
37
sub ComputeClass($) {
 
38
  my @ranges;
 
39
  my ($class) = @_;
 
40
  my $regexp = "[$class]";
 
41
  my $start = -1;
 
42
  for (my $i=0; $i<=129; $i++) {
 
43
    if ($i == 129) { $i = 256; }
 
44
    if ($i <= 128 && chr($i) =~ $regexp) {
 
45
      if ($start < 0) {
 
46
        $start = $i;
 
47
      }
 
48
    } else {
 
49
      if ($start >= 0) {
 
50
        push @ranges, [$start, $i-1];
 
51
      }
 
52
      $start = -1;
 
53
    }
 
54
  }
 
55
  return @ranges;
 
56
}
 
57
 
 
58
sub PrintClass($$@) {
 
59
  my ($cname, $name, @ranges) = @_;
 
60
  print "var code$cname = []int{  /* $name */\n";
 
61
  for (my $i=0; $i<@ranges; $i++) {
 
62
    my @a = @{$ranges[$i]};
 
63
    printf "\t0x%x, 0x%x,\n", $a[0], $a[1];
 
64
  }
 
65
  print "}\n\n";
 
66
  my $n = @ranges;
 
67
  $negname = $name;
 
68
  if ($negname =~ /:/) {
 
69
    $negname =~ s/:/:^/;
 
70
  } else {
 
71
    $negname =~ y/a-z/A-Z/;
 
72
  }
 
73
  return "\t`$name`: {+1, code$cname},\n" .
 
74
        "\t`$negname`: {-1, code$cname},\n";
 
75
}
 
76
 
 
77
my $gen = 0;
 
78
 
 
79
sub PrintClasses($@) {
 
80
  my ($cname, @classes) = @_;
 
81
  my @entries;
 
82
  foreach my $cl (@classes) {
 
83
    my @ranges = ComputeClass($cl);
 
84
    push @entries, PrintClass(++$gen, $cl, @ranges);
 
85
  }
 
86
  print "var ${cname}Group = map[string]charGroup{\n";
 
87
  foreach my $e (@entries) {
 
88
    print $e;
 
89
  }
 
90
  print "}\n";
 
91
  my $count = @entries;
 
92
}
 
93
 
 
94
print <<EOF;
 
95
// GENERATED BY make_perl_groups.pl; DO NOT EDIT.
 
96
// make_perl_groups.pl >perl_groups.go
 
97
 
 
98
package syntax
 
99
 
 
100
EOF
 
101
 
 
102
PrintClasses("perl", @perlclasses);
 
103
PrintClasses("posix", @posixclasses);