예제 #1
0
파일: AskMenu.cs 프로젝트: marius310/bvcms
 public void Output(StringBuilder sb, AskMenu ask)
 {
     if (ask.list.Count == 0)
     {
         return;
     }
     AddValueNoCk(0, sb, "MenuItems", ask.Label);
     foreach (var i in ask.list)
     {
         AddValueCk(1, sb, i.Description);
         AddValueCk(2, sb, "SmallGroup", i.SmallGroup);
         AddValueCk(2, sb, "Fee", i.Fee);
         AddValueCk(2, sb, "Limit", i.Limit);
         AddValueCk(2, sb, "Time", i.MeetingTime.ToString2("s"));
     }
     sb.AppendLine();
 }
예제 #2
0
파일: AskMenu.cs 프로젝트: marius310/bvcms
        public AskMenu ParseAskMenu()
        {
            var mi = new AskMenu();

            mi.Label = GetString("Menu");
            mi.list  = new List <AskMenu.MenuItem>();
            if (curr.indent == 0)
            {
                return(mi);
            }
            var startindent = curr.indent;

            while (curr.indent == startindent)
            {
                var m = new AskMenu.MenuItem();
                if (curr.kw != Parser.RegKeywords.None)
                {
                    throw GetException("unexpected line in MenuItem");
                }
                m.Description = GetLine();
                m.SmallGroup  = m.Description;
                if (curr.indent <= startindent)
                {
                    mi.list.Add(m);
                    continue;
                }
                var ind = curr.indent;
                while (curr.indent == ind)
                {
                    switch (curr.kw)
                    {
                    case Parser.RegKeywords.SmallGroup:
                        m.SmallGroup = GetString(m.Description);
                        break;

                    case Parser.RegKeywords.Fee:
                        m.Fee = GetDecimal();
                        break;

                    case Parser.RegKeywords.Limit:
                        m.Limit = GetNullInt();
                        break;

                    case Parser.RegKeywords.Time:
                        m.MeetingTime = GetDateTime();
                        break;

                    default:
                        throw GetException("unexpected line in MenuItem");
                    }
                }
                mi.list.Add(m);
            }
            var q = (from i in mi.list
                     group i by i.SmallGroup into g
                     where g.Count() > 1
                     select g.Key).ToList();

            if (q.Any())
            {
                throw GetException($"Duplicate SmallGroup in MenuItems: {string.Join(",", q)}");
            }
            return(mi);
        }