public void Run()
		{
			Engine.Initialize("Selector_Basic", 640, 480, new EngineOption());

			var selector = new SimpleSelector<int>();				// Selectorクラスを作成する。
			selector.ItemSpan = new Vector2DF(0, 40);				// 選択肢オブジェクトの位置同士の間のベクトル
			selector.Cursor.Texture = Engine.Graphics.CreateTexture2D("Data/Selector/ListCursor.png");	// カーソルのテクスチャを設定
			selector.BindKey(Keys.Down, Keys.Up, Keys.Z, Keys.X);	// 操作方法を設定
			Engine.AddObject2D(selector);							// Altseedのシステムに追加

			// 選択肢オブジェクトを作成する
			var font = Engine.Graphics.CreateDynamicFont("", 28, new Color(255, 0, 0), 0, new Color(255, 255, 255));
			for (int i = 0; i < 9; i++)
			{
				var obj = new TextObject2D
				{
					Font = font,
					Text = $"選択肢{i}"
				};
				selector.AddChoice(i, obj);
			}
			
			// メインループ
			while(Engine.DoEvents())
			{
				Engine.Update();
				Recorder.TakeScreenShot("Selector_Basic", 20);
			}
			
			Engine.Terminate();
		}
Example #2
0
            public override ISelector Produce()
            {
                var sel = _nested.ToPool();

                if (sel == null)
                {
                    return(null);
                }

                return(SimpleSelector.PseudoClass(el => sel.Match(el), String.Concat(PseudoClassNames.Matches, "(", sel.Text, ")")));
            }
Example #3
0
            public override ISelector Produce()
            {
                var sel = _nested.ToPool();

                if (sel == null)
                {
                    return(null);
                }

                return(SimpleSelector.PseudoClass(el => el.ChildNodes.QuerySelector(sel) != null, String.Concat(PseudoClassNames.Has, "(", sel.Text, ")")));
            }
Example #4
0
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }

                var code = String.Concat(PseudoClassNames.Dir, "(", value, ")");

                return(SimpleSelector.PseudoClass(el => el is IHtmlElement && ((IHtmlElement)el).Direction.Equals(value, StringComparison.OrdinalIgnoreCase), code));
            }
Example #5
0
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }

                var code = String.Concat(PseudoClassNames.Contains, "(", value, ")");

                return(SimpleSelector.PseudoClass(el => el.TextContent.Contains(value), code));
            }
Example #6
0
        /// <summary>
        /// Picks a simple selector from the stream of tokens.
        /// </summary>
        /// <param name="tokens">The stream of tokens to consider.</param>
        /// <returns>The created selector.</returns>
        public SimpleSelector GetSimpleSelector(IEnumerator <CssToken> tokens)
        {
            while (tokens.MoveNext())
            {
                switch (tokens.Current.Type)
                {
                //Begin of attribute [A]
                case CssTokenType.SquareBracketOpen:
                {
                    var sel = GetAttributeSelector(tokens);
                    if (sel != null)
                    {
                        return(sel);
                    }
                }
                break;

                //Begin of Pseudo :P
                case CssTokenType.Colon:
                {
                    var sel = GetPseudoSelector(tokens);
                    if (sel != null)
                    {
                        return(sel);
                    }
                }
                break;

                //Begin of ID #I
                case CssTokenType.Hash:
                    return(SimpleSelector.Id(((CssKeywordToken)tokens.Current).Data));

                //Begin of Type E
                case CssTokenType.Ident:
                    return(SimpleSelector.Type(((CssKeywordToken)tokens.Current).Data));

                //Various
                case CssTokenType.Delim:
                    if (((CssDelimToken)tokens.Current).Data == Specification.DOT && tokens.MoveNext() && tokens.Current.Type == CssTokenType.Ident)
                    {
                        return(SimpleSelector.Class(((CssKeywordToken)tokens.Current).Data));
                    }
                    break;

                //All others are being ignored
                case CssTokenType.Whitespace:
                case CssTokenType.Comma:
                default:
                    break;
                }
            }

            return(null);
        }
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }

                var code = PseudoClassNames.Contains.CssFunction(value);

                return(SimpleSelector.PseudoClass(el => el.TextContent.Contains(value), code));
            }
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }

                var code = String.Concat(PseudoClassNames.Dir, "(", value, ")");

                return(SimpleSelector.PseudoClass(el => el is IHtmlElement && value.Isi(((IHtmlElement)el).Direction), code));
            }
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }

                var code = PseudoClassNames.Lang.CssFunction(value);

                return(SimpleSelector.PseudoClass(el => el is IHtmlElement && ((IHtmlElement)el).Language.StartsWith(value, StringComparison.OrdinalIgnoreCase), code));
            }
        /// <summary>
        /// Creates or gets the associated CSS pseudo class selector.
        /// </summary>
        /// <param name="name">The name of the CSS pseudo class.</param>
        /// <returns>The associated selector.</returns>
        public ISelector Create(String name)
        {
            var selector = default(ISelector);

            if (selectors.TryGetValue(name, out selector))
            {
                return(selector);
            }

            return(SimpleSelector.PseudoClass(el => false, name));
        }
        /// <summary>
        /// Invoked once a colon has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        Boolean OnClass(CssToken token)
        {
            state = State.Data;

            if (token.Type == CssTokenType.Ident)
            {
                Insert(SimpleSelector.Class(token.Data));
                return(true);
            }

            return(false);
        }
            public override ISelector Produce()
            {
                var valid = _nested.IsValid;
                var sel   = _nested.ToPool();

                if (!valid)
                {
                    return(null);
                }

                return(SimpleSelector.PseudoClass(el => !sel.Match(el), String.Concat(PseudoClassNames.Not, "(", sel.Text, ")")));
            }
            public override ISelector Produce()
            {
                if (!valid || value == null)
                {
                    return(null);
                }


                var code = PseudoClassNames.Dir.CssFunction(value);

                return(SimpleSelector.PseudoClass(el => el is IHtmlElement && value.Isi(((IHtmlElement)el).Direction), code));
            }
Example #14
0
        /// <summary>
        /// General state.
        /// </summary>
        /// <param name="token">The token to examine.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        void OnData(CssToken token)
        {
            switch (token.Type)
            {
            //Begin of attribute [A]
            case CssTokenType.SquareBracketOpen:
                attrName  = null;
                attrValue = null;
                attrOp    = String.Empty;
                attrNs    = null;
                state     = State.Attribute;
                ready     = false;
                break;

            //Begin of Pseudo :P
            case CssTokenType.Colon:
                state = State.PseudoClass;
                ready = false;
                break;

            //Begin of ID #I
            case CssTokenType.Hash:
                Insert(SimpleSelector.Id(token.Data));
                ready = true;
                break;

            //Begin of Type E
            case CssTokenType.Ident:
                Insert(SimpleSelector.Type(token.Data));
                ready = true;
                break;

            //Whitespace could be significant
            case CssTokenType.Whitespace:
                Insert(CssCombinator.Descendent);
                break;

            //Various
            case CssTokenType.Delim:
                OnDelim(token);
                break;

            case CssTokenType.Comma:
                InsertOr();
                ready = false;
                break;

            default:
                valid = false;
                break;
            }
        }
Example #15
0
            public override ISelector Produce()
            {
                var valid = _selector.IsValid;
                var sel   = _selector.GetResult();

                if (valid)
                {
                    var code = PseudoClassNames.Matches.CssFunction(sel.Text);
                    return(SimpleSelector.PseudoClass(el => sel.Match(el), code));
                }

                return(null);
            }
Example #16
0
            public override ISelector Produce()
            {
                var valid = _nested.IsValid;
                var sel   = _nested.GetResult();

                if (valid)
                {
                    var code = PseudoClassNames.Has.CssFunction(sel.Text);
                    return(SimpleSelector.PseudoClass(el => el.ChildNodes.QuerySelector(sel) != null, code));
                }

                return(null);
            }
        /// <summary>
        /// Invoked once a square bracket has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        Boolean OnAttributeEnd(CssToken token)
        {
            if (token.Type == CssTokenType.Whitespace)
            {
                return(true);
            }

            state = State.Data;

            if (token.Type == CssTokenType.SquareBracketClose)
            {
                switch (attrOp)
                {
                case "=":
                    Insert(SimpleSelector.AttrMatch(attrName, attrValue));
                    break;

                case "~=":
                    Insert(SimpleSelector.AttrList(attrName, attrValue));
                    break;

                case "|=":
                    Insert(SimpleSelector.AttrHyphen(attrName, attrValue));
                    break;

                case "^=":
                    Insert(SimpleSelector.AttrBegins(attrName, attrValue));
                    break;

                case "$=":
                    Insert(SimpleSelector.AttrEnds(attrName, attrValue));
                    break;

                case "*=":
                    Insert(SimpleSelector.AttrContains(attrName, attrValue));
                    break;

                case "!=":
                    Insert(SimpleSelector.AttrNotMatch(attrName, attrValue));
                    break;

                default:
                    Insert(SimpleSelector.AttrAvailable(attrName));
                    break;
                }

                return(true);
            }

            return(false);
        }
Example #18
0
        public static void ShowDialog <T>(List <T> list, Action <T> onSelected = null)
        {
            var selector = new SimpleSelector <T>(list, onSelected);

            if (selector.SelectionTree.EnumerateTree().Count() == 1)
            {
                selector.SelectionTree.EnumerateTree().First().Select();
                selector.SelectionTree.Selection.ConfirmSelection();
            }
            else
            {
                selector.ShowInPopup(200);
            }
        }
Example #19
0
        /// <summary>
        /// Invoked once a colon has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        void OnClass(CssToken token)
        {
            state = State.Data;
            ready = true;

            if (token.Type == CssTokenType.Ident)
            {
                Insert(SimpleSelector.Class(token.Data));
            }
            else
            {
                valid = false;
            }
        }
            public override ISelector Produce()
            {
                var valid = _nested.IsValid;
                var sel   = _nested.ToPool();

                if (!valid)
                {
                    return(null);
                }

                var code = PseudoClassNames.Matches.CssFunction(sel.Text);

                return(SimpleSelector.PseudoClass(el => sel.Match(el), code));
            }
Example #21
0
        /// <summary>
        /// Invoked once a delimiter has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        void OnDelim(CssToken token)
        {
            switch (token.Data[0])
            {
            case Symbols.Comma:
                InsertOr();
                ready = false;
                break;

            case Symbols.GreaterThan:
                Insert(CssCombinator.Child);
                ready = false;
                break;

            case Symbols.Plus:
                Insert(CssCombinator.AdjacentSibling);
                ready = false;
                break;

            case Symbols.Tilde:
                Insert(CssCombinator.Sibling);
                ready = false;
                break;

            case Symbols.Asterisk:
                Insert(SimpleSelector.All);
                ready = true;
                break;

            case Symbols.Dot:
                state = State.Class;
                ready = false;
                break;

            case Symbols.Pipe:
                if (combinators.Count > 0 && combinators.Peek() == CssCombinator.Descendent)
                {
                    Insert(SimpleSelector.Type(String.Empty));
                }

                Insert(CssCombinator.Namespace);
                ready = false;
                break;

            default:
                valid = false;
                break;
            }
        }
        public void SimpleSelector_ParseFailure()
        {
            string[] tests = new string[]
            {
                " { color: blue }",
            };

            foreach (string test in tests)
            {
                ITextProvider  tp = new StringTextProvider(test);
                TokenStream    ts = Helpers.MakeTokenStream(tp);
                SimpleSelector s  = new SimpleSelector();
                Assert.IsFalse(s.Parse(new ItemFactory(tp, null), tp, ts));
            }
        }
Example #23
0
        private void BtnResore_Click(object sender, RoutedEventArgs e)
        {
            var delApp = DeletedAppList.SelectedItems;

            AppType appType   = null;
            bool    hasNoType = false;

            foreach (DeletedApp da in delApp)
            {
                if (da.DeletedFrom == null)
                {
                    hasNoType = true;
                    break;
                }
            }

            if (hasNoType)
            {
                var ss = new SimpleSelector(
                    _AppTypes,
                    AppTypes.SelectedItem,
                    "AppTypeName",
                    Strings.SELECT_APP_GROUP,
                    false);

                ss.Owner = this;
                if (ss.ShowDialog() ?? false)
                {
                    _Controller.RestoreApp(
                        _AppGroup,
                        new DeletedAppCollection(delApp),
                        _DeletedApps,
                        appType,
                        ss.NewName
                        );
                }

                return;
            }

            _Controller.RestoreApp(
                _AppGroup,
                new DeletedAppCollection(delApp),
                _DeletedApps,
                null,
                null
                );
        }
Example #24
0
        /// <summary>
        /// Picks a simple selector from the stream of tokens.
        /// </summary>
        /// <param name="tokens">The stream of tokens to consider.</param>
        public void PickSelector(IEnumerator <CssToken> tokens)
        {
            switch (tokens.Current.Type)
            {
            //Begin of attribute [A]
            case CssTokenType.SquareBracketOpen:
                OnAttribute(tokens);
                break;

            //Begin of Pseudo :P
            case CssTokenType.Colon:
                OnColon(tokens);
                break;

            //Begin of ID #I
            case CssTokenType.Hash:
                Insert(SimpleSelector.Id(((CssKeywordToken)tokens.Current).Data));
                break;

            //Begin of Type E
            case CssTokenType.Ident:
                Insert(SimpleSelector.Type(((CssKeywordToken)tokens.Current).Data));
                break;

            //Whitespace could be significant
            case CssTokenType.Whitespace:
                Insert(CssCombinator.Descendent);
                break;

            //Various
            case CssTokenType.Delim:
                OnDelim(tokens);
                break;

            case CssTokenType.Comma:
                InsertOr();
                break;

            default:
                if (!ignoreErrors)
                {
                    throw new DOMException(ErrorCode.SyntaxError);
                }
                break;
            }
        }
Example #25
0
        /// <summary>
        /// Invoked once a delimiter has been found in the token enumerator.
        /// </summary>
        /// <param name="tokens">The token source.</param>
        public void OnDelim(IEnumerator <CssToken> tokens)
        {
            var chr = ((CssDelimToken)tokens.Current).Data;

            switch (chr)
            {
            case Specification.COMMA:
                InsertOr();
                break;

            case Specification.GT:
                Insert(CssCombinator.Child);
                break;

            case Specification.PLUS:
                Insert(CssCombinator.AdjacentSibling);
                break;

            case Specification.TILDE:
                Insert(CssCombinator.Sibling);
                break;

            case Specification.ASTERISK:
                Insert(SimpleSelector.All);
                break;

            case Specification.DOT:
                if (tokens.MoveNext() && tokens.Current.Type == CssTokenType.Ident)
                {
                    var cls = (CssKeywordToken)tokens.Current;
                    Insert(SimpleSelector.Class(cls.Data));
                }
                else if (!ignoreErrors)
                {
                    throw new DOMException(ErrorCode.SyntaxError);
                }
                else
                {
                    return;
                }

                break;
            }
        }
        /// <summary>
        /// General state.
        /// </summary>
        /// <param name="token">The token to examine.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        Boolean OnData(CssToken token)
        {
            switch (token.Type)
            {
            //Begin of attribute [A]
            case CssTokenType.SquareBracketOpen:
                attrName  = null;
                attrValue = null;
                attrOp    = String.Empty;
                state     = State.Attribute;
                return(true);

            //Begin of Pseudo :P
            case CssTokenType.Colon:
                state = State.PseudoClass;
                return(true);

            //Begin of ID #I
            case CssTokenType.Hash:
                Insert(SimpleSelector.Id(token.Data));
                return(true);

            //Begin of Type E
            case CssTokenType.Ident:
                Insert(SimpleSelector.Type(token.Data));
                return(true);

            //Whitespace could be significant
            case CssTokenType.Whitespace:
                Insert(CssCombinator.Descendent);
                return(true);

            //Various
            case CssTokenType.Delim:
                return(OnDelim(token));

            case CssTokenType.Comma:
                InsertOr();
                return(true);
            }

            return(false);
        }
        string ExtractSimpleSelector(BaseSelector selector)
        {
            SimpleSelector simpleSelector = selector as SimpleSelector;

            if (simpleSelector != null)
            {
                return(selector.ToString());
            }

            AggregateSelectorList selectorList = selector as AggregateSelectorList;

            // Work around a strange parser issue where sometimes simple selectors
            // are wrapped inside SelectorList with no delimiter
            if (selectorList != null && selectorList.Delimiter == string.Empty)
            {
                return(selectorList.ToString());
            }

            return(string.Empty);
        }
        public ItemCheckResult CheckItem(ParseItem item, ICssCheckerContext context)
        {
            SimpleSelector sel = (SimpleSelector)item;

            if (!WESettings.GetBoolean(WESettings.Keys.ValidateStarSelector) || !sel.IsValid || context == null)
            {
                return(ItemCheckResult.Continue);
            }

            if (sel.Text == "*")
            {
                string errorMessage = string.Format(CultureInfo.InvariantCulture, Resources.PerformanceDontUseStarSelector);

                SimpleErrorTag tag = new SimpleErrorTag(sel, errorMessage);

                context.AddError(tag);
            }

            return(ItemCheckResult.Continue);
        }
        /// <summary>
        /// Invoked once a colon has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <returns>True if no error occurred, otherwise false.</returns>
        Boolean OnPseudoElement(CssToken token)
        {
            state = State.Data;

            if (token.Type == CssTokenType.Ident)
            {
                var data = token.Data;

                switch (data)
                {
                case pseudoElementBefore:
                    Insert(SimpleSelector.PseudoElement(MatchBefore, pseudoElementBefore));
                    return(true);

                case pseudoElementAfter:
                    Insert(SimpleSelector.PseudoElement(MatchAfter, pseudoElementAfter));
                    return(true);

                case pseudoElementSelection:
                    Insert(SimpleSelector.PseudoElement(el => true, pseudoElementSelection));
                    return(true);

                case pseudoElementFirstLine:
                    Insert(SimpleSelector.PseudoElement(MatchFirstLine, pseudoElementFirstLine));
                    return(true);

                case pseudoElementFirstLetter:
                    Insert(SimpleSelector.PseudoElement(MatchFirstLetter, pseudoElementFirstLetter));
                    return(true);

                default:
                    Insert(SimpleSelector.PseudoElement(el => false, data));
                    return(false);
                }
            }

            return(false);
        }
Example #30
0
            public SimpleSelector ParseSimpleSelector()
            {
                var selector = new SimpleSelector()
                {
                    TagName = null, Id = null, Classes = new List <string>()
                };

                while (!EOF())
                {
                    var c = NextChar();
                    if (c == '#')
                    {
                        ConsumeChar();
                        selector.Id = ParseIdentifier();
                    }
                    else if (c == '.')
                    {
                        ConsumeChar();
                        selector.Classes.Add(ParseIdentifier());
                    }
                    else if (c == '*')
                    {
                        selector.Id = "*";
                        selector.Classes.Add("*");
                        selector.TagName = "*";
                        ConsumeChar();
                    }
                    else if (ValidIdentifierChar(c))
                    {
                        selector.TagName = ParseIdentifier();
                    }
                    else
                    {
                        break;
                    }
                }
                return(selector);
            }
Example #31
0
        private string ExtractSimpleSelector(BaseSelector selector)
        {
            SimpleSelector simpleSelector = selector as SimpleSelector;
            string         result;

            if (simpleSelector != null)
            {
                result = selector.ToString();
            }
            else
            {
                AggregateSelectorList aggregateSelectorList = selector as AggregateSelectorList;
                if (aggregateSelectorList != null && aggregateSelectorList.Delimiter == string.Empty)
                {
                    result = aggregateSelectorList.ToString();
                }
                else
                {
                    result = string.Empty;
                }
            }
            return(result);
        }
Example #32
0
 public NotExpression(SimpleSelector inner)
 {
     Inner = inner;
 }
Example #33
0
        void simpleselector(out SimpleSelector ss)
        {
            ss = ss = new SimpleSelector {ElementName = ""};		// Build a C# Simple Selector
            string psd;
            Model.Attribute attribute;
            var parent = ss;
            string ident;

            if (StartOf(13)) {
            if (la.kind == 24) {
                Get();
                ss.ElementName += "-";
            }
            identity(out ident);
            ss.ElementName += ident;
            } else if (la.kind == 32) {
            Get();
            ss.ElementName = "*";
            } else if (la.kind == 33) {
            Get();
            ss.Combinator = Combinator.Namespace; ss.ElementName = "|";
            } else if (StartOf(14)) {
            if (la.kind == 34) {
                Get();
                if (la.kind == 24) {
                    Get();
                    ss.ID = "-";
                }
                identity(out ident);
                if (ss.ID == null) { ss.ID = ident; } else { ss.ID += ident; }
            } else if (la.kind == 35) {
                Get();
                ss.Class = "";
                if (la.kind == 24) {
                    Get();
                    ss.Class += "-";
                }
                identity(out ident);
                ss.Class += ident;
            } else if (la.kind == 36) {
                attrib(out attribute);
                ss.Attribute = attribute;
            } else {
                pseudo(out psd);
                ss.Pseudo = psd;
            }
            } else SynErr(57);
            while (StartOf(14)) {
            var child = new SimpleSelector();							// Now find optional child selectors
            if(t.col + t.val.Length < la.col){
            child.ElementName = "";
            }

            if (la.kind == 34) {
                Get();
                if (la.kind == 24) {
                    Get();
                    child.ID = "-";
                }
                identity(out ident);
                if (child.ID == null) { child.ID = ident; }
                else { child.ID += "-"; }
            } else if (la.kind == 35) {
                Get();
                child.Class = "";
                if (la.kind == 24) {
                    Get();
                    child.Class += "-";
                }
                identity(out ident);
                child.Class += ident;
            } else if (la.kind == 36) {
                attrib(out attribute);
                child.Attribute = attribute;
            } else {
                pseudo(out psd);
                child.Pseudo = psd;
            }
            parent.Child = child; parent = child;
            }
        }