#
# This software is Copyright 2005 by Elsevier Inc.  You may use it
# under the terms of the license at http://perl.plover.com/hop/LICENSE.txt .
#



###
### make_genes
###

## Chapter 4 section 3.2

sub make_genes {
  my $pat = shift;
  my @tokens = split /[()]/, $pat;
  for (my $i = 1; $i < @tokens; $i += 2) {
    $tokens[$i] = [0, split(//, $tokens[$i])];
  }
  my $FINISHED = 0;
  return Iterator {
    return if $FINISHED;
    my $finished_incrementing = 0;
    my $result = "";
    for my $token (@tokens) {
      if (ref $token eq "") {    # plain string
        $result .= $token;
      } else {                   # wildcard
        my ($n, @c) = @$token;
        $result .= $c[$n];
        unless ($finished_incrementing) {
          if ($n == $#c) { $token->[0] = 0 }
          else { $token->[0]++; $finished_incrementing = 1 }
        }                
      }
    }
    $FINISHED = 1 unless $finished_incrementing;
    return $result;
  }
}
