summaryrefslogtreecommitdiff
path: root/ACE/MPC/modules/StringProcessor.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/modules/StringProcessor.pm')
-rw-r--r--ACE/MPC/modules/StringProcessor.pm133
1 files changed, 133 insertions, 0 deletions
diff --git a/ACE/MPC/modules/StringProcessor.pm b/ACE/MPC/modules/StringProcessor.pm
new file mode 100644
index 00000000000..fc08e97fd2b
--- /dev/null
+++ b/ACE/MPC/modules/StringProcessor.pm
@@ -0,0 +1,133 @@
+package StringProcessor;
+
+# ************************************************************
+# Description : Perform various algorithms on strings
+# Author : Chad Elliott
+# Create Date : 3/07/2003
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub parse_assignment {
+ my($self, $line, $values) = @_;
+
+ ## In MPC, a scope can have spaces in it. However, it can not end
+ ## in a space.
+ if ($line =~ /^((\w+[\s\w]+\w::)*\w+)\s*([\-+]?=)\s*(.*)?/) {
+ my $op = ($3 eq '+=' ? 1 : $3 eq '-=' ? -1 : 0);
+ push(@$values, $op, $self->resolve_alias(lc($1)), $4);
+ return 1;
+ }
+
+ return 0;
+}
+
+
+sub extractType {
+ my($self, $name) = @_;
+ my $type = $name;
+
+ if ($name =~ /(.*)(Project|Workspace)Creator/) {
+ $type = $1;
+ }
+
+ return lc($type);
+}
+
+
+sub process_special {
+ my($self, $line) = @_;
+
+ ## Replace all escaped double quotes and escaped backslashes
+ ## with special characters
+ my $escaped = ($line =~ s/\\\\/\01/g);
+ $escaped |= ($line =~ s/\\"/\02/g);
+
+ ## Un-escape all other characters
+ $line =~ s/\\(.)/$1/g;
+
+ ## Remove any non-escaped double quotes
+ $line =~ s/"//g;
+
+ ## Put the escaped double quotes and backslashes back in
+ if ($escaped) {
+ $line =~ s/\02/"/g;
+ $line =~ s/\01/\\/g;
+ }
+
+ return $line;
+}
+
+
+sub create_array {
+ my($self, $line) = @_;
+ my @array;
+
+ ## Replace all escaped double and single quotes with special characters
+ my $escaped = ($line =~ s/\\\"/\01/g);
+ $escaped |= ($line =~ s/\\\'/\02/g);
+ $escaped |= ($line =~ s/\\ /\03/g);
+ $escaped |= ($line =~ s/\\\t/\04/g);
+
+ foreach my $part (grep(!/^\s*$/,
+ split(/(\"[^\"]+\"|\'[^\']+\'|\s+)/, $line))) {
+ ## Remove enclosing double and single quotes
+ $part =~ s/^"(.*)"$/$1/;
+ $part =~ s/^'(.*)'$/$1/;
+
+ ## Put any escaped double or single quotes back into the string.
+ if ($escaped) {
+ $part =~ s/\01/\"/g;
+ $part =~ s/\02/\'/g;
+ $part =~ s/\03/ /g;
+ $part =~ s/\04/\t/g;
+ }
+
+ ## Push it onto the array
+ push(@array, $part);
+ }
+
+ return \@array;
+}
+
+
+sub crlf {
+ #my $self = shift;
+ return "\n";
+}
+
+
+sub windows_crlf {
+ ## Windows, OS/2 and cygwin require a carriage return and line feed.
+ ## However, at some point cygwin changed the way it does output and can
+ ## be controled through an environment variable.
+ return ($^O eq 'MSWin32' || $^O eq 'os2' ||
+ ($^O eq 'cygwin' &&
+ ($] < 5.008 || (defined $ENV{PERLIO} && $ENV{PERLIO} eq 'crlf'))) ?
+ "\n" : "\r\n");
+}
+
+
+sub resolve_alias {
+ #my $self = shift;
+ #my $name = shift;
+ return $_[1];
+}
+
+sub fgrep {
+ my($str, $array) = @_;
+ foreach my $target (@$array) {
+ return 1 if ($str eq $target);
+ }
+ return undef;
+}
+
+1;