// pre: findLinesWidth carried out and elements sorted in ascending order public TextSegment getTopElementMatchingFontsizeAfterSorting() { TextSegment retVal = null; for (TextSegment s : items) { for (CompositeSegment<? extends TextSegment> l : foundLines) { if (l.getItems().contains(s)) { // if (s.getFontSize() == l.getFontSize()) if (Utils.within(s.getFontSize(), l.getFontSize(), s.getFontSize() * 0.1f)) return s; } } } return retVal; }
// pre: findLinesWidth carried out and elements sorted in ascending order public TextSegment getBottomElementMatchingFontsizeAfterSorting() { TextSegment retVal = null; for (int n = items.size() - 1; n >= 0; n--) { TextSegment s = items.get(n); for (CompositeSegment<? extends TextSegment> l : foundLines) { if (l.getItems().contains(s)) { // if (s.getFontSize() == l.getFontSize()) if (Utils.within(s.getFontSize(), l.getFontSize(), s.getFontSize() * 0.1f)) return s; } } } return retVal; }
protected void processLines() { if (foundLines.size() > 1) { // first find averages float avgX1 = 0.0f; float avgXcen = 0.0f; float avgX2 = 0.0f; float afs = 0.0f; float als = 0.0f; boolean clashingLines = false; CompositeSegment<? extends TextSegment> prevLine = null; for (CompositeSegment<? extends TextSegment> l : foundLines) { avgX1 += l.getX1(); avgXcen += l.getXmid(); avgX2 += l.getX2(); afs += l.getFontSize(); if (prevLine != null) { float lineSpacing = prevLine.getY1() - l.getY1(); als += lineSpacing; if (SegmentUtils.vertIntersect(prevLine, l.getYmid())) clashingLines = true; } prevLine = l; } avgX1 /= foundLines.size(); avgXcen /= foundLines.size(); avgX2 /= foundLines.size(); afs /= foundLines.size(); fontSize = afs; als /= (foundLines.size() - 1); // System.out.println("setting als to: " + als); // lineSpacing = als; lineSpacing = als / afs; // changed 30.10.10 // now, see if they are within allowed error boolean constantX1 = true, constantXcen = true, constantX2 = true, constantfs = true, constantls = true; float tolerance = afs * 0.5f; prevLine = null; for (CompositeSegment<? extends TextSegment> l : foundLines) { if (!Utils.within(l.getX1(), avgX1, tolerance)) constantX1 = false; if (!Utils.within(l.getXmid(), avgXcen, tolerance)) constantXcen = false; if (!Utils.within(l.getX2(), avgX2, tolerance)) constantX2 = false; if (!Utils.within(l.getFontSize(), afs, afs * 0.1f)) constantfs = false; if (prevLine != null) { float lineSpacing = prevLine.getY1() - l.getY1(); if (!Utils.within(lineSpacing, als, afs * 0.2f)) constantls = false; } prevLine = l; } if (constantX1 && constantX2) textAlignment = ALIGN_LCR; else if (constantX1 && constantXcen) textAlignment = ALIGN_LC; else if (constantXcen && constantX2) textAlignment = ALIGN_CR; else if (constantX1) textAlignment = ALIGN_L; else if (constantXcen) textAlignment = ALIGN_C; else if (constantX2) textAlignment = ALIGN_R; else textAlignment = ALIGN_NONE; if (constantls) constantLS = true; else constantLS = false; if (constantfs) constantFS = true; else constantFS = false; if (!clashingLines) uniqueLines = true; else uniqueLines = false; // this.fontSize = afs; } else { // if singleton, or if no sub-objects etc. } }