Пример #1
0
        private void ProcessState(int st, string nodeText, bool inString, ref FilterEditorState state, ref int startNodeName, ref int startAtt, int i)
        {
            switch (state)
            {
            case FilterEditorState.BeforeNodeName:
                if (!char.IsWhiteSpace(nodeText, i))
                {
                    startNodeName = i;
                    state         = FilterEditorState.InNodeName;
                }

                break;

            case FilterEditorState.InNodeName:
                if (char.IsWhiteSpace(nodeText, i))
                {
                    txtFilter.Select(startNodeName + st, i - startNodeName + 1);
                    txtFilter.SelectionColor = HcNode;
                    state = FilterEditorState.AfterNodeName;
                }

                break;

            case FilterEditorState.AfterNodeName:
                if (!char.IsWhiteSpace(nodeText, i))
                {
                    startAtt = i;
                    state    = FilterEditorState.InAttribute;
                }

                break;

            case FilterEditorState.InAttribute:
                if (char.IsWhiteSpace(nodeText, i) || nodeText[i] == '=')
                {
                    txtFilter.Select(startAtt + st, i - startAtt + 1);
                    txtFilter.SelectionColor = HcAttribute;
                    state = FilterEditorState.InString;
                }

                break;

            case FilterEditorState.InString:
                if (nodeText[i] == '"' && !inString)
                {
                    state = FilterEditorState.AfterNodeName;
                }

                break;
            }
        }
Пример #2
0
        private void HighlightRrt()
        {
            var selStart  = txtFilter.SelectionStart;
            var selLength = txtFilter.SelectionLength;

            int k = 0;

            string str = txtFilter.Text;

            int st     = 0;
            int en     = 0;
            int lasten = -1;

            while (k < str.Length)
            {
                st = str.IndexOf('<', k);

                if (st < 0)
                {
                    break;
                }

                if (lasten > 0)
                {
                    txtFilter.Select(lasten + 1, st - lasten - 1);
                    txtFilter.SelectionColor = HcInnerText;
                }

                en = str.IndexOf('>', st + 1);
                if (en < 0)
                {
                    break;
                }

                k      = en + 1;
                lasten = en;

                if (str[st + 1] == '!')
                {
                    txtFilter.Select(st + 1, en - st - 1);
                    txtFilter.SelectionColor = HcComment;
                    continue;
                }

                string nodeText = str.Substring(st + 1, en - st - 1);

                bool inString = false;

                int lastSt = -1;
                FilterEditorState state = FilterEditorState.BeforeNodeName;

                int startNodeName = 0, startAtt = 0;
                ProcessEachNodeText(st, nodeText, ref inString, ref lastSt, ref state, ref startNodeName, ref startAtt);

                if (state == FilterEditorState.InNodeName)
                {
                    txtFilter.Select(st + 1, nodeText.Length);
                    txtFilter.SelectionColor = HcNode;
                }
            }

            // reset selection
            txtFilter.Select(selStart, selLength);
        }
Пример #3
0
        private void ProcessEachNodeText(int st, string nodeText, ref bool inString, ref int lastSt, ref FilterEditorState state, ref int startNodeName, ref int startAtt)
        {
            for (int i = 0; i < nodeText.Length; ++i)
            {
                if (nodeText[i] == '"')
                {
                    inString = !inString;
                }

                if (inString && nodeText[i] == '"')
                {
                    lastSt = i;
                }
                else if (nodeText[i] == '"')
                {
                    txtFilter.Select(lastSt + st + 2, i - lastSt - 1);
                    txtFilter.SelectionColor = HcString;
                }

                ProcessState(st, nodeText, inString, ref state, ref startNodeName, ref startAtt, i);
            }
        }