FBReader移植日記 次日

昨天咱們的移植工做進行了一大半,還留下兩個重要的部分沒有完成:1.沒有移植的 ZLTextView,2.FormatPlugin相關的類。
第一個問題咱們放在後面解決,下面先解決格式插件的問題。
咱們能夠看出來,FBReader格式插件這一部分的設計是至關的牛X的,至少以我目前的水平看。咱們來看看它插件的結構 使用tree命令
 
D:\WORKS\TEXTLAYOUT\FBREADERJ\SRC\ORG\GEOMETERPLUS\FBREADER\FORMATS
│  FormatPlugin.java
│  JavaFormatPlugin.java
│  NativeFormatPlugin.java
│  PluginCollection.java
│ 
├─fb2
│      Base64EncodedImage.java
│      FB2AnnotationReader.java
│      FB2CoverImage.java
│      FB2CoverReader.java
│      FB2MetaInfoReader.java
│      FB2NativePlugin.java
│      FB2Plugin.java
│      FB2Reader.java
│      FB2Tag.java
│      FB2TagManager.java
│      FB2Util.java
│     
├─html
│      HtmlReader.java
│      HtmlTag.java
│     
├─oeb
│      ContainerFileReader.java
│      NCXReader.java
│      OEBAnnotationReader.java
│      OEBBookReader.java
│      OEBCoverBackgroundReader.java
│      OEBCoverReader.java
│      OEBMetaInfoReader.java
│      OEBNativePlugin.java
│      OEBPlugin.java
│      XHTMLImageFinder.java
│     
├─pdb
│      DocDecompressor.java
│      HuffdicDecompressor.java
│      MobipocketHtmlBookReader.java
│      MobipocketPlugin.java
│      MobipocketStream.java
│      PalmDocLikeStream.java
│      PdbHeader.java
│      PdbStream.java
│      PdbUtil.java
│     
├─util
│      MiscUtil.java
│     
└─xhtml
        XHTMLReader.java
        XHTMLTagAction.java
        XHTMLTagBodyAction.java
        XHTMLTagControlAction.java
        XHTMLTagHyperlinkAction.java
        XHTMLTagImageAction.java
        XHTMLTagItemAction.java
        XHTMLTagParagraphAction.java
        XHTMLTagParagraphWithControlAction.java
        XHTMLTagPreAction.java
        XHTMLTagRestartParagraphAction.java

 

咱們能夠看出formats下有四個格式文件夾,分別支持了各自的文件格式,而根目錄下的四個文件很清楚的解釋了它的插件管理方法,每種格式的插件分爲Java實現和Native實現,而且這兩種實現是能夠切換的,插件都存儲在PluginCollection這個類裏,這個類能夠根據文件類型去查找可用的插件,使用插件來進行解析。
那麼,咱們按照原樣把這一部分代碼拷貝到咱們的工程對應的目錄下。
如今,咱們有了解析格式的利器了,是時候解決最後一個問題了,ZLTextView帶來的關聯問題,ZLTextView是解析與排版直接的鏈接樞紐,引入這個文件,咱們就要開始進入排版代碼了,所以我以爲先使用一個適配器來代替ZLTextView,是咱們的代碼內聚在現有的模塊內,起碼先使其能夠運行,因此建立了一個ZLTextView的抽象子類MyViewAdapter。
好了,如今咱們的代碼看上去是這個樣子了:
文件夾 PATH 列表
卷序列號爲 00000002 9EB8:DA5D
D:\WORKS\TEXTLAYOUT\NEWREADERSE\SRC
├─com
│  └─yueang
│      ├─atest
│      │      TestEngine.java
│      │     
│      ├─log
│      │      MyLog.java
│      │      MyUtils.java
│      │     
│      ├─newreader
│      │  │  Paths.java
│      │  │ 
│      │  ├─book
│      │  │      Author.java
│      │  │      Book.java
│      │  │      Bookmark.java
│      │  │      BookmarkQuery.java
│      │  │      BooksDatabase.java
│      │  │      BookUtil.java
│      │  │      FileInfo.java
│      │  │      FileInfoSet.java
│      │  │      HighlightingStyle.java
│      │  │      Series.java
│      │  │      SeriesInfo.java
│      │  │      Tag.java
│      │  │      UID.java
│      │  │     
│      │  ├─bookmodel
│      │  │      BookModel.java
│      │  │      BookModelImpl.java
│      │  │      BookReader.java
│      │  │      BookReadingException.java
│      │  │      FBHyperlinkType.java
│      │  │      FBTextKind.java
│      │  │      JavaBookModel.java
│      │  │      NativeBookModel.java
│      │  │      TOCTree.java
│      │  │     
│      │  ├─formats
│      │  │  │  FormatPlugin.java
│      │  │  │  JavaFormatPlugin.java
│      │  │  │  NativeFormatPlugin.java
│      │  │  │  PluginCollection.java
│      │  │  │ 
│      │  │  ├─fb2
│      │  │  │      Base64EncodedImage.java
│      │  │  │      FB2AnnotationReader.java
│      │  │  │      FB2CoverImage.java
│      │  │  │      FB2CoverReader.java
│      │  │  │      FB2MetaInfoReader.java
│      │  │  │      FB2NativePlugin.java
│      │  │  │      FB2Plugin.java
│      │  │  │      FB2Reader.java
│      │  │  │      FB2Tag.java
│      │  │  │      FB2TagManager.java
│      │  │  │      FB2Util.java
│      │  │  │     
│      │  │  ├─html
│      │  │  │      HtmlReader.java
│      │  │  │      HtmlTag.java
│      │  │  │     
│      │  │  ├─oeb
│      │  │  │      ContainerFileReader.java
│      │  │  │      NCXReader.java
│      │  │  │      OEBAnnotationReader.java
│      │  │  │      OEBBookReader.java
│      │  │  │      OEBCoverBackgroundReader.java
│      │  │  │      OEBCoverReader.java
│      │  │  │      OEBMetaInfoReader.java
│      │  │  │      OEBNativePlugin.java
│      │  │  │      OEBPlugin.java
│      │  │  │      XHTMLImageFinder.java
│      │  │  │     
│      │  │  ├─pdb
│      │  │  │      DocDecompressor.java
│      │  │  │      MobipocketHtmlBookReader.java
│      │  │  │      MobipocketPlugin.java
│      │  │  │      MobipocketStream.java
│      │  │  │      PalmDocLikeStream.java
│      │  │  │      PdbHeader.java
│      │  │  │      PdbStream.java
│      │  │  │      PdbUtil.java
│      │  │  │     
│      │  │  ├─util
│      │  │  │      MiscUtil.java
│      │  │  │     
│      │  │  └─xhtml
│      │  │          XHTMLReader.java
│      │  │          XHTMLTagAction.java
│      │  │          XHTMLTagBodyAction.java
│      │  │          XHTMLTagControlAction.java
│      │  │          XHTMLTagHyperlinkAction.java
│      │  │          XHTMLTagImageAction.java
│      │  │          XHTMLTagItemAction.java
│      │  │          XHTMLTagParagraphAction.java
│      │  │          XHTMLTagParagraphWithControlAction.java
│      │  │          XHTMLTagPreAction.java
│      │  │          XHTMLTagRestartParagraphAction.java
│      │  │         
│      │  ├─network
│      │  │      Base64EncodedImage.java
│      │  │     
│      │  └─sort
│      │          TitledEntity.java
│      │         
│      ├─support
│      │      Environment.java
│      │      MyAssetFile.java
│      │      MyViewAdapter.java
│      │      MyZLibrary.java
│      │      ZLSELibrary.java
│      │     
│      └─zlibrary
│          ├─core
│          │  ├─config
│          │  │      ZLConfig.java
│          │  │     
│          │  ├─constants
│          │  │      XMLNamespaces.java
│          │  │     
│          │  ├─encoding
│          │  │      AutoEncodingCollection.java
│          │  │      Encoding.java
│          │  │      EncodingCollection.java
│          │  │      EncodingConverter.java
│          │  │      FilteredEncodingCollection.java
│          │  │      JavaEncodingCollection.java
│          │  │     
│          │  ├─filesystem
│          │  │  │  ZLArchiveEntryFile.java
│          │  │  │  ZLFile.java
│          │  │  │  ZLPhysicalFile.java
│          │  │  │  ZLResourceFile.java
│          │  │  │  ZLZipEntryFile.java
│          │  │  │ 
│          │  │  └─tar
│          │  │          ZLTarEntryFile.java
│          │  │          ZLTarHeader.java
│          │  │          ZLTarInputStream.java
│          │  │         
│          │  ├─filetypes
│          │  │      FileType.java
│          │  │      FileTypeCollection.java
│          │  │      FileTypeDjVu.java
│          │  │      FileTypeEpub.java
│          │  │      FileTypeFB2.java
│          │  │      FileTypeHtml.java
│          │  │      FileTypeMobipocket.java
│          │  │      FileTypePalm.java
│          │  │      SimpleFileType.java
│          │  │     
│          │  ├─html
│          │  │      ZLByteBuffer.java
│          │  │      ZLHtmlAttributeMap.java
│          │  │      ZLHtmlParser.java
│          │  │      ZLHtmlProcessor.java
│          │  │      ZLHtmlReader.java
│          │  │     
│          │  ├─image
│          │  │      ZLBase64EncodedImage.java
│          │  │      ZLFileImage.java
│          │  │      ZLImage.java
│          │  │      ZLImageData.java
│          │  │      ZLImageManager.java
│          │  │      ZLImageProxy.java
│          │  │      ZLLoadableImage.java
│          │  │      ZLSingleImage.java
│          │  │     
│          │  ├─language
│          │  │      Language.java
│          │  │      ZLLanguageUtil.java
│          │  │     
│          │  ├─library
│          │  │      ZLibrary.java
│          │  │     
│          │  ├─options
│          │  │      ZLOption.java
│          │  │      ZLStringOption.java
│          │  │     
│          │  ├─resources
│          │  │      ZLMissingResource.java
│          │  │      ZLResource.java
│          │  │      ZLTreeResource.java
│          │  │     
│          │  ├─tree
│          │  │      ZLTree.java
│          │  │     
│          │  ├─util
│          │  │      Base64InputStream.java
│          │  │      HexInputStream.java
│          │  │      MergedInputStream.java
│          │  │      MimeType.java
│          │  │      MiscUtil.java
│          │  │      SliceInputStream.java
│          │  │      ZLArrayUtils.java
│          │  │      ZLBoolean3.java
│          │  │      ZLColor.java
│          │  │      ZLInputStreamWithOffset.java
│          │  │      ZLSearchPattern.java
│          │  │      ZLSearchUtil.java
│          │  │     
│          │  └─xml
│          │          ZLDTDParser.java
│          │          ZLMutableString.java
│          │          ZLStringMap.java
│          │          ZLXMLParser.java
│          │          ZLXMLProcessor.java
│          │          ZLXMLReader.java
│          │          ZLXMLReaderAdapter.java
│          │         
│          └─text
│              ├─model
│              │      CachedCharStorage.java
│              │      CachedCharStorageBase.java
│              │      CachedCharStorageException.java
│              │      CachedCharStorageRO.java
│              │      CharStorage.java
│              │      ZLImageEntry.java
│              │      ZLTextCSSStyleEntry.java
│              │      ZLTextMark.java
│              │      ZLTextMetrics.java
│              │      ZLTextModel.java
│              │      ZLTextNativeModel.java
│              │      ZLTextOtherStyleEntry.java
│              │      ZLTextParagraph.java
│              │      ZLTextParagraphImpl.java
│              │      ZLTextPlainModel.java
│              │      ZLTextSpecialParagraphImpl.java
│              │      ZLTextStyleEntry.java
│              │      ZLTextWritableModel.java
│              │      ZLTextWritablePlainModel.java
│              │     
│              └─view
│                      ZLPaintContext.java
│                      ZLTextControlElement.java
│                      ZLTextElement.java
│                      ZLTextFixedHSpaceElement.java
│                      ZLTextFixedPosition.java
│                      ZLTextHyperlink.java
│                      ZLTextHyperlinkControlElement.java
│                      ZLTextImageElement.java
│                      ZLTextParagraphCursor.java
│                      ZLTextParagraphCursorCache.java
│                      ZLTextPosition.java
│                      ZLTextStyleElement.java
│                      ZLTextWord.java
│                      ZLTextWordCursor.java
│                     
└─org
    ├─amse
    │  └─ys
    │      └─zip
    │              Decompressor.java
    │              DeflatingDecompressor.java
    │              LocalFileHeader.java
    │              MyBufferedInputStream.java
    │              NoCompressionDecompressor.java
    │              ZipException.java
    │              ZipFile.java
    │              ZipInputStream.java
    │             
    └─vimgadgets
        └─linebreak
                LineBreaker.java
 
atest包是咱們測測試程序入口,Log包下是自定義的Log類
 
運行TestEngine,出現UnsatisfyLinkError, 查了一下原來是沒有實現org.amse.ys.zip.DeflatingDecompressor類中的本地方法,下載win32版的 zlib庫,建立VS工程,加入jni/DeflatingDecompressor/DeflatingDecompressor.cpp文件,編譯出dll,  而後把FBReaderJ/assets 文件夾也拷貝到工程裏,實現咱們本身的MyAssetFile extends ZLResrourceFile類,使用該類來讀取assets文件下的文件。
至此,咱們移植瞭解析部分。
慶祝一下~~
相關文章
相關標籤/搜索