diff --git a/jni/NativeFormats/JavaNativeFormatPlugin.cpp b/jni/NativeFormats/JavaNativeFormatPlugin.cpp index 984871e09..665e5187a 100644 --- a/jni/NativeFormats/JavaNativeFormatPlugin.cpp +++ b/jni/NativeFormats/JavaNativeFormatPlugin.cpp @@ -255,8 +255,7 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl } model->flush(); - if (!initInternalHyperlinks(env, javaModel, *model) || - !initTOC(env, javaModel, *model)) { + if (!initInternalHyperlinks(env, javaModel, *model) || !initTOC(env, javaModel, *model)) { return JNI_FALSE; } diff --git a/src/org/geometerplus/fbreader/bookmodel/NativeBookModel.java b/src/org/geometerplus/fbreader/bookmodel/NativeBookModel.java index 786ea164e..2f7a69e4d 100644 --- a/src/org/geometerplus/fbreader/bookmodel/NativeBookModel.java +++ b/src/org/geometerplus/fbreader/bookmodel/NativeBookModel.java @@ -37,38 +37,42 @@ public class NativeBookModel extends BookModelImpl { } public void initTOC(ZLTextModel contentsModel, int[] childrenNumbers, int[] referenceNumbers) { - final StringBuilder buffer = new StringBuilder(); - - final ArrayList positions = new ArrayList(); - TOCTree tree = TOCTree; - - final int size = contentsModel.getParagraphsNumber(); - for (int pos = 0; pos < size; ++pos) { - positions.add(pos); - ZLTextParagraph par = contentsModel.getParagraph(pos); - - buffer.delete(0, buffer.length()); - ZLTextParagraph.EntryIterator it = par.iterator(); - while (it.hasNext()) { - it.next(); - if (it.getType() == ZLTextParagraph.Entry.TEXT) { - buffer.append(it.getTextData(), it.getTextOffset(), it.getTextLength()); + try { + final StringBuilder buffer = new StringBuilder(); + + final ArrayList positions = new ArrayList(); + TOCTree tree = TOCTree; + + final int size = contentsModel.getParagraphsNumber(); + for (int pos = 0; pos < size; ++pos) { + positions.add(pos); + ZLTextParagraph par = contentsModel.getParagraph(pos); + + buffer.delete(0, buffer.length()); + ZLTextParagraph.EntryIterator it = par.iterator(); + while (it.hasNext()) { + it.next(); + if (it.getType() == ZLTextParagraph.Entry.TEXT) { + buffer.append(it.getTextData(), it.getTextOffset(), it.getTextLength()); + } + } + + tree = new TOCTree(tree); + tree.setText(buffer.toString()); + tree.setReference(myBookTextModel, referenceNumbers[pos]); + + while (positions.size() > 0 && tree != TOCTree) { + final int lastIndex = positions.size() - 1; + final int treePos = positions.get(lastIndex); + if (tree.subTrees().size() < childrenNumbers[treePos]) { + break; + } + tree = tree.Parent; + positions.remove(lastIndex); } } - - tree = new TOCTree(tree); - tree.setText(buffer.toString()); - tree.setReference(myBookTextModel, referenceNumbers[pos]); - - while (positions.size() > 0 && tree != TOCTree) { - final int lastIndex = positions.size() - 1; - final int treePos = positions.get(lastIndex); - if (tree.subTrees().size() < childrenNumbers[treePos]) { - break; - } - tree = tree.Parent; - positions.remove(lastIndex); - } + } catch (Exception e) { + e.printStackTrace(); } if (tree != TOCTree || positions.size() > 0) {