/// <summary>
        /// It is public for now because I need it unit tested...  This code is pretty fagile.
        /// I am looking to get XML output rather than parsing the cmd lines one at a time...
        /// </summary>
        /// <param name="error"></param>
        public void ParseError(string error)
        {
            if (error.Length == 0)
            {
                // We are done...  Set the state back to running so that we can detect new errors/warnings.
                CompilerState = ECompileState.Running;
                return;
            }

            int start = 0, end = 0;

            if (CompilerState == ECompileState.Running)
            {
                //
                // Check for errors...
                //
                if ((start = error.IndexOf(": ERROR - ")) != -1)
                {
                    string message = error.Substring(start + ": ERROR - ".Length);

                    end = start - 1; // Skip over ':'
                    start = error.LastIndexOf(':', end);
                    string line = error.Substring(start + 1, end - start);
                    string file = error.Substring(0, start);

                    Error e = new Error(file, message, Int32.Parse(line), -1, Error.ESeverity.High);
                    Errors.Add(e);
                    CompilerState = ECompileState.ProcessingError;
                }
                //
                // Check for warnings...
                //
                else if ((start = error.IndexOf(": WARNING - ")) != -1)
                {
                    string message = error.Substring(start + ": WARNING - ".Length);

                    end = start - 1; // Skip over ':'
                    start = error.LastIndexOf(':', end);
                    string line = error.Substring(start + 1, end - start);
                    string file = error.Substring(0, start);

                    Error e = new Error(file, message, Int32.Parse(line), -1, Error.ESeverity.Low);
                    Warnings.Add(e);
                    CompilerState = ECompileState.ProcessingWarning;
                }
                else if (error.StartsWith(Errors.Count.ToString() + " error(s)") == false)
                {
                    Failures.Add(error);
                }
            }
            //
            // Little check sum that helps us determine if we have the right number of errors as
            // well as when we need to reset the state of the compiler
            //
            else if (error.StartsWith(Errors.Count.ToString() + " error(s)") == true)
            {
                // We are done...  Set the state back to running so that we can detect new errors/warnings.
                CompilerState = ECompileState.Running;
            }
            //
            // Process everything else...
            //
            else
            {
                switch (CompilerState)
                {
                    case ECompileState.ProcessingError:
                        {
                            if (error[error.Length - 1] == '^')
                                Errors.Last().CharNo = error.Length - 1;
                            else
                                Errors.Last().Line += error;
                            break;
                        }
                    case ECompileState.ProcessingWarning:
                        {
                            if (error[error.Length - 1] == '^')
                                Warnings.Last().CharNo = error.Length - 1;
                            else
                                Warnings.Last().Line += error;
                            break;
                        }
                    default:
                        {
                            Failures.Add(error);
                            break;
                        }
                }
            }
        }
        public Result Compile(CompilerOptions options)
        {
            OutputScript = String.Empty;
            Errors.Clear();
            Warnings.Clear();
            Failures.Clear();

            string command = CMDCompilerOptions.Instance.Configure(options);

            if (command != String.Empty)
            {
                var file = createConfigFile(command);
                CompilerState = ECompileState.Running;
                Java.Run("-jar \"" + CMDCompiler.Closure + "\"" + " --flagfile=\"" + file + "\"", compile_OutputDataReceived, compile_ErrorDataReceived);
                File.Delete(file);
                CompilerState = ECompileState.Finished;
            }

            return Result.fromCMD(this, options);;
        }