zoukankan      html  css  js  c++  java
  • FBReader移植日记 第二天

    昨天我们的移植工作进行了一大半,还留下两个重要的部分没有完成:1.没有移植的 ZLTextView,2.FormatPlugin相关的类。
    第一个问题我们放在后面解决,下面先解决格式插件的问题。
    我们可以看出来,FBReader格式插件这一部分的设计是相当的牛X的,至少以我目前的水平看。我们来看看它插件的结构 使用tree命令
     
    D:WORKSTEXTLAYOUTFBREADERJSRCORGGEOMETERPLUSFBREADERFORMATS
    │  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:WORKSTEXTLAYOUTNEWREADERSESRC
    ├─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文件下的文件。
    至此,我们移植了解析部分。
    庆祝一下~~
  • 相关阅读:
    ASP.NET MVC5写.php路由匹配时的问题 ASP.NET MVC 4 在 .NET 4.0 与.NET 4.5 的專案範本差異
    asp.net mvc上传头像加剪裁功能介绍
    图片延迟加载实现
    c#中多线程访问winform控件的若干问题
    C# WinForm实现控件拖动实例介绍
    C# 实现对窗体(Form)换肤
    C#读写txt文件的两种方法介绍
    C#实现JSON序列化与反序列化介绍
    高效的VS调试技巧
    SQL 添加字段和默认值脚本
  • 原文地址:https://www.cnblogs.com/yueang/p/3191347.html
Copyright © 2011-2022 走看看