public override void ExitFile(ArcaeaFileFormatParser.FileContext context)
 {
     foreach (var item in context.body().item())
     {
         IRawAffEvent @event = item.@event().value;
         if (@event != null)
         {
             if (@event is IRawAffItem)
             {
                 chart.items.Add(@event as IRawAffItem);
             }
             else
             {
                 chart.warning.Add($"第 {item.@event().Start.Line + lineOffset} 行第 {item.@event().Start.Column + 1} 列,不可作为物件使用的事件:{item.@event().GetText()}");
             }
         }
     }
 }
Exemple #2
0
        void GenTimingGroup(ArcaeaFileFormatParser.EventContext context)
        {
            RejectSubevents(context, "timinggroup");
            LimitValuesCount(context, "timinggroup", 1);
            List <IRawAffNestableItem> items           = new List <IRawAffNestableItem>();
            TimingGroupType?           timingGroupType = TimingGroupType.Normal;

            if (context.values().value().Length > 0)
            {
                var rawTimingGroupType = CheckValueType <RawAffWord>(context.values().value()[0], "arc", "arc 类型");
                timingGroupType = ParseWord(timingGroupTypes, rawTimingGroupType.data, context.values().value()[0], "arc", "arc 类型");
            }
            foreach (var item in context.segment().body().item())
            {
                IRawAffEvent @event = item.@event().value;
                if (!(@event is IRawAffItem))
                {
                    chart.warning.Add($"第 {item.@event().Start.Line + lineOffset} 行第 {item.@event().Start.Column + 1} 列,不可作为物件使用的事件:{item.@event().GetText()},此事件将被忽略");
                    continue;
                }
                IRawAffItem rawItem = @event as IRawAffItem;
                if (!(rawItem is IRawAffNestableItem))
                {
                    chart.warning.Add($"第 {item.Start.Line + lineOffset} 行第 {item.Start.Column + 1} 列,不可在 timinggroup 中嵌套使用的物件:{item.@event().GetText()},此物件将被忽略");
                    nonNestableItems.Add(rawItem);
                    continue;
                }
                items.Add(rawItem as IRawAffNestableItem);
            }
            if (timingGroupType == null)
            {
                return;
            }
            context.value = new RawAffTimingGroup()
            {
                Items = items,
                Type  = timingGroupType.Value,
            };
        }