예제 #1
0
        public override TranslationState VisitSplitPart(SplitPart part, TranslationState ctx)
        {
            if (part.Orientation == Orientation.Vertical)
            {
                var height = ctx.Rect.Height / part.Parts.Count;
                ctx.Result = part.Parts.Select(
                    (p, i) =>
                {
                    var rc = new RectangleF(ctx.Rect.Left, ctx.Rect.Top + i * height, ctx.Rect.Width, height);
                    return(p.Accept(this, new TranslationState {
                        Rect = rc
                    }).Result);
                }).Concat();
            }
            else
            {
                var width = ctx.Rect.Width / part.Parts.Count;
                ctx.Result = part.Parts.Select(
                    (p, i) =>
                {
                    var rc = new RectangleF(ctx.Rect.Left + i * width, ctx.Rect.Top, width, ctx.Rect.Height);
                    return(p.Accept(this, new TranslationState {
                        Rect = rc
                    }).Result);
                }).Concat();
            }

            return(ctx);
        }
예제 #2
0
 public override int VisitSplitPart(SplitPart part, int state)
 {
     // Aggregate the count over all subparts
     return(part.Parts.Aggregate(state, (count, p) =>
                                 // Count words in each part
                                 p.Accept(this, count)));
 }
예제 #3
0
 public abstract T VisitSplitPart(SplitPart part, T state);