示例#1
0
        protected override void BuildPatterns(IGroupManager g, IPatternBuilder p, dynamic c)
        {
            g.Define("open").AppendOrCreate(new[] { "打開", "開" });
            g.Define("close").AppendOrCreate(new[] { "關上", "關" });
            g.Define("door").AppendOrCreate(new[] { "門", "房間門", "房門" });
            g.Define("light").AppendOrCreate(new[] { "燈", "檯燈" });

            p.Build(g["open"], g["door"]).OnInvoke(score =>
            {
                Debug.WriteLine("門的狀態是: " + (this._doorState ? "開著的" : "關著的"));
                // 開門
                if (!this._doorState)
                {
                    this._doorState = !this._doorState;
                    return(Moods.Happy, "已經開好門囉 <3");
                }
                else
                {
                    return new Response[]
                    {
                        (Moods.Sad, "可是門本來就是開的欸 QAQ"),
                        (Moods.Normal, "喔是喔,不過就是一扇門,早就開好了"),
                        (Moods.Sad, "可是門本來就是開的欸 QAQ"),
                    }
                }
                .RandomTakeOne();
            });
示例#2
0
        protected override void BuildPatterns(IGroupManager g, IPatternBuilder p, dynamic config, dynamic session)
        {
            var open = g.Define("open");

            open.AppendOrCreate(new[] { "打開", "開啟" });

            var facebook = g.Define("facebook");

            facebook.AppendOrCreate(new[] { "臉書", "facebook", "fb" });

            p.Build(open, facebook).OnInvoke(this.OnInvoke);
        }
示例#3
0
        protected override void BuildPatterns(IGroupManager g, IPatternBuilder p, dynamic config, dynamic session)
        {
            g.Define("pause").AppendOrCreate(new[] { "暫停" });
            g.Define("resume").AppendOrCreate(new[] { "繼續" });
            g.Define("play").AppendOrCreate(new[] { "播放" });

            g.Define("next").AppendOrCreate(new[] { "下一首" });
            g.Define("previous").AppendOrCreate(new[] { "上一首" });
            g.Define("song").AppendOrCreate(new[] { "歌", "歌曲", "曲目", "樂曲", "音樂" });

            Invoke pause = m =>
            {
                Task.WaitAll(this.CheckToken());

                var er = this._api.PausePlayback();
                if (er.HasError())
                {
                    return(Moods.Sad, er.Error.Message);
                }
示例#4
0
        public QilNode Parse(XPathScanner scanner, IPatternBuilder ptrnBuilder)
        {
            Debug.Assert(this.scanner == null && this.ptrnBuilder == null);
            Debug.Assert(scanner != null && ptrnBuilder != null);
            QilNode result = null;

            ptrnBuilder.StartBuild();
            try {
                this.scanner     = scanner;
                this.ptrnBuilder = ptrnBuilder;
                result           = this.ParsePattern();
                this.scanner.CheckToken(LexKind.Eof);
            } finally {
                result = ptrnBuilder.EndBuild(result);
#if DEBUG
                this.ptrnBuilder = null;
                this.scanner     = null;
#endif
            }
            return(result);
        }
示例#5
0
 /// <summary>
 /// 建立模式規則。
 /// </summary>
 /// <param name="g"></param>
 /// <param name="p"></param>
 /// <param name="config"></param>
 protected abstract void BuildPatterns(IGroupManager g, IPatternBuilder p, dynamic config, dynamic session);
示例#6
0
 /// <summary>
 /// Defines a placeholder.
 /// </summary>
 public static IPatternCapture Any(this IPatternBuilder builder) => null;
示例#7
0
 /// <summary>
 /// Defines a variable capture template.
 /// </summary>
 public static IPatternCapture Var(this IPatternBuilder builder, string name) => null;
示例#8
0
 /// <summary>
 /// Defines an array / sequence template.
 /// </summary>
 public static object Array(this IPatternBuilder builder, params object[] elems) => null;
示例#9
0
        private static void ImplementEvent(MemberInfo info, MemberMetadata metadata, IPatternBuilder builder)
        {
            var eventInfo = (EventInfo)info;

            builder.AppendEvent(eventInfo, metadata);
        }
示例#10
0
        private static void ImplementProperty(MemberInfo info, MemberMetadata metadata, IPatternBuilder builder)
        {
            var propertyInfo = (PropertyInfo)info;

            if (propertyInfo.Name == "Item" && propertyInfo.GetIndexParameters().Length != 0)
            {
                builder.AppendItemProperty(propertyInfo, metadata);
            }
            else
            {
                builder.AppendProperty(propertyInfo, metadata);
            }
        }
示例#11
0
        private static void ImplementMethod(MemberInfo info, MemberMetadata metadata, IPatternBuilder builder)
        {
            var methodInfo = (MethodInfo)info;

            if (methodInfo.IsSpecialName)
            {
                return;
            }
            if (metadata.Name == "Finalize" && methodInfo.IsVirtual)
            {
                return;                                                   // Finalize is special: do not override it. Use a destructor instead.
            }
            builder.AppendMethod(methodInfo, metadata);
        }