昨天我们的移植工作进行了一大半,还留下两个重要的部分没有完成: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. js - 多个函数动态加载

    //动态添加物流锁的IEMI列表. function createLi() { var r = '<s:property value="#session.locks"/> ...

  2. ubuntu 13.04 xrdp 远程桌面连接问题[转载]

    本人ubuntu12.04,遇到了同样的问题,用一下方法解决了,mark一下. ubuntu 13.04 xrdp 远程桌面连接问题. win 7 远程桌面连接 ubuntu desktop 有几种办 ...

  3. Undefined symbols for architecture armv7: "_OBJC_METACLASS_$_ _OBJC_CLASS_$_ ld: symbol(s) not found for architecture armv7错误

    Undefined symbols for architecture armv7:  "_OBJC_METACLASS_$_MWPhotoBrowser", referenced ...

  4. OC基础-day05

    #pragma mark - Day05_01_NSObject类 NSObject类 1). NSObject是Foundation框架中的1个类. 在这个类中有1个类方法,叫做new 这个方法的作 ...

  5. 原生Javascript实现控制DIV属性

    写在前面: 从事前端工作已有一年之久,因为工作的性质,不太涉及JS方面,所以自己的JS水平一直处于小白阶段,工作闲暇之余,在网上找了一些小项目,希望练练手,促进自己成长.这是第一篇,后续还会有很多记录 ...

  6. [LeetCode OJ] Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  7. XML&DTD&XML Schema学习

    XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...

  8. 过滤HTML

    过滤HTML public static string NoHTML(string html){ string[] strArray2 = new string[] { "font" ...

  9. Android性能分析工具介绍

    1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...

  10. 关于script,first,second,third=argv运行出错的问题

    from sys import argv input(argv) #python自带的IDLE直接执行不能提供命令行参数 script,first,second,third=argv print(&q ...