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