private void markInsideRange() {
            optDecodeChar.ifPresent(decodedChar -> {
                // Inside the requested range (or continuing past it a bit to the end of the line)
                charsInRangeCount += decodedChar.getCharCount();
                // Record the start position for the requested range
                if (startCharOffset == -1) {
                    startCharOffset = currCharOffset;
                    startLineNo = currLineNo;
                    startColNo = currColNo;
                    startByteOffset = charReader.getLastByteOffsetRead()
                            .orElseThrow(() -> new RuntimeException("Should have a byte offset at this point"));
                }

                // Need the prev location so when we test the first char after the range
                // we can get the last one in the range
                lastLineNo = currLineNo;
                lastColNo = currColNo;
            });
        }
Called for each decoded char found in the range (or just after it with line continuation)
stroom-data/stroom-data-store-impl/src/main/java/stroom/data/store/impl/DataFetcher.java