Example #1
0
        public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }
            StringBuilder stringBuilder = new StringBuilder();

            StringUtils.SnakeCaseState snakeCaseState = StringUtils.SnakeCaseState.Start;
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == ' ')
                {
                    if (snakeCaseState != StringUtils.SnakeCaseState.Start)
                    {
                        snakeCaseState = StringUtils.SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(s[i]))
                {
                    switch (snakeCaseState)
                    {
                    case StringUtils.SnakeCaseState.Lower:
                    case StringUtils.SnakeCaseState.NewWord:
                    {
                        stringBuilder.Append('\u005F');
                        break;
                    }

                    case StringUtils.SnakeCaseState.Upper:
                    {
                        if (!(i > 0 & i + 1 < s.Length))
                        {
                            break;
                        }
                        char chr = s[i + 1];
                        if (char.IsUpper(chr) || chr == '\u005F')
                        {
                            break;
                        }
                        stringBuilder.Append('\u005F');
                        break;
                    }
                    }
                    char lower = char.ToLower(s[i], CultureInfo.InvariantCulture);
                    stringBuilder.Append(lower);
                    snakeCaseState = StringUtils.SnakeCaseState.Upper;
                }
                else if (s[i] != '\u005F')
                {
                    if (snakeCaseState == StringUtils.SnakeCaseState.NewWord)
                    {
                        stringBuilder.Append('\u005F');
                    }
                    stringBuilder.Append(s[i]);
                    snakeCaseState = StringUtils.SnakeCaseState.Lower;
                }
                else
                {
                    stringBuilder.Append('\u005F');
                    snakeCaseState = StringUtils.SnakeCaseState.Start;
                }
            }
            return(stringBuilder.ToString());
        }
Example #2
0
        public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }
            StringBuilder stringBuilder = new StringBuilder();

            StringUtils.SnakeCaseState snakeCaseState = StringUtils.SnakeCaseState.Start;
            for (int index = 0; index < s.Length; ++index)
            {
                if (s[index] == ' ')
                {
                    if (snakeCaseState != StringUtils.SnakeCaseState.Start)
                    {
                        snakeCaseState = StringUtils.SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(s[index]))
                {
                    switch (snakeCaseState)
                    {
                    case StringUtils.SnakeCaseState.Lower:
                    case StringUtils.SnakeCaseState.NewWord:
                        stringBuilder.Append('_');
                        break;

                    case StringUtils.SnakeCaseState.Upper:
                        bool flag = index + 1 < s.Length;
                        if (index > 0 & flag)
                        {
                            char c = s[index + 1];
                            if (!char.IsUpper(c) && c != '_')
                            {
                                stringBuilder.Append('_');
                                break;
                            }

                            break;
                        }

                        break;
                    }

                    char lower = char.ToLower(s[index], CultureInfo.InvariantCulture);
                    stringBuilder.Append(lower);
                    snakeCaseState = StringUtils.SnakeCaseState.Upper;
                }
                else if (s[index] == '_')
                {
                    stringBuilder.Append('_');
                    snakeCaseState = StringUtils.SnakeCaseState.Start;
                }
                else
                {
                    if (snakeCaseState == StringUtils.SnakeCaseState.NewWord)
                    {
                        stringBuilder.Append('_');
                    }
                    stringBuilder.Append(s[index]);
                    snakeCaseState = StringUtils.SnakeCaseState.Lower;
                }
            }

            return(stringBuilder.ToString());
        }