Example #1
0
        public BlockPage Process(BlockPage page)
        {
            var result = new BlockPage();

            Block last_box = null;

            foreach (var block in page.AllBlocks)
            {
                if (((Block)block).FontSize <= CONSIDERED_VERY_SMALL_FONTSIZE)
                {
                    float boxSize = 8f;

                    var box = new BlockHidden()
                    {
                        X      = block.GetX() - boxSize,
                        H      = block.GetH() - boxSize,
                        Width  = block.GetWidth() + 2 * boxSize,
                        Height = block.GetHeight() + 2 * boxSize,
                        Text   = block.GetText()
                    };

                    if (last_box != null)
                    {
                        float lastH = last_box.GetH();
                        float curH  = box.GetH();

                        // sometimes the block is broken.. merge them
                        if (Math.Abs(lastH - curH) < SAME_LINE_SMALL_FONTSIZE)
                        {
                            // we dont expect to have last after the current
                            // add +width because sometimes it has difference (why?)
                            if (last_box.GetX() > box.GetX() + box.GetWidth())
                            {
                                PdfReaderException.AlwaysThrow("last_box.GetX() > box.GetX()+ box.GetWidth()");
                            }

                            last_box.Text += box.GetText();
                            box.Text       = "";
                        }
                    }

                    if (box.Text != "")
                    {
                        result.Add(box);
                        last_box = box;
                    }
                }
                else
                {
                    result.Add(block);
                }
            }

            return(result);
        }
 public CollisionMarioHiddenBlockTests()
     : base()
 {
     tangible1  = new Mario();
     tangible2  = new BlockHidden(null);
     collisions = new List <Tuple <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom> >()
     {
         Tuple.Create <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom>(
             new SIdleLeftBigMario((Mario)tangible1), new PhysicsBundle(40, 0, 0, 1), new SCoinIdle((Coin)tangible2), new PhysicsBundle(40, 5), WindowsGame2.Collider.CollisionFrom.Below),
         Tuple.Create <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom>(
             new SIdleLeftBigMario((Mario)tangible1), new PhysicsBundle(40, 5, 0, -1), new SCoinIdle((Coin)tangible2), new PhysicsBundle(40, 0), WindowsGame2.Collider.CollisionFrom.Above),
         Tuple.Create <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom>(
             new SIdleLeftBigMario((Mario)tangible1), new PhysicsBundle(40, 0, -1), new SCoinIdle((Coin)tangible2), new PhysicsBundle(45, 0), WindowsGame2.Collider.CollisionFrom.Left),
         Tuple.Create <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom>(
             new SIdleLeftBigMario((Mario)tangible1), new PhysicsBundle(40, 0, 1), new SCoinIdle((Coin)tangible2), new PhysicsBundle(45, 0), WindowsGame2.Collider.CollisionFrom.Right),
         Tuple.Create <ITangibleState, PhysicsBundle, ITangibleState, PhysicsBundle, Collider.CollisionFrom>(
             new SIdleLeftBigMario((Mario)tangible1), new PhysicsBundle(0, 0), new SCoinIdle((Coin)tangible2), new PhysicsBundle(40, 0), WindowsGame2.Collider.CollisionFrom.None),
     };
 }