@Override public boolean startElementHandler(String tagName, ZLStringMap attributes) { switch (FB2Tag.getTagByName(tagName)) { case FB2Tag.BODY: return true; case FB2Tag.TITLE_INFO: myReadState = READ_SOMETHING; break; case FB2Tag.BOOK_TITLE: if (myReadState == READ_SOMETHING) { myReadState = READ_TITLE; } break; case FB2Tag.GENRE: if (myReadState == READ_SOMETHING) { myReadState = READ_GENRE; } break; case FB2Tag.AUTHOR: if (myReadState == READ_SOMETHING) { myReadState = READ_AUTHOR; } break; case FB2Tag.LANG: if (myReadState == READ_SOMETHING) { myReadState = READ_LANGUAGE; } break; case FB2Tag.FIRST_NAME: if (myReadState == READ_AUTHOR) { myReadState = READ_AUTHOR_NAME_0; } break; case FB2Tag.MIDDLE_NAME: if (myReadState == READ_AUTHOR) { myReadState = READ_AUTHOR_NAME_1; } break; case FB2Tag.LAST_NAME: if (myReadState == READ_AUTHOR) { myReadState = READ_AUTHOR_NAME_2; } break; case FB2Tag.SEQUENCE: if (myReadState == READ_SOMETHING) { String name = attributes.getValue("name"); if (name != null) { name.trim(); if (name.length() != 0) { myBook.setSeriesInfo(name, attributes.getValue("number")); } } } break; } return false; }
// Override public boolean startElementHandler(String tag, ZLStringMap attributes) { if ((tag == "subgenre") || (tag == "genre-alt")) { final String id = attributes.getValue("value"); if (id != null) { myGenreIds.add(id); } } else if (tag == "root-descr") { if (myLanguage == attributes.getValue("lang")) { myCategoryTag = Tag.getTag(null, attributes.getValue("genre-title")); } } else if (tag == "genre-descr") { if (myLanguage == attributes.getValue("lang")) { mySubCategoryTag = Tag.getTag(myCategoryTag, attributes.getValue("title")); } } return false; }
@Override public boolean startElementHandler(String tag, ZLStringMap attributes) { tag = tag.toLowerCase().intern(); switch (myReadState) { case READ_NONE: if (tag == TAG_NAVMAP) { myReadState = READ_MAP; } break; case READ_MAP: if (tag == TAG_NAVPOINT) { final String order = attributes.getValue(ATTRIBUTE_PLAYORDER); final int index = (order != null) ? atoi(order) : myPlayIndex++; myPointStack.add(new NavPoint(index, myPointStack.size())); myReadState = READ_POINT; } break; case READ_POINT: if (tag == TAG_NAVPOINT) { final String order = attributes.getValue(ATTRIBUTE_PLAYORDER); final int index = (order != null) ? atoi(order) : myPlayIndex++; myPointStack.add(new NavPoint(index, myPointStack.size())); } else if (tag == TAG_NAVLABEL) { myReadState = READ_LABEL; } else if (tag == TAG_CONTENT) { final int size = myPointStack.size(); if (size > 0) { myPointStack.get(size - 1).ContentHRef = ZLArchiveEntryFile.normalizeEntryName( myLocalPathPrefix + MiscUtil.decodeHtmlReference(attributes.getValue("src"))); } } break; case READ_LABEL: if (TAG_TEXT == tag) { myReadState = READ_TEXT; } break; case READ_TEXT: break; } return false; }
@Override public boolean startElementHandler(String tag, ZLStringMap xmlattributes, String[] tagStack) { tag = tag.toLowerCase(); if (myOPFSchemePrefix != null && tag.startsWith(myOPFSchemePrefix)) { tag = tag.substring(myOPFSchemePrefix.length()); } tag = tag.intern(); if (MANIFEST == tag) { myState = READ_MANIFEST; } else if (SPINE == tag) { myNCXTOCFileName = myIdToHref.get(xmlattributes.getValue("toc")); myState = READ_SPINE; } else if (GUIDE == tag) { myState = READ_GUIDE; } else if (TOUR == tag) { myState = READ_TOUR; } else if (myState == READ_MANIFEST && ITEM == tag) { final String id = xmlattributes.getValue("id"); String href = xmlattributes.getValue("href"); if ((id != null) && (href != null)) { href = MiscUtil.decodeHtmlReference(href); myIdToHref.put(id, href); } } else if (myState == READ_SPINE && ITEMREF == tag) { final String id = xmlattributes.getValue("idref"); if (id != null) { final String fileName = myIdToHref.get(id); if (fileName != null) { myHtmlFileNames.add(fileName); } } } else if (myState == READ_GUIDE && REFERENCE == tag) { final String type = xmlattributes.getValue("type"); final String title = xmlattributes.getValue("title"); String href = xmlattributes.getValue("href"); if (href != null) { href = MiscUtil.decodeHtmlReference(href); if (title != null) { myGuideTOC.add(new Reference(title, href)); } if (COVER.equals(type)) { final ZLFile imageFile = ZLFile.createFileByPath(myFilePrefix + href); myCoverFileName = imageFile.getPath(); final String imageName = imageFile.getLongName(); final ZLFileImage image = XHTMLImageFinder.getCoverImage(imageFile); if (image != null) { myModelReader.setMainTextModel(); myModelReader.addImageReference(imageName, (short) 0, true); myModelReader.addImage(imageName, image); myModelReader.insertEndOfSectionParagraph(); } } else if (COVER_IMAGE.equals(type)) { final ZLFile imageFile = ZLFile.createFileByPath(myFilePrefix + href); myCoverFileName = imageFile.getPath(); final String imageName = imageFile.getLongName(); myModelReader.setMainTextModel(); myModelReader.addImageReference(imageName, (short) 0, true); myModelReader.addImage(imageName, new ZLFileImage(MimeType.IMAGE_AUTO, imageFile)); myModelReader.insertEndOfSectionParagraph(); } } } else if (myState == READ_TOUR && SITE == tag) { final String title = xmlattributes.getValue("title"); String href = xmlattributes.getValue("href"); if ((title != null) && (href != null)) { href = MiscUtil.decodeHtmlReference(href); myTourTOC.add(new Reference(title, href)); } } return false; }
@Override public boolean startElementHandler(String tag, ZLStringMap attributes) { tag = tag.intern(); final char[] bufferContentArray = myBuffer.toString().trim().toCharArray(); final String bufferContent; if (bufferContentArray.length == 0) { bufferContent = null; } else { bufferContent = new String(bufferContentArray); } myBuffer.delete(0, myBuffer.length()); switch (myState) { case START: if (TAG_CATALOG == tag) { myState = CATALOG; } break; case CATALOG: if (TAG_BOOK == tag) { myBookId = attributes.getValue("hub_id"); myCover = attributes.getValue("cover_preview"); myReferences.add( new BookReference( "https://robot.litres.ru/pages/catalit_download_book/?art=" + myBookId, BookReference.Format.FB2_ZIP, BookReference.Type.DOWNLOAD_FULL_CONDITIONAL)); myState = BOOK; } break; case BOOK: if (TAG_TEXT_DESCRIPTION == tag) { myState = BOOK_DESCRIPTION; } break; case BOOK_DESCRIPTION: if (TAG_HIDDEN == tag) { myState = HIDDEN; } break; case HIDDEN: if (TAG_TITLE_INFO == tag) { myState = TITLE_INFO; } break; case TITLE_INFO: if (TAG_GENRE == tag) { myState = GENRE; } else if (TAG_AUTHOR == tag) { myState = AUTHOR; } else if (TAG_BOOK_TITLE == tag) { myState = BOOK_TITLE; } else if (TAG_ANNOTATION == tag) { myHtmlToString.setupTextContent(MimeTypes.MIME_TEXT_XHTML); myState = ANNOTATION; } else if (TAG_DATE == tag) { myState = DATE; } else if (TAG_LANGUAGE == tag) { myState = LANGUAGE; } else if (TAG_SEQUENCE == tag) { mySeriesTitle = attributes.getValue("name"); if (mySeriesTitle != null) { myIndexInSeries = 0; final String indexInSeries = attributes.getValue("number"); if (indexInSeries != null) { try { myIndexInSeries = Integer.parseInt(indexInSeries); } catch (NumberFormatException e) { } } } // myState = SEQUENCE; // handled through attributes without state } break; case AUTHOR: if (TAG_FIRST_NAME == tag) { myState = FIRST_NAME; } else if (TAG_MIDDLE_NAME == tag) { myState = MIDDLE_NAME; } else if (TAG_LAST_NAME == tag) { myState = LAST_NAME; } break; case ANNOTATION: myHtmlToString.processTextContent(false, tag, attributes, bufferContent); break; } return false; }