package edu.isi.bmkeg.lapdf.model.RTree; import edu.isi.bmkeg.lapdf.model.Block; import edu.isi.bmkeg.lapdf.model.PageBlock; import edu.isi.bmkeg.lapdf.model.WordBlock; public class RTWordBlock extends RTSpatialEntity implements WordBlock { private String font; private String fontStyle; private String word; private int spaceWidth; private Block container; private String type = Block.TYPE_UNCLASSIFIED; public RTWordBlock(int x1, int y1, int x2, int y2, int spaceWidth, String font, String fontStyle, String word) { super(x1, y1, x2, y2); this.font = font; this.fontStyle = fontStyle; this.word = word; this.spaceWidth = spaceWidth; } @Override public String getFont() { return font; } @Override public String getFontStyle() { return fontStyle; } @Override public String getWord() { return this.word; } @Override public int getSpaceWidth() { return this.spaceWidth; } @Override public Block getContainer() { return container; } @Override public String readLeftRightMedLine() { PageBlock parent = (PageBlock) this.getContainer().getContainer(); int median = parent.getMedian(); int X1 = this.getX1(); int width = this.getWidth(); int averageWordHeightForTheDocument = parent.getDocument().readMostPopularWordHeight(); // Conditions for left if (X1 < median && (X1 + width) < (median + averageWordHeightForTheDocument)) return LEFT; // conditions for right if (X1 > median) return RIGHT; // conditions for medline int left = median - X1; int right = X1 + width - median; /* * Doubtful code if(right <= 0) return LEFT; */ double leftIsToRight = (double) left / (double) right; double rightIsToLeft = (double) right / (double) left; if (leftIsToRight < 0.05) return RIGHT; else if (rightIsToLeft < 0.05) return LEFT; else return MIDLINE; } public boolean isFlush(String condition, int value) { PageBlock parent = (PageBlock) this.getContainer(); int median = parent.getMedian(); String leftRightMidline = this.readLeftRightMedLine(); int x1 = this.getX1(); int x2 = this.getX2(); int marginX1 = parent.getMargin()[0]; int marginX2 = parent.getMargin()[3]; if (condition.equals(MIDLINE)) { if (leftRightMidline.equals(MIDLINE)) return false; else if (leftRightMidline.equals(LEFT) && Math.abs(x2 - median) < value) return true; else if (leftRightMidline.equals(RIGHT) && Math.abs(x1 - median) < value) return true; } else if (condition.equals(LEFT)) { if (leftRightMidline.equals(MIDLINE) && Math.abs(x1 - marginX1) < value) return true; else if (leftRightMidline.equals(LEFT) && Math.abs(x1 - marginX1) < value) return true; else if (leftRightMidline.equals(RIGHT)) return false; } else if (condition.equals(RIGHT)) { if (leftRightMidline.equals(MIDLINE) && Math.abs(x2 - marginX2) < value) return true; else if (leftRightMidline.equals(LEFT)) return false; else if (leftRightMidline.equals(RIGHT) && Math.abs(x2 - marginX2) < value) return true; } return false; } @Override public int getId() { return super.getId(); } @Override public void setContainer(Block block) { this.container = block; } @Override public String getType() { return type; } @Override public void setType(String type) { this.type = type; } }