mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 02:09:35 +02:00
a workaround to fix an exception in initTOC
This commit is contained in:
parent
85a23bc67a
commit
297f9aa6f9
2 changed files with 35 additions and 32 deletions
|
@ -255,8 +255,7 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl
|
||||||
}
|
}
|
||||||
model->flush();
|
model->flush();
|
||||||
|
|
||||||
if (!initInternalHyperlinks(env, javaModel, *model) ||
|
if (!initInternalHyperlinks(env, javaModel, *model) || !initTOC(env, javaModel, *model)) {
|
||||||
!initTOC(env, javaModel, *model)) {
|
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,38 +37,42 @@ public class NativeBookModel extends BookModelImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initTOC(ZLTextModel contentsModel, int[] childrenNumbers, int[] referenceNumbers) {
|
public void initTOC(ZLTextModel contentsModel, int[] childrenNumbers, int[] referenceNumbers) {
|
||||||
final StringBuilder buffer = new StringBuilder();
|
try {
|
||||||
|
final StringBuilder buffer = new StringBuilder();
|
||||||
final ArrayList<Integer> positions = new ArrayList<Integer>();
|
|
||||||
TOCTree tree = TOCTree;
|
final ArrayList<Integer> positions = new ArrayList<Integer>();
|
||||||
|
TOCTree tree = TOCTree;
|
||||||
final int size = contentsModel.getParagraphsNumber();
|
|
||||||
for (int pos = 0; pos < size; ++pos) {
|
final int size = contentsModel.getParagraphsNumber();
|
||||||
positions.add(pos);
|
for (int pos = 0; pos < size; ++pos) {
|
||||||
ZLTextParagraph par = contentsModel.getParagraph(pos);
|
positions.add(pos);
|
||||||
|
ZLTextParagraph par = contentsModel.getParagraph(pos);
|
||||||
buffer.delete(0, buffer.length());
|
|
||||||
ZLTextParagraph.EntryIterator it = par.iterator();
|
buffer.delete(0, buffer.length());
|
||||||
while (it.hasNext()) {
|
ZLTextParagraph.EntryIterator it = par.iterator();
|
||||||
it.next();
|
while (it.hasNext()) {
|
||||||
if (it.getType() == ZLTextParagraph.Entry.TEXT) {
|
it.next();
|
||||||
buffer.append(it.getTextData(), it.getTextOffset(), it.getTextLength());
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
tree = new TOCTree(tree);
|
e.printStackTrace();
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tree != TOCTree || positions.size() > 0) {
|
if (tree != TOCTree || positions.size() > 0) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue