예제 #1
0
파일: Kakasi.cs 프로젝트: sasaji/NKakasi
        public bool SetArguments(string[] args)
        {
            int index = 0;

            for (; index < args.Length; index++)
            {
                if (args[index][0] != '-')
                {
                    break;
                }
                int length = args[index].Length;
                if (length < 2)
                {
                    return(false);
                }
                CharacterSet characterSet = CharacterSet.UNKNOWN;
                Encoding     encoding     = null;
                string       typeString   = null;
                switch (args[index][1])
                {
                case 'J':
                    if (length < 3)
                    {
                        return(false);
                    }
                    switch (args[index][2])
                    {
                    case 'H':
                        characterSet = CharacterSet.HIRAGANA;
                        break;

                    case 'K':
                        characterSet = CharacterSet.KATAKANA;
                        break;

                    case 'k':
                        characterSet = CharacterSet.HALFKANA;
                        break;

                    case 'a':
                        characterSet = CharacterSet.ASCII;
                        break;

                    default:
                        return(false);
                    }
                    SetupKanjiConverter(characterSet);
                    break;

                case 'H':
                    if (length < 3)
                    {
                        return(false);
                    }
                    switch (args[index][2])
                    {
                    case 'K':
                        characterSet = CharacterSet.KATAKANA;
                        break;

                    case 'a':
                        characterSet = CharacterSet.ASCII;
                        break;

                    default:
                        return(false);
                    }
                    SetupHiraganaConverter(characterSet);
                    break;

                case 'K':
                    if (length < 3)
                    {
                        return(false);
                    }
                    switch (args[index][2])
                    {
                    case 'H':
                        characterSet = CharacterSet.HIRAGANA;
                        break;

                    case 'a':
                        characterSet = CharacterSet.ASCII;
                        break;

                    default:
                        return(false);
                    }
                    SetupKatakanaConverter(characterSet);
                    break;

                case 'i':
                    if (length > 2)
                    {
                        encoding = Encoding.GetEncoding(args[index].Substring(2));
                    }
                    else if (++index < args.Length)
                    {
                        encoding = Encoding.GetEncoding(args[index]);
                    }
                    else
                    {
                        return(false);
                    }
                    input.SetReader(new StreamReader(Console.OpenStandardInput(), encoding));
                    break;

                case 'o':
                    if (length > 2)
                    {
                        encoding = Encoding.GetEncoding(args[index].Substring(2));
                    }
                    else if (++index < args.Length)
                    {
                        encoding = Encoding.GetEncoding(args[index]);
                    }
                    else
                    {
                        return(false);
                    }
                    output.SetWriter(new StreamWriter(Console.OpenStandardOutput(), encoding));
                    break;

                case 'p':
                    HeikiMode = true;
                    break;

                case 'f':
                    FuriganaMode = true;
                    break;

                case 'c':
                    input.SpaceEatMode = true;
                    break;

                case 's':
                    output.SplitMode = true;
                    break;

                case 'b':
                    output.AutoFlushMode = false;
                    break;

                case 'r':
                    if (length > 2)
                    {
                        typeString = args[index].Substring(2);
                    }
                    else if (++index < args.Length)
                    {
                        typeString = args[index];
                    }
                    else
                    {
                        return(false);
                    }
                    if ("hepburn".Equals(typeString, StringComparison.CurrentCultureIgnoreCase))
                    {
                        RomajiType = RomanConversionType.HEPBURN;
                    }
                    else if ("kunrei".Equals(typeString, StringComparison.CurrentCultureIgnoreCase))
                    {
                        RomajiType = RomanConversionType.KUNREI;
                    }
                    else
                    {
                        return(false);
                    }
                    break;

                case 'C':
                    RomajiCapitalizeMode = true;
                    break;

                case 'U':
                    RomajiUpperCaseMode = true;
                    break;

                case 'w':
                    WakachigakiMode = true;
                    break;

                default:
                    return(false);
                }
            }
            for (; index < args.Length; index++)
            {
                kanwaDictionary.Load(args[index]);
            }
            return(true);
        }