Beispiel #1
0
        internal static Position findBeginningOfFragment(IScintillaGateway scintillaGateway, Position start, Predicate <char> predicate)
        {
            for (int pos = start.Value; ; pos--)
            {
                if (pos == 0)
                {
                    if (predicate((char)scintillaGateway.GetCharAt(new Position(0))))
                    {
                        return(new Position(0));
                    }
                    else
                    {
                        return(new Position(1));
                    }
                }

                if (!predicate((char)scintillaGateway.GetCharAt(new Position(pos))))
                {
                    return(new Position(pos + 1));
                }
            }
        }
Beispiel #2
0
        internal static Tuple <string, Position, Position> extractHexFromCurrentPosition(IScintillaGateway scintillaGateway)
        {
            Position position = scintillaGateway.GetCurrentPos();
            int      ch       = scintillaGateway.GetCharAt(position);

            if (!isValidHex((char)ch))
            {
                MessageBox.Show("invalid hex character under cursor");
                return(null);
            }

            // scan backward
            Position positionOfHex = findBeginningOfFragment(scintillaGateway, position, isValidHex);

            // get hex from known start position until last valid character
            return(getFragmentStartingFrom(scintillaGateway, positionOfHex.Value, isValidHex));
        }
Beispiel #3
0
        internal static Tuple <string, Position, Position> extractBase64FromCurrentPosition(IScintillaGateway scintillaGateway)
        {
            int max = scintillaGateway.GetLength();

            Position position = scintillaGateway.GetCurrentPos();
            int      ch       = scintillaGateway.GetCharAt(position);

            if (!isValidBase64Character((char)ch))
            {
                MessageBox.Show("invalid base64 character under cursor");
                return(null);
            }

            // scan backward
            Position positionOfBase64 = findBeginningOfFragment(scintillaGateway, position, isValidBase64Character);

            // get base64 from known start position until last valid character
            return(getFragmentStartingFrom(scintillaGateway, positionOfBase64.Value, isValidBase64Character));
        }
Beispiel #4
0
        internal static Tuple <string, Position, Position> getFragmentStartingFrom(IScintillaGateway scintillaGateway, int start, Predicate <char> predicate)
        {
            int length = scintillaGateway.GetLength();

            int         lastValid = start;
            List <char> chars     = new List <char>();

            for (int pos = start; pos < length; pos++)
            {
                int ch = scintillaGateway.GetCharAt(new Position(pos));
                if (predicate((char)ch))
                {
                    chars.Add((char)ch);
                    lastValid = pos;
                }
                else
                {
                    break;
                }
            }

            return(new Tuple <string, Position, Position>(new string(chars.ToArray()), new Position(start), new Position(lastValid + 1)));
        }