diff options
author | elliott_c <ocielliottc@users.noreply.github.com> | 2007-01-12 15:25:47 +0000 |
---|---|---|
committer | elliott_c <ocielliottc@users.noreply.github.com> | 2007-01-12 15:25:47 +0000 |
commit | a1ead4ea0aa0369461ad232ac819d3a159c2e7af (patch) | |
tree | e1bae47ab766f855930426e448b89ed9d761c629 /modules/Creator.pm | |
parent | cbf18a70c01f12ae47059c3de20dc5dc4a0922a6 (diff) | |
download | MPC-a1ead4ea0aa0369461ad232ac819d3a159c2e7af.tar.gz |
ChangeLogTag: Fri Jan 12 15:24:27 UTC 2007 Chad Elliott <elliott_c@ociweb.com>
Diffstat (limited to 'modules/Creator.pm')
-rw-r--r-- | modules/Creator.pm | 85 |
1 files changed, 56 insertions, 29 deletions
diff --git a/modules/Creator.pm b/modules/Creator.pm index ac04cfb7..961c24fd 100644 --- a/modules/Creator.pm +++ b/modules/Creator.pm @@ -349,14 +349,19 @@ sub parse_scope { my(@values) = (); if (defined $validNames && $self->parse_assignment($line, \@values)) { if (defined $$validNames{$values[1]}) { - if ($values[0] == 0) { - $self->process_assignment($values[1], $values[2], $flags); - } - elsif ($values[0] == 1) { - $self->process_assignment_add($values[1], $values[2], $flags); - } - elsif ($values[0] == -1) { - $self->process_assignment_sub($values[1], $values[2], $flags); + ## If $type is not defined, we don't even need to bother with + ## processing the assignment as we will be throwing the value + ## away anyway. + if (defined $type) { + if ($values[0] == 0) { + $self->process_assignment($values[1], $values[2], $flags); + } + elsif ($values[0] == 1) { + $self->process_assignment_add($values[1], $values[2], $flags); + } + elsif ($values[0] == -1) { + $self->process_assignment_sub($values[1], $values[2], $flags); + } } } else { @@ -575,6 +580,28 @@ sub process_assignment { } +sub addition_core { + my($self) = shift; + my($name) = shift; + my($value) = shift; + my($nval) = shift; + my($assign) = shift; + + if (defined $nval) { + if ($self->preserve_assignment_order($name)) { + $nval .= " $value"; + } + else { + $nval = "$value $nval"; + } + } + else { + $nval = $value; + } + $self->process_assignment($name, $nval, $assign, 1); +} + + sub process_assignment_add { my($self) = shift; my($name) = shift; @@ -589,36 +616,19 @@ sub process_assignment_add { ## If there is anything to add, then do so if ($value ne '') { - if (defined $nval) { - if ($self->preserve_assignment_order($name)) { - $nval .= " $value"; - } - else { - $nval = "$value $nval"; - } - } - else { - $nval = $value; - } - $self->process_assignment($name, $nval, $assign); + $self->addition_core($name, $value, $nval, $assign); } } -sub process_assignment_sub { +sub subtraction_core { my($self) = shift; my($name) = shift; my($value) = shift; + my($nval) = shift; my($assign) = shift; - my($nval) = $self->get_assignment_for_modification($name, $assign); if (defined $nval) { - ## Remove double quotes if there are any - $value =~ s/^\"(.*)\"$/$1/; - - ## Escape any regular expression special characters - $value = $self->escape_regex_special($value); - my($last) = 1; my($found) = undef; for(my $i = 0; $i <= $last; $i++) { @@ -637,7 +647,7 @@ sub process_assignment_sub { ## or at the end of the line (single values are always at the end ## of the line). if ($nval =~ s/$re\s+// || $nval =~ s/$re$//) { - $self->process_assignment($name, $nval, $assign); + $self->process_assignment($name, $nval, $assign, -1); $found = 1; last; } @@ -648,6 +658,23 @@ sub process_assignment_sub { } +sub process_assignment_sub { + my($self) = shift; + my($name) = shift; + my($value) = shift; + my($assign) = shift; + my($nval) = $self->get_assignment_for_modification($name, $assign); + + ## Remove double quotes if there are any + $value =~ s/^\"(.*)\"$/$1/; + + ## Escape any regular expression special characters + $value = $self->escape_regex_special($value); + + $self->subtraction_core($name, $value, $nval, $assign); +} + + sub fill_type_name { my($self) = shift; my($names) = shift; |