コード例 #1
0
        private bool TryParseCheckCompoundPatternIntoCompoundPatterns(string parameterText, List <PatternEntry> entries)
        {
            var parameters = parameterText.SliceOnTabOrSpace();

            if (parameters.Length == 0)
            {
                Builder.LogWarning("Failed to parse compound pattern from: " + parameterText);
                return(false);
            }

            var         pattern    = parameters[0];
            StringSlice pattern2   = StringSlice.Null;
            StringSlice pattern3   = StringSlice.Null;
            var         condition  = default(FlagValue);
            var         condition2 = default(FlagValue);

            var slashIndex = pattern.IndexOf('/');

            if (slashIndex >= 0)
            {
                if (!TryParseFlag(pattern.Subslice(slashIndex + 1), out condition))
                {
                    Builder.LogWarning($"Failed to parse compound pattern 1 {pattern} from: {parameterText}");
                    return(false);
                }

                pattern = pattern.Subslice(0, slashIndex);
            }

            if (parameters.Length >= 2)
            {
                pattern2   = parameters[1];
                slashIndex = pattern2.IndexOf('/');
                if (slashIndex >= 0)
                {
                    if (!TryParseFlag(pattern2.Subslice(slashIndex + 1), out condition2))
                    {
                        Builder.LogWarning($"Failed to parse compound pattern 2 {pattern2} from: {parameterText}");
                        return(false);
                    }

                    pattern2 = pattern2.Subslice(0, slashIndex);
                }

                if (parameters.Length >= 3)
                {
                    pattern3 = parameters[2];
                    Builder.EnableOptions(AffixConfigOptions.SimplifiedCompound);
                }
            }

            entries.Add(new PatternEntry(
                            Builder.Dedup(pattern.ToString()),
                            Builder.Dedup(pattern2.ToString()),
                            Builder.Dedup(pattern3.ToString()),
                            condition,
                            condition2));

            return(true);
        }