Fix pagebreaks when doc lower than match doc number
Change-Id: I6255b44c523c7fea1656c78a1aa18db1febfc4c3
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index 8c1498e..a40a7a6 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -501,7 +501,6 @@
};
};
-
public void addPagebreak (int start, int pagenumber) {
this.addHighlight(new Highlight(start, pagenumber));
};
@@ -864,11 +863,13 @@
int charOffset = 0, pagenumber = 0, start = 0;
- if (DEBUG)
+ if (DEBUG) {
+ log.debug("=================================");
log.debug("Retrieve pagebreaks between {}-{}",
this.getStartPos(),
this.getEndPos());
-
+ };
+
try {
// Store character offsets in ByteBuffer
@@ -890,19 +891,26 @@
while (pagebreakSpans.next() == true) {
if (DEBUG) {
- log.debug("There is a pagebreak at {}/{}",
+ log.debug("There is a pagebreak at {}/{} and we are at {}",
pagebreakSpans.doc(),
- pagebreakSpans.start());
+ pagebreakSpans.start(),
+ this.localDocID);
};
// Current pagebreak is not in the correct document
- if (pagebreakSpans.doc() != this.localDocID) {
- pagebreakSpans.skipTo(this.localDocID);
-
- // No pagebreaks in this document
- if (pagebreakSpans.doc() != this.localDocID)
- break;
- };
+ if (pagebreakSpans.doc() != this.localDocID) {
+ if (pagebreakSpans.doc() < this.localDocID) {
+ pagebreakSpans.skipTo(this.localDocID);
+
+ // No pagebreaks in this document
+ if (pagebreakSpans.doc() != this.localDocID)
+ break;
+ }
+ else {
+ break;
+ };
+ continue;
+ };
if (DEBUG)
log.debug("The pagebreak occurs in the document");
@@ -911,16 +919,18 @@
// if it is in the correct area
if (pagebreakSpans.start() <= this.getStartPos()) {
- if (DEBUG)
- log.debug("PB start position is before match at {}",
- pagebreakSpans.start());
-
// Only the first payload is relevant
b = pagebreakSpans.getPayload().iterator().next();
start = pagebreakSpans.start();
+
+ if (DEBUG)
+ log.debug("PB start position is before match at {}:{}",
+ pagebreakSpans.start(),
+ b);
+
}
- // This is the first pagebreak!
+ // This is the first pagebreak inside the match!
else {
// b is already defined!
@@ -937,6 +947,7 @@
// This is the first pagebreak!
pagebreaks.add(new int[]{charOffset, pagenumber});
+
if (start >= this.getStartPos()) {
if (DEBUG)
@@ -945,6 +956,7 @@
pagenumber);
this.addPagebreak(charOffset, pagenumber);
};
+ b = null;
}
// b wasn't used yet
@@ -963,17 +975,41 @@
// This is the first pagebreak!
pagebreaks.add(new int[]{charOffset, pagenumber});
this.addPagebreak(charOffset,pagenumber);
+ b = null;
}
// Pagebreak beyond the current position
else {
break;
};
-
- // Reset byte
- b = null;
};
};
+
+ if (b != null) {
+ bb.rewind();
+ bb.put(b);
+ bb.rewind();
+
+ pagenumber = bb.getInt();
+ charOffset = bb.getInt();
+
+ if (DEBUG)
+ log.debug("Add pagebreak to list: {}-{}", charOffset, pagenumber);
+
+ // This is a remembered pagebreak!
+ pagebreaks.add(new int[]{charOffset, pagenumber});
+
+ if (start >= this.getStartPos()) {
+
+ if (DEBUG)
+ log.debug("Add pagebreak to rendering: {}-{}",
+ charOffset,
+ pagenumber);
+ this.addPagebreak(charOffset, pagenumber);
+ };
+
+ b = null;
+ };
}
catch (Exception e) {
log.warn("Some problems with ByteBuffer: {}", e.getMessage());
@@ -988,7 +1024,6 @@
return pagebreaks;
};
-
// Expand the context to a span
public int[] expandContextToSpan (String element) {