findSameLines method
dynamic
findSameLines()
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);
}
}