CK.Keyboard.KeyboardContext.SplitMultiMode C# (CSharp) Method

SplitMultiMode() static private method

static private SplitMultiMode ( string s, int &count ) : string[]
s string
count int
return string[]
        static string[] SplitMultiMode( string s, out int count )
        {
            s = _canonize.Replace( s.Trim(), "+" );
            string[] modes = s.Split( '+' );
            count = modes.Length;
            if ( count == 0 ) return Util.EmptyStringArray;
            int i = modes[0].Length == 0 ? 1 : 0;
            if ( modes[count - 1].Length == 0 ) count = count - 1 - i;
            else count = count - i;
            if ( count != modes.Length )
            {
                if ( count <= 0 ) return Util.EmptyStringArray;
                string[] m = new string[count];
                Array.Copy( modes, i, m, 0, count );
                modes = m;
            }
            // Sort if necessary (more than one atomic mode).
            if ( count > 1 )
            {
                Array.Sort( modes, StringComparer.Ordinal );
                // And removes duplicates. Since this occur very rarely
                // and that count is small we use a O(n) process that shifts
                // the modes array.
                i = count - 1;
                string last = modes[i];
                while ( --i >= 0 )
                {
                    Debug.Assert( last.Length > 0, "There is no empty strings." );
                    string cur = modes[i];
                    if ( StringComparer.Ordinal.Equals( cur, last ) )
                    {
                        int delta = (--count) - i - 1;
                        if ( delta > 0 )
                        {
                            Array.Copy( modes, i + 2, modes, i + 1, delta );
                        }
                    }
                    last = cur;
                }
            }
            return modes;
        }