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) {