Esempio n. 1
0
        // parse the command line options
        internal OptionState ParseOption(string option)
        {
            string arg = option.ToUpperInvariant();

            if (arg.StartsWith("OUT:", StringComparison.Ordinal))
            {
                outName = option.Substring(4);
                if (outName.Equals("-"))
                {
                    msgWrtr = Console.Error;
                }
            }
            else if (arg.StartsWith("FRAME:", StringComparison.Ordinal))
            {
                userFrame = arg.Substring(6);
            }
            else if (arg.Equals("HELP", StringComparison.Ordinal) || arg.Equals("?"))
            {
                return(OptionState.needUsage);
            }
            else if (arg.Equals("ERRORSTOCONSOLE", StringComparison.Ordinal))
            {
                errorsToConsole = true;
            }
            else if (arg.Contains("CODEPAGE") && (arg.Contains("HELP") || arg.Contains("?")))
            {
                return(OptionState.needCodepageHelp);
            }
            else if (arg.StartsWith("CODEPAGE:", StringComparison.Ordinal))
            {
                fallbackCodepage = CodePageHandling.GetCodePage(option);
            }
            else
            {
                bool negate = arg.StartsWith("NO", StringComparison.Ordinal);

                if (negate)
                {
                    arg = arg.Substring(2);
                }
                if (arg.Equals("CHECK", StringComparison.Ordinal))
                {
                    checkOnly = !negate;
                }
                else if (arg.StartsWith("CASEINSEN", StringComparison.Ordinal))
                {
                    caseAgnostic = !negate;
                }
                else if (arg.StartsWith("LIST", StringComparison.Ordinal))
                {
                    listing = !negate;
                }
                else if (arg.Equals("SUMMARY", StringComparison.Ordinal))
                {
                    summary = !negate;
                }
                else if (arg.Equals("STACK", StringComparison.Ordinal))
                {
                    stack = !negate;
                }
                else if (arg.Equals("MINIMIZE", StringComparison.Ordinal))
                {
                    minimize = !negate;
                }
                else if (arg.Equals("VERSION", StringComparison.Ordinal))
                {
                    emitVer = !negate;
                }
                else if (arg.Equals("PARSEONLY", StringComparison.Ordinal))
                {
                    parseOnly = !negate;
                }
                else if (arg.StartsWith("PERSISTBUFF", StringComparison.Ordinal))
                {
                    persistBuff = !negate;
                }
                else if (arg.Equals("PARSER", StringComparison.Ordinal))
                {
                    hasParser = !negate;
                }
                else if (arg.Equals("BABEL", StringComparison.Ordinal))
                {
                    babel = !negate;
                }
                else if (arg.Equals("FILES", StringComparison.Ordinal))
                {
                    files = !negate;
                }
                else if (arg.StartsWith("EMBEDBUFF", StringComparison.Ordinal))
                {
                    embedBuffers = !negate;
                }
                else if (arg.Equals("INFO", StringComparison.Ordinal))
                {
                    emitInfo = !negate;
                }
                else if (arg.Equals("UTF8DEFAULT", StringComparison.Ordinal)) // Deprecated, compatability only.
                {
                    if (negate)
                    {
                        fallbackCodepage = rawCP;
                    }
                    else
                    {
                        fallbackCodepage = utf8CP;
                    }
                }
                else if (arg.Equals("COMPRESSMAP", StringComparison.Ordinal))
                {
                    compressMap         = !negate;
                    compressMapExplicit = true;
                }
                else if (arg.Equals("COMPRESSNEXT", StringComparison.Ordinal))
                {
                    compressNext = !negate;
                    //compressNextExplicit = true;
                }
                else if (arg.Equals("COMPRESS", StringComparison.Ordinal))
                {
                    compressMap         = !negate;
                    compressNext        = !negate;
                    compressMapExplicit = true;
                    //compressNextExplicit = true;
                }
                else if (arg.Equals("SQUEEZE", StringComparison.Ordinal))
                {
                    // Compress both map and next-state
                    // but do not use two-level compression
                    // ==> trade time for space.
                    squeeze             = !negate;
                    compressMap         = !negate;
                    compressNext        = !negate;
                    compressMapExplicit = true;
                    //compressNextExplicit = true;
                }
                else if (arg.Equals("UNICODE", StringComparison.Ordinal))
                {
                    // Have to do some checks here. If an attempt is made to
                    // set (no)unicode after the alphabet size has been set
                    // it is a command line or inline option error.
                    int cardinality = (negate ? asciiCardinality : unicodeCardinality);
                    useUnicode = !negate;
                    if (targetSymCardinality == notSet || targetSymCardinality == cardinality)
                    {
                        targetSymCardinality = cardinality;
                    }
                    else
                    {
                        return(OptionState.alphabetLocked);
                    }
                    if (useUnicode)
                    {
                        charClasses = true;
                        if (!compressMapExplicit)
                        {
                            compressMap = true;
                        }
                    }
                }
                else if (arg.Equals("VERBOSE", StringComparison.Ordinal))
                {
                    verbose = !negate;
                    if (verbose)
                    {
                        emitVer = true;
                    }
                }
                else if (arg.Equals("CLASSES", StringComparison.Ordinal))
                {
                    if (negate && useUnicode)
                    {
                        return(OptionState.inconsistent);
                    }
                    charClasses = !negate;
                }
                else
                {
                    return(OptionState.errors);
                }
            }
            return(OptionState.clear);
        }
Esempio n. 2
0
 public Enumerator(Stream file, string codepage)
 {
     SetSource(file, CodePageHandling.GetCodePage(codepage));
 }