docs: public SourceAndLine getSourceAndLineFromOverallLine(int overallLineNumber) {
          SourceAndLine sourceAndLine = new SourceAndLine();
          if (sourceParts.isEmpty()) {
              return sourceAndLine;
          }
          SourcePart currentPart;
          if (currentIndex >= sourceParts.size()) {
              currentPart = sourceParts.get(sourceParts.size() - 1);
          } else {
              currentPart = sourceParts.get(currentIndex);
          }
          int page = 0;
          int previousPage;
          for (SourcePart sourcePart : sourceParts) {
              sourceAndLine.sourceName = sourcePart.sourceName;
              if (sourcePart == currentPart) {
                  // we cant go any further
                  int offset = currentPart.lineReader.getLineNumber();
                  previousPage = page;
                  page += offset;
                  if (page > overallLineNumber) {
                      sourceAndLine.line = overallLineNumber - previousPage;
                  } else {
                      sourceAndLine.line = page;
                  }
                  return sourceAndLine;
              } else {
                  previousPage = page;
                  page += sourcePart.lineReader.getLineNumber();
                  if (page > overallLineNumber) {
                      sourceAndLine.line = overallLineNumber - previousPage;
                      return sourceAndLine;
                  }
              }
          }
          sourceAndLine.line = overallLineNumber - page;
          return sourceAndLine;
      }