Example #1
0
        private char?PeekNextChar(CharEnumerator charSequence)
        {
            var clone   = (CharEnumerator)charSequence.Clone();
            var canMove = clone.MoveNext();

            return(canMove ? (char?)clone.Current : null);
        }
Example #2
0
        private int CountFormat(CharEnumerator format, int endchar)
        {
            format = (CharEnumerator)format.Clone();
            int count = 0;
            int level = 0;

            while (level > 0 || format.Current != endchar)
            {
                switch (format.Current)
                {
                case '\0':
                    /* Premature end */
                    throw new ApplicationException(
                              "Unmatched paren in format");

                case '(':
                case '[':
                case '{':
                    if (level == 0)
                    {
                        count++;
                    }
                    level++;
                    break;

                case ')':
                case ']':
                case '}':
                    level--;
                    break;

                case '#':
                case '&':
                case ',':
                case ':':
                case ' ':
                case '\t':
                    break;

                default:
                    if (level == 0)
                    {
                        count++;
                    }
                    break;
                }
                format.MoveNext();
            }
            return(count);
        }
Example #3
0
        //生成Token表并返回
        public List <Token> TokenHandle()
        {
            source += '\n';
            CharEnumerator pr = source.GetEnumerator();
            char           c;
            Token          token;
            Token          temp;

            pr.MoveNext();
            while (true)
            {
                c = pr.Current;
                while (c == ' ' || c == '\n' || c == '\t')
                {
                    if (pr.MoveNext())
                    {
                        c = pr.Current;
                    }
                    else
                    {
                        return(tokenList);
                    }
                }
                token = new Token();
                foreach (var getToken in typeHandleList)
                {
                    temp = getToken((CharEnumerator)pr.Clone());
                    if (temp.Length > token.Length)
                    {
                        token = temp;
                    }
                }
                if (token.Length > 0)
                {
                    pr = token.p;
                    if (token.isLast)
                    {
                        tokenList.Add(token);
                        return(tokenList);
                    }
                }
                else
                {
                    token.type  = "Illegal Character";
                    token.value = pr.Current.ToString();
                    pr.MoveNext();
                }
                tokenList.Add(token);
            }
        }
Example #4
0
        private void ConvertTuple(CharEnumerator format, int flags)
        {
            int level      = 0;
            int n          = 0;
            var formatsave = format;

            format = (CharEnumerator)format.Clone();

            for (;;)
            {
                var c = PopChar(format);
                if (c == '(')
                {
                    if (level == 0)
                    {
                        n++;
                    }
                    level++;
                }
                else if (c == ')')
                {
                    if (level == 0)
                    {
                        break;
                    }
                    level--;
                }
                else if (c == ':' || c == ';' || c == '\0')
                {
                    break;
                }
                else if (level == 0 && char.IsLetter(c))
                {
                    n++;
                }
            }

            format = formatsave;
            for (int i = 0; i < n; i++)
            {
                ConvertItem(format, flags);
            }
        }
Example #5
0
        private static bool Like(CharEnumerator inputEnumerator, CharEnumerator maskEnumerator)
        {
            while (maskEnumerator.MoveNext())
            {
                switch (maskEnumerator.Current)
                {
                case '?':
                    if (!inputEnumerator.MoveNext())
                    {
                        return(false);
                    }

                    break;

                case '*':
                    do
                    {
                        var inputTryAhead = (CharEnumerator)inputEnumerator.Clone();
                        var maskTryAhead  = (CharEnumerator)maskEnumerator.Clone();
                        if (Like(inputTryAhead, maskTryAhead))
                        {
                            return(true);
                        }
                    } while (inputEnumerator.MoveNext());

                    return(false);

                case '\\':     // escape
                    maskEnumerator.MoveNext();
                    goto default;

                default:
                    if (!inputEnumerator.MoveNext() || inputEnumerator.Current != maskEnumerator.Current)
                    {
                        return(false);
                    }

                    break;
                }
            }

            return(!inputEnumerator.MoveNext());
        }
Example #6
0
        /// <summary>
        /// This method strips hex encoded characters from the session
        /// name stored in the registry
        /// Based on the unmungestr() method in WINDOWS\WINSTORE.c
        /// from the PuTTY v0.60 src tree
        /// Support for different codepages has been added to attempt to
        /// match the PuTTY encoding
        /// </summary>
        /// <param name="key">The registry key name to convert</param>
        /// <returns>The display formatted session name</returns>
        private String convertSessionKeyToDisplay(string key)
        {
            CharEnumerator ce = key.GetEnumerator();
            StringBuilder  sb = new StringBuilder(key.Length);

            while (ce.MoveNext())
            {
                if (ce.Current == '%')
                {
                    CharEnumerator clone  = (CharEnumerator)ce.Clone();
                    StringBuilder  hexVal = new StringBuilder(2);
                    if (clone.MoveNext())
                    {
                        hexVal.Append(clone.Current);
                    }
                    if (clone.MoveNext())
                    {
                        hexVal.Append(clone.Current);
                    }
                    if (hexVal.Length == 2)
                    {
                        Byte byteVal = Byte.Parse(hexVal.ToString(), System.Globalization.NumberStyles.HexNumber);
                        sb.Append(systemEncoding.GetString(new byte[] { byteVal }));
                        ce.MoveNext();
                        ce.MoveNext();
                    }
                    else
                    {
                        sb.Append(ce.Current);
                    }
                }
                else
                {
                    sb.Append(ce.Current);
                }
            }
            return(sb.ToString());
        }