昨天我们的移植工作进行了一大半,还留下两个重要的部分没有完成: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 列表
卷序列号为  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文件下的文件。
至此,我们移植了解析部分。
庆祝一下~~

FBReader移植日记 第二天的更多相关文章

  1. FBReader移植日记 第一天

    1.目标是创建两个工程,一个j2se的桌面软件,用于编辑和预览epub等格式的电子书,预览的窗口可以设置分辨率来模拟不同的设备,把编辑的结果实时的显示出来.另一个是Android的应用,用于阅读,管理 ...

  2. Egret入门学习日记 --- 第二十篇(书中 9.1~9.3 节 内容 组件篇)

    第二十篇(书中 9.1~9.3 节 内容 组件篇) 第八章中的内容. 以上都是基本的Js知识,我就不录入了. 直接来看 第9章. 开始 9.1节. 以上内容告诉你,Egret官方舍弃了GUI,使用了E ...

  3. Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)

    第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<E ...

  4. 淘宝(阿里百川)手机客户端开发日记第二篇 android首页之顶部轮播特效制作 (二)

    1.我们来设计flash_slide.xml 布局,这个xml主要做成模块化,方便其它的activity可以动态去调用. flash_slide.xml内容如下: <?xml version=& ...

  5. ASP.NET MVC5 高级编程-学习日记-第二章 控制器

    2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...

  6. 安卓学习日记第二天——Fragment

    一.基本概念 Fragment是依赖于Activity的,不能独立存在的. 一个Activity里可以有多个Fragment. 一个Fragment可以被多个Activity重用. Fragment有 ...

  7. ffmpeg之移植到ARM

    移植方法分为两种:第一种手工移植,第二种buildroot移植. 第一种手工移植: 优点:灵活性高 缺点:重复工作多 一.配置 ./configure --enable-memalign-hack - ...

  8. JavaWeb学习日记----XML基础

    1.XML基础: XML全称为eXtensible Markup Language;即可扩展标记型语言,同HTML一样使用标签来操作.它的可扩展性体现在标签可以由自己定义,可以是中文标签. XML用途 ...

  9. webservice安全性之 SoapHeader自定义身份验证

    相信很多开发者都用过WebService来实现程序的面向服务,本文主要介绍WebService的身份识别实现方式,当然本文会提供一个不是很完善的例子,权当抱砖引玉了. 首先我们来介绍webservic ...

随机推荐

  1. Java多线程读书笔记之一

    今天开始陆续将这几天跟进Java多线程知识的成果记录下来分享. Java多线程的知识是一直想要系统彻底的看完的,但是懒惰加无聊早就了我每天都没有进展,这回下决心一定要把这块知识系统梳理完. 我的知识来 ...

  2. 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8/WinServer2012

    如何使用本地源安装Microsoft .NET Framework 3.5 作为SQL Server 2012的 必要组件,校验组件过程有个小BUG,即使没有安装也通过,但会卡在安装环节(enabli ...

  3. C#动态二维数组输出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  4. Java面向对象程序设计--与C++对比说明:系列2(类机制)

    1. Java中的包机制(Package): 1.1   Java容许将一系列的类组合到一个叫package的集合中.package机制是一种非常好的管理工作的方式并可以将你自己的工作和系统或第三方提 ...

  5. ava下static关键字用法详解

    Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static ...

  6. 【elasticsearch】(2)centos7 超简单安装elasticsearch 的监控、测试的集群工具elasticsearch head

    elasticsearch-head是elasticsearch(下面称ES)比较普遍使用的可监控.测试等功能的集群管理工具,是由H5编写的单独的网页程序.使用方法网上很多,这里教大家一个超简单安装h ...

  7. ThinkPHP Uploadify 图片上载

    从官方网站下载的Uploadify最新版本:http://www.uploadify.com/download/ jQuery库是1.7.1版本. 下载好的Uploadify目录下面的文件有: 用到的 ...

  8. 十进制和n进制的转换(10进制转换为36进制)

    答案如下: void Convert() { map<int ,string> maps; maps[0]="0"; maps[1]="1"; ma ...

  9. Python【第一篇】基础介绍

    一.本节主要内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc文件 数据类型初识 数据运算 表达式if ...else语 ...

  10. 从string.size()和string.length()聊到长度的问题和一个关于数据结构定义的技巧

    最近工作中要查看一下string的长度,然后忘了是哪个函数,所以去网上搜了一搜,决定把网上学的和其他的一些有关长度的东西在这里汇总一下, 然后就有了此帖. string 是从c语言的char数组的概念 ...