findSameLines method

dynamic findSameLines(
  1. List<Line> allLines,
  2. List<Line> sameLines,
  3. String spaceBetweenWords,
  4. bool isHorizontal,
  5. int strictness,
)

this finds same line words of the found words.

Implementation

findSameLines(List<Line> allLines, List<Line> sameLines,
    String spaceBetweenWords, bool isHorizontal, int strictness) {
  Line newLine = Line();
  bool isInSameLines = true;
  // is newLine in same lines?
  if (allLines.isEmpty) {
    isInSameLines = false;
  } else {
    newLine = isHorizontal
        ? leastXFinder(allLines, useMiddle: true)
        : maxYFinder(allLines, useMiddle: true);
    if (strictness < 2) {
      for (var element in sameLines) {
        if ((isHorizontal
            ? !isInTheSameLine(newLine, element,
                strictness == 0 ? Strictness.medium : Strictness.hard)
            : !isInTheSameColumn(newLine, element, Strictness.medium))) {
          isInSameLines = false;
        }
      }
    } else {
      Line element = sameLines.last;
      if ((isHorizontal
          ? !isInTheSameLine(newLine, element, Strictness.hard)
          : !isInTheSameColumn(newLine, element, Strictness.hard))) {
        isInSameLines = false;
      }
    }
  }
  // yes? find same lines again, no? sort lines again
  if (isInSameLines) {
    sameLines.add(newLine);
    allLines.removeWhere((element) => element == newLine);
    findSameLines(
        allLines, sameLines, spaceBetweenWords, isHorizontal, strictness);
  } else {
    List<Line> sortedLines = [];
    String result = isHorizontal ? sortedResult : sortedResultVertical;
    int lastI = sameLines.length;
    for (int i = 0; i < lastI; i++) {
      Line max =
          isHorizontal ? maxYFinder(sameLines) : leastXFinder(sameLines);
      // Line maxY = maxYFinder(sameLines);
      // Line maxX = maxXFinder(sameLines);
      sortedLines.add(max);
      sameLines.removeWhere((element) => element == max);
    }
    for (var element in sortedLines) {
      result = result + element.text! + spaceBetweenWords;
    }
    if (isHorizontal) {
      sortedResult = result + "\n";
    } else {
      sortedResultVertical = result + "\n";
    }
    sortLines(allLines, spaceBetweenWords, isHorizontal, strictness);
  }
}