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()}"); } } } }
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, }; }