mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
DocPlugin: support for images (also supporting for blocked images in ZLFileImage)
This commit is contained in:
parent
0abb1f46a6
commit
401aaba8bf
26 changed files with 1320 additions and 86 deletions
|
@ -133,6 +133,7 @@ LOCAL_SRC_FILES := \
|
|||
NativeFormats/fbreader/src/formats/doc/OleStream.cpp \
|
||||
NativeFormats/fbreader/src/formats/doc/OleStreamReader.cpp \
|
||||
NativeFormats/fbreader/src/formats/doc/OleUtil.cpp \
|
||||
NativeFormats/fbreader/src/formats/doc/DocImageDataReader.cpp \
|
||||
NativeFormats/fbreader/src/library/Author.cpp \
|
||||
NativeFormats/fbreader/src/library/Book.cpp \
|
||||
NativeFormats/fbreader/src/library/Comparators.cpp \
|
||||
|
|
298
jni/NativeFormats/NativeFormats.pro
Normal file
298
jni/NativeFormats/NativeFormats.pro
Normal file
|
@ -0,0 +1,298 @@
|
|||
######################################################################
|
||||
# Automatically generated by qmake (2.01a) ?? ???? 14 23:55:58 2012
|
||||
######################################################################
|
||||
|
||||
TEMPLATE = app
|
||||
TARGET =
|
||||
DEPENDPATH += . \
|
||||
util \
|
||||
fbreader/src/bookmodel \
|
||||
fbreader/src/formats \
|
||||
fbreader/src/library \
|
||||
fbreader/src/formats/css \
|
||||
fbreader/src/formats/doc \
|
||||
fbreader/src/formats/fb2 \
|
||||
fbreader/src/formats/html \
|
||||
fbreader/src/formats/oeb \
|
||||
fbreader/src/formats/rtf \
|
||||
fbreader/src/formats/txt \
|
||||
fbreader/src/formats/util \
|
||||
fbreader/src/formats/xhtml \
|
||||
zlibrary/core/src/constants \
|
||||
zlibrary/core/src/encoding \
|
||||
zlibrary/core/src/filesystem \
|
||||
zlibrary/core/src/image \
|
||||
zlibrary/core/src/language \
|
||||
zlibrary/core/src/library \
|
||||
zlibrary/core/src/logger \
|
||||
zlibrary/core/src/util \
|
||||
zlibrary/core/src/xml \
|
||||
zlibrary/text/src/model \
|
||||
zlibrary/core/src/filesystem/zip \
|
||||
zlibrary/core/src/unix/filesystem \
|
||||
zlibrary/core/src/unix/library \
|
||||
zlibrary/core/src/xml/expat \
|
||||
zlibrary/ui/src/android/filesystem \
|
||||
zlibrary/ui/src/android/library
|
||||
INCLUDEPATH += . \
|
||||
util \
|
||||
zlibrary/core/src/util \
|
||||
zlibrary/core/src/image \
|
||||
zlibrary/core/src/filesystem \
|
||||
fbreader/src/bookmodel \
|
||||
zlibrary/text/src/model \
|
||||
fbreader/src/formats \
|
||||
fbreader/src/library \
|
||||
zlibrary/core/src/library \
|
||||
zlibrary/core/src/logger \
|
||||
zlibrary/core/src/encoding \
|
||||
zlibrary/core/src/language \
|
||||
fbreader/src/formats/fb2 \
|
||||
fbreader/src/formats/html \
|
||||
fbreader/src/formats/txt \
|
||||
fbreader/src/formats/oeb \
|
||||
fbreader/src/formats/rtf \
|
||||
fbreader/src/formats/doc \
|
||||
fbreader/src/formats/css \
|
||||
zlibrary/core/src/xml \
|
||||
zlibrary/core/src/constants \
|
||||
fbreader/src/formats/util \
|
||||
fbreader/src/formats/xhtml \
|
||||
zlibrary/core/src/filesystem/zip \
|
||||
zlibrary/core/src/xml/expat \
|
||||
zlibrary/core/src/unix/filesystem \
|
||||
zlibrary/core/src/unix/library \
|
||||
zlibrary/ui/src/android/filesystem \
|
||||
/usr/include
|
||||
|
||||
|
||||
# Input
|
||||
HEADERS += util/AndroidUtil.h \
|
||||
util/JniEnvelope.h \
|
||||
fbreader/src/bookmodel/BookModel.h \
|
||||
fbreader/src/bookmodel/BookReader.h \
|
||||
fbreader/src/bookmodel/FBHyperlinkType.h \
|
||||
fbreader/src/bookmodel/FBTextKind.h \
|
||||
fbreader/src/formats/EncodedTextReader.h \
|
||||
fbreader/src/formats/FormatPlugin.h \
|
||||
fbreader/src/library/Author.h \
|
||||
fbreader/src/library/Book.h \
|
||||
fbreader/src/library/Library.h \
|
||||
fbreader/src/library/Lists.h \
|
||||
fbreader/src/library/Tag.h \
|
||||
fbreader/src/formats/css/StyleSheetParser.h \
|
||||
fbreader/src/formats/css/StyleSheetTable.h \
|
||||
fbreader/src/formats/doc/DocBookReader.h \
|
||||
fbreader/src/formats/doc/DocMetaInfoReader.h \
|
||||
fbreader/src/formats/doc/DocPlugin.h \
|
||||
fbreader/src/formats/doc/OleMainStream.h \
|
||||
fbreader/src/formats/doc/OleStorage.h \
|
||||
fbreader/src/formats/doc/OleStream.h \
|
||||
fbreader/src/formats/doc/OleStreamReader.h \
|
||||
fbreader/src/formats/doc/OleUtil.h \
|
||||
fbreader/src/formats/fb2/FB2BookReader.h \
|
||||
fbreader/src/formats/fb2/FB2CoverReader.h \
|
||||
fbreader/src/formats/fb2/FB2MetaInfoReader.h \
|
||||
fbreader/src/formats/fb2/FB2Plugin.h \
|
||||
fbreader/src/formats/fb2/FB2Reader.h \
|
||||
fbreader/src/formats/fb2/FB2TagManager.h \
|
||||
fbreader/src/formats/html/HtmlBookReader.h \
|
||||
fbreader/src/formats/html/HtmlDescriptionReader.h \
|
||||
fbreader/src/formats/html/HtmlEntityCollection.h \
|
||||
fbreader/src/formats/html/HtmlPlugin.h \
|
||||
fbreader/src/formats/html/HtmlReader.h \
|
||||
fbreader/src/formats/html/HtmlReaderStream.h \
|
||||
fbreader/src/formats/html/HtmlTagActions.h \
|
||||
fbreader/src/formats/oeb/NCXReader.h \
|
||||
fbreader/src/formats/oeb/OEBBookReader.h \
|
||||
fbreader/src/formats/oeb/OEBCoverReader.h \
|
||||
fbreader/src/formats/oeb/OEBMetaInfoReader.h \
|
||||
fbreader/src/formats/oeb/OEBPlugin.h \
|
||||
fbreader/src/formats/oeb/OEBTextStream.h \
|
||||
fbreader/src/formats/oeb/XHTMLImageFinder.h \
|
||||
fbreader/src/formats/rtf/RtfBookReader.h \
|
||||
fbreader/src/formats/rtf/RtfDescriptionReader.h \
|
||||
fbreader/src/formats/rtf/RtfPlugin.h \
|
||||
fbreader/src/formats/rtf/RtfReader.h \
|
||||
fbreader/src/formats/rtf/RtfReaderStream.h \
|
||||
fbreader/src/formats/txt/PlainTextFormat.h \
|
||||
fbreader/src/formats/txt/TxtBookReader.h \
|
||||
fbreader/src/formats/txt/TxtPlugin.h \
|
||||
fbreader/src/formats/txt/TxtReader.h \
|
||||
fbreader/src/formats/util/EntityFilesCollector.h \
|
||||
fbreader/src/formats/util/MergedStream.h \
|
||||
fbreader/src/formats/util/MiscUtil.h \
|
||||
fbreader/src/formats/util/XMLTextStream.h \
|
||||
fbreader/src/formats/xhtml/XHTMLReader.h \
|
||||
zlibrary/core/src/constants/ZLXMLNamespace.h \
|
||||
zlibrary/core/src/encoding/DummyEncodingConverter.h \
|
||||
zlibrary/core/src/encoding/JavaEncodingConverter.h \
|
||||
zlibrary/core/src/encoding/Utf16EncodingConverters.h \
|
||||
zlibrary/core/src/encoding/ZLEncodingConverter.h \
|
||||
zlibrary/core/src/encoding/ZLEncodingConverterProvider.h \
|
||||
zlibrary/core/src/filesystem/ZLDir.h \
|
||||
zlibrary/core/src/filesystem/ZLFile.h \
|
||||
zlibrary/core/src/filesystem/ZLFileInfo.h \
|
||||
zlibrary/core/src/filesystem/ZLFSDir.h \
|
||||
zlibrary/core/src/filesystem/ZLFSManager.h \
|
||||
zlibrary/core/src/filesystem/ZLInputStream.h \
|
||||
zlibrary/core/src/filesystem/ZLOutputStream.h \
|
||||
zlibrary/core/src/image/ZLFileImage.h \
|
||||
zlibrary/core/src/image/ZLImage.h \
|
||||
zlibrary/core/src/image/ZLStreamImage.h \
|
||||
zlibrary/core/src/language/ZLCharSequence.h \
|
||||
zlibrary/core/src/language/ZLLanguageDetector.h \
|
||||
zlibrary/core/src/language/ZLLanguageList.h \
|
||||
zlibrary/core/src/language/ZLLanguageMatcher.h \
|
||||
zlibrary/core/src/language/ZLStatistics.h \
|
||||
zlibrary/core/src/language/ZLStatisticsGenerator.h \
|
||||
zlibrary/core/src/language/ZLStatisticsItem.h \
|
||||
zlibrary/core/src/language/ZLStatisticsXMLReader.h \
|
||||
zlibrary/core/src/library/ZLibrary.h \
|
||||
zlibrary/core/src/logger/ZLLogger.h \
|
||||
zlibrary/core/src/util/shared_ptr.h \
|
||||
zlibrary/core/src/util/ZLBoolean3.h \
|
||||
zlibrary/core/src/util/ZLFileUtil.h \
|
||||
zlibrary/core/src/util/ZLStringUtil.h \
|
||||
zlibrary/core/src/util/ZLUnicodeUtil.h \
|
||||
zlibrary/core/src/xml/ZLAsynchronousInputStream.h \
|
||||
zlibrary/core/src/xml/ZLPlainAsynchronousInputStream.h \
|
||||
zlibrary/core/src/xml/ZLXMLReader.h \
|
||||
zlibrary/text/src/model/ZLCachedMemoryAllocator.h \
|
||||
zlibrary/text/src/model/ZLHyperlinkType.h \
|
||||
zlibrary/text/src/model/ZLTextAlignmentType.h \
|
||||
zlibrary/text/src/model/ZLTextKind.h \
|
||||
zlibrary/text/src/model/ZLTextModel.h \
|
||||
zlibrary/text/src/model/ZLTextParagraph.h \
|
||||
zlibrary/text/src/model/ZLTextStyleEntry.h \
|
||||
zlibrary/core/src/filesystem/zip/ZLZDecompressor.h \
|
||||
zlibrary/core/src/filesystem/zip/ZLZip.h \
|
||||
zlibrary/core/src/filesystem/zip/ZLZipHeader.h \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFileInputStream.h \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFileOutputStream.h \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFSDir.h \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFSManager.h \
|
||||
zlibrary/core/src/unix/library/ZLibraryImplementation.h \
|
||||
zlibrary/core/src/xml/expat/ZLXMLReaderInternal.h \
|
||||
zlibrary/ui/src/android/filesystem/JavaFSDir.h \
|
||||
zlibrary/ui/src/android/filesystem/JavaInputStream.h \
|
||||
zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.h \
|
||||
zlibrary/text/src/model/ZLTextStyleEntry.h \
|
||||
fbreader/src/formats/html/HtmlTagActions.h \
|
||||
fbreader/src/formats/html/HtmlReaderStream.h \
|
||||
fbreader/src/formats/html/HtmlReader.h \
|
||||
fbreader/src/formats/html/HtmlPlugin.h \
|
||||
fbreader/src/formats/html/HtmlEntityCollection.h \
|
||||
fbreader/src/formats/html/HtmlDescriptionReader.h \
|
||||
fbreader/src/formats/html/HtmlBookReader.h \
|
||||
fbreader/src/formats/doc/OleUtil.h \
|
||||
fbreader/src/formats/doc/OleStreamReader.h \
|
||||
fbreader/src/formats/doc/OleStream.h \
|
||||
fbreader/src/formats/doc/OleStorage.h \
|
||||
fbreader/src/formats/doc/OleMainStream.h \
|
||||
fbreader/src/formats/doc/DocPlugin.h \
|
||||
fbreader/src/formats/doc/DocMetaInfoReader.h \
|
||||
fbreader/src/formats/doc/DocBookReader.h
|
||||
SOURCES += JavaNativeFormatPlugin.cpp \
|
||||
JavaPluginCollection.cpp \
|
||||
main.cpp \
|
||||
util/AndroidUtil.cpp \
|
||||
util/JniEnvelope.cpp \
|
||||
fbreader/src/bookmodel/BookModel.cpp \
|
||||
fbreader/src/bookmodel/BookReader.cpp \
|
||||
fbreader/src/formats/EncodedTextReader.cpp \
|
||||
fbreader/src/formats/FormatPlugin.cpp \
|
||||
fbreader/src/formats/PluginCollection.cpp \
|
||||
fbreader/src/library/Author.cpp \
|
||||
fbreader/src/library/Book.cpp \
|
||||
fbreader/src/library/Comparators.cpp \
|
||||
fbreader/src/library/Library.cpp \
|
||||
fbreader/src/library/Tag.cpp \
|
||||
fbreader/src/formats/css/StyleSheetParser.cpp \
|
||||
fbreader/src/formats/css/StyleSheetTable.cpp \
|
||||
fbreader/src/formats/doc/DocBookReader.cpp \
|
||||
fbreader/src/formats/doc/DocMetaInfoReader.cpp \
|
||||
fbreader/src/formats/doc/DocPlugin.cpp \
|
||||
fbreader/src/formats/doc/OleMainStream.cpp \
|
||||
fbreader/src/formats/doc/OleStorage.cpp \
|
||||
fbreader/src/formats/doc/OleStream.cpp \
|
||||
fbreader/src/formats/doc/OleStreamReader.cpp \
|
||||
fbreader/src/formats/doc/OleUtil.cpp \
|
||||
fbreader/src/formats/fb2/FB2BookReader.cpp \
|
||||
fbreader/src/formats/fb2/FB2CoverReader.cpp \
|
||||
fbreader/src/formats/fb2/FB2MetaInfoReader.cpp \
|
||||
fbreader/src/formats/fb2/FB2Plugin.cpp \
|
||||
fbreader/src/formats/fb2/FB2Reader.cpp \
|
||||
fbreader/src/formats/fb2/FB2TagManager.cpp \
|
||||
fbreader/src/formats/html/HtmlBookReader.cpp \
|
||||
fbreader/src/formats/html/HtmlDescriptionReader.cpp \
|
||||
fbreader/src/formats/html/HtmlEntityCollection.cpp \
|
||||
fbreader/src/formats/html/HtmlPlugin.cpp \
|
||||
fbreader/src/formats/html/HtmlReader.cpp \
|
||||
fbreader/src/formats/html/HtmlReaderStream.cpp \
|
||||
fbreader/src/formats/oeb/NCXReader.cpp \
|
||||
fbreader/src/formats/oeb/OEBBookReader.cpp \
|
||||
fbreader/src/formats/oeb/OEBCoverReader.cpp \
|
||||
fbreader/src/formats/oeb/OEBMetaInfoReader.cpp \
|
||||
fbreader/src/formats/oeb/OEBPlugin.cpp \
|
||||
fbreader/src/formats/oeb/OEBTextStream.cpp \
|
||||
fbreader/src/formats/oeb/XHTMLImageFinder.cpp \
|
||||
fbreader/src/formats/rtf/RtfBookReader.cpp \
|
||||
fbreader/src/formats/rtf/RtfDescriptionReader.cpp \
|
||||
fbreader/src/formats/rtf/RtfPlugin.cpp \
|
||||
fbreader/src/formats/rtf/RtfReader.cpp \
|
||||
fbreader/src/formats/rtf/RtfReaderStream.cpp \
|
||||
fbreader/src/formats/txt/PlainTextFormat.cpp \
|
||||
fbreader/src/formats/txt/TxtBookReader.cpp \
|
||||
fbreader/src/formats/txt/TxtPlugin.cpp \
|
||||
fbreader/src/formats/txt/TxtReader.cpp \
|
||||
fbreader/src/formats/util/EntityFilesCollector.cpp \
|
||||
fbreader/src/formats/util/MergedStream.cpp \
|
||||
fbreader/src/formats/util/MiscUtil.cpp \
|
||||
fbreader/src/formats/util/XMLTextStream.cpp \
|
||||
fbreader/src/formats/xhtml/XHTMLReader.cpp \
|
||||
zlibrary/core/src/constants/ZLXMLNamespace.cpp \
|
||||
zlibrary/core/src/encoding/DummyEncodingConverter.cpp \
|
||||
zlibrary/core/src/encoding/JavaEncodingConverter.cpp \
|
||||
zlibrary/core/src/encoding/Utf16EncodingConverters.cpp \
|
||||
zlibrary/core/src/encoding/ZLEncodingCollection.cpp \
|
||||
zlibrary/core/src/encoding/ZLEncodingConverter.cpp \
|
||||
zlibrary/core/src/filesystem/ZLDir.cpp \
|
||||
zlibrary/core/src/filesystem/ZLFile.cpp \
|
||||
zlibrary/core/src/filesystem/ZLFSManager.cpp \
|
||||
zlibrary/core/src/filesystem/ZLInputStreamDecorator.cpp \
|
||||
zlibrary/core/src/language/ZLCharSequence.cpp \
|
||||
zlibrary/core/src/language/ZLLanguageDetector.cpp \
|
||||
zlibrary/core/src/language/ZLLanguageList.cpp \
|
||||
zlibrary/core/src/language/ZLLanguageMatcher.cpp \
|
||||
zlibrary/core/src/language/ZLStatistics.cpp \
|
||||
zlibrary/core/src/language/ZLStatisticsGenerator.cpp \
|
||||
zlibrary/core/src/language/ZLStatisticsItem.cpp \
|
||||
zlibrary/core/src/language/ZLStatisticsXMLReader.cpp \
|
||||
zlibrary/core/src/library/ZLibrary.cpp \
|
||||
zlibrary/core/src/logger/ZLLogger.cpp \
|
||||
zlibrary/core/src/util/ZLFileUtil.cpp \
|
||||
zlibrary/core/src/util/ZLStringUtil.cpp \
|
||||
zlibrary/core/src/util/ZLUnicodeUtil.cpp \
|
||||
zlibrary/core/src/xml/ZLAsynchronousInputStream.cpp \
|
||||
zlibrary/core/src/xml/ZLPlainAsynchronousInputStream.cpp \
|
||||
zlibrary/core/src/xml/ZLXMLReader.cpp \
|
||||
zlibrary/text/src/model/ZLCachedMemoryAllocator.cpp \
|
||||
zlibrary/text/src/model/ZLTextModel.cpp \
|
||||
zlibrary/text/src/model/ZLTextParagraph.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLGzipInputStream.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLZDecompressor.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLZipDir.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLZipEntryCache.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLZipHeader.cpp \
|
||||
zlibrary/core/src/filesystem/zip/ZLZipInputStream.cpp \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFileInputStream.cpp \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFileOutputStream.cpp \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFSDir.cpp \
|
||||
zlibrary/core/src/unix/filesystem/ZLUnixFSManager.cpp \
|
||||
zlibrary/core/src/unix/library/ZLUnixLibrary.cpp \
|
||||
zlibrary/core/src/xml/expat/ZLXMLReaderInternal.cpp \
|
||||
zlibrary/ui/src/android/filesystem/JavaFSDir.cpp \
|
||||
zlibrary/ui/src/android/filesystem/JavaInputStream.cpp \
|
||||
zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.cpp \
|
||||
zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp
|
365
jni/NativeFormats/NativeFormats.pro.user
Normal file
365
jni/NativeFormats/NativeFormats.pro.user
Normal file
|
@ -0,0 +1,365 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by Qt Creator 2.4.1, 2012-07-04T17:57:28. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="int">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QString" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">System</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap"/>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.DesktopTarget</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./opt/QtSDK/debugger/Desktop/bin/gdb</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt в PATH Релиз</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/snowwlex/ws/FBReaderJ/jni/NativeFormats</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./opt/QtSDK/debugger/Desktop/bin/gdb</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt в PATH Отладка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/snowwlex/ws/FBReaderJ/jni/NativeFormats</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./opt/QtSDK/debugger/Desktop/bin/gdb</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.2 (Системная) Релиз</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/snowwlex/ws/FBReaderJ/jni/NativeFormats</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">5</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
|
||||
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./opt/QtSDK/debugger/Desktop/bin/gdb</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.2 (Системная) Отладка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/snowwlex/ws/FBReaderJ/jni/NativeFormats</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">5</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Установка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Без установки</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
|
||||
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||
<value type="int">0</value>
|
||||
<value type="int">1</value>
|
||||
<value type="int">2</value>
|
||||
<value type="int">3</value>
|
||||
<value type="int">4</value>
|
||||
<value type="int">5</value>
|
||||
<value type="int">6</value>
|
||||
<value type="int">7</value>
|
||||
<value type="int">8</value>
|
||||
<value type="int">9</value>
|
||||
<value type="int">10</value>
|
||||
<value type="int">11</value>
|
||||
<value type="int">12</value>
|
||||
<value type="int">13</value>
|
||||
<value type="int">14</value>
|
||||
</valuelist>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||
<value type="int">0</value>
|
||||
<value type="int">1</value>
|
||||
<value type="int">2</value>
|
||||
<value type="int">3</value>
|
||||
<value type="int">4</value>
|
||||
<value type="int">5</value>
|
||||
<value type="int">6</value>
|
||||
<value type="int">7</value>
|
||||
<value type="int">8</value>
|
||||
<value type="int">9</value>
|
||||
<value type="int">10</value>
|
||||
<value type="int">11</value>
|
||||
<value type="int">12</value>
|
||||
<value type="int">13</value>
|
||||
<value type="int">14</value>
|
||||
</valuelist>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">NativeFormats</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">NativeFormats.pro</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
|
||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="int">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
|
||||
<value type="QString">{bce7c847-fb35-41bd-9485-843f1b18eb8e}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">10</value>
|
||||
</data>
|
||||
</qtcreator>
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,10 +21,11 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <ZLInputStream.h>
|
||||
#include <ZLLogger.h>
|
||||
#include <ZLFile.h>
|
||||
#include <ZLStringUtil.h>
|
||||
#include <ZLFileImage.h>
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
#include "DocBookReader.h"
|
||||
#include "../../bookmodel/BookModel.h"
|
||||
|
@ -35,7 +36,8 @@
|
|||
|
||||
DocBookReader::DocBookReader(BookModel &model, const std::string &encoding) :
|
||||
OleStreamReader(encoding),
|
||||
myModelReader(model) {
|
||||
myModelReader(model),
|
||||
myPictureCounter(0) {
|
||||
myReadState = READ_TEXT;
|
||||
}
|
||||
|
||||
|
@ -160,6 +162,7 @@ void DocBookReader::handleStartField() {
|
|||
|
||||
void DocBookReader::handleSeparatorField() {
|
||||
static const std::string HYPERLINK = "HYPERLINK";
|
||||
static const std::string SEQUENCE = "SEQ";
|
||||
// static const std::string PAGE = "PAGE";
|
||||
// static const std::string PAGEREF = "PAGEREF";
|
||||
// static const std::string SHAPE = "SHAPE";
|
||||
|
@ -185,6 +188,12 @@ void DocBookReader::handleSeparatorField() {
|
|||
}
|
||||
}
|
||||
|
||||
if (!splitted.empty() && splitted.at(0) == SEQUENCE) {
|
||||
myReadFieldState = READ_FIELD_TEXT;
|
||||
myHyperlinkTypeState = NO_HYPERLINK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (splitted.size() < 2 || splitted.at(0) != HYPERLINK) {
|
||||
myReadFieldState = DONT_READ_FIELD_TEXT;
|
||||
//to remove pagination from TOC and not hyperlink fields
|
||||
|
@ -221,9 +230,12 @@ void DocBookReader::handleEndField() {
|
|||
|
||||
}
|
||||
|
||||
void DocBookReader::handleStartOfHeading() {
|
||||
//heading can be, for example, a picture
|
||||
//TODO implement
|
||||
void DocBookReader::handlePicture(const ZLFileImage::Blocks &blocks) {
|
||||
std::string number;
|
||||
ZLStringUtil::appendNumber(number, myPictureCounter++);
|
||||
myModelReader.addImageReference(number, 0, false);
|
||||
ZLFile file(myModelReader.model().book()->file().path(), "image/auto");
|
||||
myModelReader.addImage(number, new ZLFileImage(file, "", blocks));
|
||||
}
|
||||
|
||||
void DocBookReader::handleOtherControlChar(ZLUnicodeUtil::Ucs2Char ucs2char) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -51,7 +51,7 @@ private:
|
|||
void handleStartField();
|
||||
void handleSeparatorField();
|
||||
void handleEndField();
|
||||
void handleStartOfHeading();
|
||||
void handlePicture(const ZLFileImage::Blocks &blocks);
|
||||
void handleOtherControlChar(ZLUnicodeUtil::Ucs2Char ucs2char);
|
||||
|
||||
//formatting:
|
||||
|
@ -89,6 +89,7 @@ private:
|
|||
std::vector<FBTextKind> myKindStack;
|
||||
shared_ptr<ZLTextStyleEntry> myCurStyleEntry;
|
||||
OleMainStream::Style myCurStyleInfo;
|
||||
unsigned int myPictureCounter;
|
||||
};
|
||||
|
||||
inline DocBookReader::~DocBookReader() {}
|
||||
|
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "OleUtil.h"
|
||||
|
||||
#include "DocImageDataReader.h"
|
||||
|
||||
DocImageDataReader::DocImageDataReader(shared_ptr<OleStream> dataStream) :
|
||||
myDataStream(dataStream) {
|
||||
}
|
||||
|
||||
ZLFileImage::Blocks DocImageDataReader::getImagePieceInfo(unsigned int dataPos) {
|
||||
if (myDataStream.isNull()) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
if (!myDataStream->seek(dataPos, true)) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
|
||||
//reading PICF structure (see p. 421 [MS-DOC])
|
||||
unsigned int picfHeaderSize = 4 + 2 + 8; //record length, headerLength and storage format
|
||||
char headerBuffer[picfHeaderSize];
|
||||
if (myDataStream->read(headerBuffer, picfHeaderSize) != picfHeaderSize) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
unsigned int length = OleUtil::getU4Bytes(headerBuffer, 0);
|
||||
unsigned int headerLength = OleUtil::getU2Bytes(headerBuffer, 4);
|
||||
unsigned int formatType = OleUtil::getU2Bytes(headerBuffer, 6);
|
||||
|
||||
if (formatType != 0x0064) { //external link to some file; see p.394 [MS-DOC]
|
||||
//TODO implement
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
if (headerLength >= length) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
|
||||
//reading OfficeArtInlineSpContainer structure; see p.421 [MS-DOC] and p.56 [MS-ODRAW]
|
||||
if (!myDataStream->seek(headerLength - picfHeaderSize, false)) { //skip header
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
|
||||
char buffer[8]; //for OfficeArtRecordHeader structure; see p.69 [MS-ODRAW]
|
||||
bool found = false;
|
||||
unsigned int curOffset = 0;
|
||||
for (curOffset = headerLength; !found && curOffset + 8 <= length; curOffset += 8) {
|
||||
if (myDataStream->read(buffer, 8) != 8) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
unsigned int recordInstance = OleUtil::getU2Bytes(buffer, 0) >> 4;
|
||||
unsigned int recordType = OleUtil::getU2Bytes(buffer, 2);
|
||||
unsigned int recordLen = OleUtil::getU4Bytes(buffer, 4);
|
||||
|
||||
switch (recordType) {
|
||||
case 0xF000: case 0xF001: case 0xF002: case 0xF003: case 0xF004: case 0xF005:
|
||||
break;
|
||||
case 0xF007:
|
||||
{
|
||||
myDataStream->seek(33, false);
|
||||
char tmpBuf[1];
|
||||
myDataStream->read(tmpBuf, 1);
|
||||
unsigned int nameLength = OleUtil::getU1Byte(tmpBuf, 0);
|
||||
myDataStream->seek(nameLength * 2 + 2, false);
|
||||
curOffset += 33 + 1 + nameLength * 2 + 2;
|
||||
}
|
||||
break;
|
||||
case 0xF008:
|
||||
myDataStream->seek(8, false);
|
||||
curOffset += 8;
|
||||
break;
|
||||
case 0xF009:
|
||||
myDataStream->seek(16, false);
|
||||
curOffset += 16;
|
||||
break;
|
||||
case 0xF006: case 0xF00A: case 0xF00B: case 0xF00D: case 0xF00E: case 0xF00F: case 0xF010: case 0xF011: case 0xF122:
|
||||
myDataStream->seek(recordLen, false);
|
||||
curOffset += recordLen;
|
||||
break;
|
||||
case 0xF01A: //EMF
|
||||
case 0xF01B: //WMF
|
||||
case 0xF01C: //PICT
|
||||
//TODO implement
|
||||
return ZLFileImage::Blocks();
|
||||
case 0xF01D: //JPEG
|
||||
myDataStream->seek(17, false);
|
||||
curOffset += 17;
|
||||
if (recordInstance == 0x46B || recordInstance == 0x6E3) {
|
||||
myDataStream->seek(16, false);
|
||||
curOffset += 16;
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
case 0xF01E: //PNG
|
||||
myDataStream->seek(17, false);
|
||||
curOffset += 17;
|
||||
if (recordInstance == 0x6E1) {
|
||||
myDataStream->seek(16, false);
|
||||
curOffset += 16;
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
case 0xF01F: //DIB (BMP without 14-bytes header)
|
||||
myDataStream->seek(17, false);
|
||||
curOffset += 17;
|
||||
if (recordInstance == 0x7A9) {
|
||||
myDataStream->seek(16, false);
|
||||
curOffset += 16;
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
case 0xF020: //TIFF
|
||||
myDataStream->seek(17, false);
|
||||
curOffset += 17;
|
||||
if (recordInstance == 0x6E5) {
|
||||
myDataStream->seek(16, false);
|
||||
curOffset += 16;
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
case 0xF00C:
|
||||
default:
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
return ZLFileImage::Blocks();
|
||||
}
|
||||
return myDataStream->getBlockPieceInfoList(dataPos + curOffset, length - curOffset);
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef __DOCIMAGEDATAREADER_H__
|
||||
#define __DOCIMAGEDATAREADER_H__
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "OleStream.h"
|
||||
|
||||
class DocImageDataReader {
|
||||
|
||||
public:
|
||||
DocImageDataReader(shared_ptr<OleStream> dataStream);
|
||||
ZLFileImage::Blocks getImagePieceInfo(unsigned int dataPos);
|
||||
|
||||
private:
|
||||
shared_ptr<OleStream> myDataStream;
|
||||
};
|
||||
|
||||
#endif /* __DOCIMAGEDATAREADER_H__ */
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -47,6 +47,10 @@ OleMainStream::SectionInfo::SectionInfo() :
|
|||
newPage(true) {
|
||||
}
|
||||
|
||||
OleMainStream::PictureInfo::PictureInfo() :
|
||||
dataPos(0) {
|
||||
}
|
||||
|
||||
OleMainStream::OleMainStream(shared_ptr<OleStorage> storage, OleEntry oleEntry, shared_ptr<ZLInputStream> stream) :
|
||||
OleStream(storage, oleEntry, stream) {
|
||||
}
|
||||
|
@ -90,6 +94,11 @@ bool OleMainStream::open() {
|
|||
return false;
|
||||
}
|
||||
|
||||
OleEntry dataEntry;
|
||||
if (myStorage->getEntryByName("Data", dataEntry)) {
|
||||
myDataStream = new OleStream(myStorage, dataEntry, myBaseStream);
|
||||
}
|
||||
|
||||
//result of reading following structures doesn't check, because all these
|
||||
//problems can be ignored, and document can be showed anyway, maybe with wrong formatting
|
||||
readBookmarks(headerBuffer, tableEntry);
|
||||
|
@ -116,6 +125,14 @@ const OleMainStream::Bookmarks &OleMainStream::getBookmarks() const {
|
|||
return myBookmarks;
|
||||
}
|
||||
|
||||
const OleMainStream::PictureInfoList &OleMainStream::getPictureInfoList() const {
|
||||
return myPictureInfoList;
|
||||
}
|
||||
|
||||
shared_ptr<OleStream> OleMainStream::dataStream() const {
|
||||
return myDataStream;
|
||||
}
|
||||
|
||||
bool OleMainStream::readFIB(const char *headerBuffer) {
|
||||
int flags = OleUtil::getU2Bytes(headerBuffer, 0xA); //offset for flags
|
||||
|
||||
|
@ -314,7 +331,6 @@ bool OleMainStream::readBookmarks(const char *headerBuffer, const OleEntry &tabl
|
|||
return true; //there's no bookmarks
|
||||
}
|
||||
|
||||
|
||||
OleStream tableStream(myStorage, tableEntry, myBaseStream);
|
||||
std::string buffer;
|
||||
if (!readToBuffer(buffer, beginNamesInfo, namesInfoLength, tableStream)) {
|
||||
|
@ -352,7 +368,8 @@ bool OleMainStream::readBookmarks(const char *headerBuffer, const OleEntry &tabl
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t size = (charPosInfoLen / 4 - 1) / 2;
|
||||
static const unsigned int BKF_SIZE = 4;
|
||||
size_t size = calcCountOfPLC(charPosInfoLen, BKF_SIZE);
|
||||
std::vector<unsigned int> charPage;
|
||||
for (size_t index = 0, offset = 0; index < size; ++index, offset += 4) {
|
||||
charPage.push_back(OleUtil::getU4Bytes(buffer.c_str(), offset));
|
||||
|
@ -479,9 +496,9 @@ bool OleMainStream::readStylesheet(const char *headerBuffer, const OleEntry &tab
|
|||
}
|
||||
|
||||
bool OleMainStream::readCharInfoTable(const char *headerBuffer, const OleEntry &tableEntry) {
|
||||
//fcPlcfbteChpx structure is table with formatting for particular run of text
|
||||
unsigned int beginCharInfo = OleUtil::getU4Bytes(headerBuffer, 0xfa); // address of fcPlcfbteChpx structure
|
||||
size_t charInfoLength = (size_t)OleUtil::getU4Bytes(headerBuffer, 0xfe); // length of fcPlcfbteChpx structure
|
||||
//PlcfbteChpx structure is table with formatting for particular run of text
|
||||
unsigned int beginCharInfo = OleUtil::getU4Bytes(headerBuffer, 0xfa); // address of PlcfbteChpx structure
|
||||
size_t charInfoLength = (size_t)OleUtil::getU4Bytes(headerBuffer, 0xfe); // length of PlcfbteChpx structure
|
||||
if (charInfoLength < 4) {
|
||||
return false;
|
||||
}
|
||||
|
@ -492,9 +509,10 @@ bool OleMainStream::readCharInfoTable(const char *headerBuffer, const OleEntry &
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t size = (charInfoLength / 4 - 1) / 2;
|
||||
static const unsigned int CHPX_SIZE = 4;
|
||||
size_t size = calcCountOfPLC(charInfoLength, CHPX_SIZE);
|
||||
std::vector<unsigned int> charBlocks;
|
||||
for (size_t index = 0, offset = (size + 1) * 4; index < size; ++index, offset += 4) {
|
||||
for (size_t index = 0, offset = (size + 1) * 4; index < size; ++index, offset += CHPX_SIZE) {
|
||||
charBlocks.push_back(OleUtil::getU4Bytes(buffer.c_str(), offset));
|
||||
}
|
||||
|
||||
|
@ -520,6 +538,14 @@ bool OleMainStream::readCharInfoTable(const char *headerBuffer, const OleEntry &
|
|||
getCharInfo(chpxOffset, istd, formatPageBuffer + 1, len - 1, charInfo);
|
||||
}
|
||||
myCharInfoList.push_back(CharPosToCharInfo(charPos, charInfo));
|
||||
|
||||
if (chpxOffset != 0) {
|
||||
PictureInfo pictureInfo;
|
||||
if (getPictureInfo(chpxOffset, formatPageBuffer + 1, len - 1, pictureInfo)) {
|
||||
myPictureInfoList.push_back(CharPosToPictureInfo(charPos, pictureInfo));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
delete[] formatPageBuffer;
|
||||
|
@ -540,10 +566,11 @@ bool OleMainStream::readParagraphStyleTable(const char *headerBuffer, const OleE
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t size = (paragraphInfoLength / 4 - 1) / 2;
|
||||
static const unsigned int PAPX_SIZE = 4;
|
||||
size_t size = calcCountOfPLC(paragraphInfoLength, PAPX_SIZE);
|
||||
|
||||
std::vector<unsigned int> paragraphBlocks;
|
||||
for (size_t index = 0, tOffset = (size + 1) * 4; index < size; ++index, tOffset += 4) {
|
||||
for (size_t index = 0, tOffset = (size + 1) * 4; index < size; ++index, tOffset += PAPX_SIZE) {
|
||||
paragraphBlocks.push_back(OleUtil::getU4Bytes(buffer.c_str(), tOffset));
|
||||
}
|
||||
|
||||
|
@ -600,7 +627,8 @@ bool OleMainStream::readSectionsInfoTable(const char *headerBuffer, const OleEnt
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t decriptorsCount = (sectInfoLen - 4) / 16;
|
||||
static const unsigned int SED_SIZE = 12;
|
||||
size_t decriptorsCount = calcCountOfPLC(sectInfoLen, SED_SIZE);
|
||||
|
||||
//saving the section offsets (in character positions)
|
||||
std::vector<unsigned int> charPos;
|
||||
|
@ -611,7 +639,7 @@ bool OleMainStream::readSectionsInfoTable(const char *headerBuffer, const OleEnt
|
|||
|
||||
//saving sepx offsets
|
||||
std::vector<unsigned int> sectPage;
|
||||
for (size_t index = 0, tOffset = (decriptorsCount + 1) * 4; index < decriptorsCount; ++index, tOffset += 12) {
|
||||
for (size_t index = 0, tOffset = (decriptorsCount + 1) * 4; index < decriptorsCount; ++index, tOffset += SED_SIZE) {
|
||||
sectPage.push_back(OleUtil::getU4Bytes(buffer.c_str(), tOffset + 2));
|
||||
}
|
||||
|
||||
|
@ -780,6 +808,39 @@ void OleMainStream::getSectionInfo(const char *grpprlBuffer, size_t bytes, Secti
|
|||
}
|
||||
}
|
||||
|
||||
bool OleMainStream::getPictureInfo(unsigned int chpxOffset, const char *grpprlBuffer, unsigned int bytes, PictureInfo &pictureInfo) {
|
||||
//p. 105 of [MS-DOC] documentation
|
||||
unsigned int offset = 0;
|
||||
bool isFound = false;
|
||||
while (bytes >= offset + 2) {
|
||||
switch (OleUtil::getU2Bytes(grpprlBuffer, chpxOffset + offset)) {
|
||||
case 0x080a: // ole object, p.107 [MS-DOC]
|
||||
if (OleUtil::getU1Byte(grpprlBuffer, chpxOffset + offset + 2) == 0x01) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case 0x0806: // is not a picture, but a binary data? (sprmCFData, p.106 [MS-DOC])
|
||||
if (OleUtil::getU4Bytes(grpprlBuffer, chpxOffset + offset + 2) == 0x01) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
// case 0x0855: // sprmCFSpec, p.117 [MS-DOC], MUST BE applied with a value of 1 (see p.105 [MS-DOC])
|
||||
// if (OleUtil::getU1Byte(grpprlBuffer, chpxOffset + offset + 2) != 0x01) {
|
||||
// return false;
|
||||
// }
|
||||
// break;
|
||||
case 0x6a03: // location p.105 [MS-DOC]
|
||||
pictureInfo.dataPos = OleUtil::getU4Bytes(grpprlBuffer, chpxOffset + offset + 2);
|
||||
isFound = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
offset += getPrlLength(grpprlBuffer, chpxOffset + offset);
|
||||
}
|
||||
return isFound;
|
||||
}
|
||||
|
||||
OleMainStream::Style OleMainStream::getStyleFromStylesheet(unsigned int istd, const StyleSheet &stylesheet) {
|
||||
//TODO optimize it: StyleSheet can be map structure with istd key
|
||||
Style style;
|
||||
|
@ -831,7 +892,8 @@ bool OleMainStream::offsetToCharPos(unsigned int offset, unsigned int &charPos,
|
|||
return false;
|
||||
}
|
||||
if ((unsigned int)pieces.front().offset > offset) {
|
||||
return false;
|
||||
charPos = 0;
|
||||
return true;
|
||||
}
|
||||
if ((unsigned int)(pieces.back().offset + pieces.back().length) <= offset) {
|
||||
return false;
|
||||
|
@ -871,6 +933,11 @@ bool OleMainStream::readToBuffer(std::string &result, unsigned int offset, size_
|
|||
return true;
|
||||
}
|
||||
|
||||
unsigned int OleMainStream::calcCountOfPLC(unsigned int totalSize, unsigned int elementSize) {
|
||||
//calculates count of elements in PLC structure, formula from p.30 [MS-DOC]
|
||||
return (totalSize - 4) / (4 + elementSize);
|
||||
}
|
||||
|
||||
unsigned int OleMainStream::getPrlLength(const char *grpprlBuffer, unsigned int byteNumber) {
|
||||
unsigned int tmp;
|
||||
unsigned int opCode = OleUtil::getU2Bytes(grpprlBuffer, byteNumber);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -106,16 +106,22 @@ public:
|
|||
bool newPage;
|
||||
SectionInfo();
|
||||
};
|
||||
|
||||
typedef std::vector<SectionInfo> SectionInfoList;
|
||||
|
||||
struct Bookmark {
|
||||
unsigned int charPos;
|
||||
std::string name;
|
||||
};
|
||||
|
||||
typedef std::vector<Bookmark> Bookmarks;
|
||||
|
||||
struct PictureInfo {
|
||||
unsigned int dataPos;
|
||||
|
||||
PictureInfo();
|
||||
};
|
||||
typedef std::pair<unsigned int, PictureInfo> CharPosToPictureInfo;
|
||||
typedef std::vector<CharPosToPictureInfo> PictureInfoList;
|
||||
|
||||
public:
|
||||
OleMainStream(shared_ptr<OleStorage> storage, OleEntry oleEntry, shared_ptr<ZLInputStream> stream);
|
||||
|
||||
|
@ -125,6 +131,8 @@ public:
|
|||
const CharInfoList &getCharInfoList() const;
|
||||
const StyleInfoList &getStyleInfoList() const;
|
||||
const Bookmarks &getBookmarks() const;
|
||||
const PictureInfoList &getPictureInfoList() const;
|
||||
shared_ptr<OleStream> dataStream() const;
|
||||
|
||||
private:
|
||||
bool readFIB(const char *headerBuffer);
|
||||
|
@ -144,6 +152,7 @@ private: //formatting reader helpers methods
|
|||
static void getCharInfo(unsigned int chpxOffset, unsigned int istd, const char *grpprlBuffer, unsigned int bytes, CharInfo &charInfo);
|
||||
static void getStyleInfo(unsigned int papxOffset, const char *grpprlBuffer, unsigned int bytes, Style &styleInfo);
|
||||
static void getSectionInfo(const char *grpprlBuffer, size_t bytes, SectionInfo §ionInfo);
|
||||
static bool getPictureInfo(unsigned int chpxOffset, const char *grpprlBuffer, unsigned int bytes, PictureInfo &pictureInfo);
|
||||
|
||||
static Style getStyleFromStylesheet(unsigned int istd, const StyleSheet &stylesheet);
|
||||
static int getStyleIndex(unsigned int istd, const std::vector<bool> &isFilled, const StyleSheet &stylesheet);
|
||||
|
@ -152,6 +161,8 @@ private: //formatting reader helpers methods
|
|||
static bool offsetToCharPos(unsigned int offset, unsigned int &charPos, const Pieces &pieces);
|
||||
static bool readToBuffer(std::string &result, unsigned int offset, size_t length, OleStream &stream);
|
||||
|
||||
static unsigned int calcCountOfPLC(unsigned int totalSize, unsigned int elementSize);
|
||||
|
||||
private:
|
||||
enum PrlFlag {
|
||||
UNSET = 0,
|
||||
|
@ -171,8 +182,11 @@ private:
|
|||
CharInfoList myCharInfoList;
|
||||
StyleInfoList myStyleInfoList;
|
||||
SectionInfoList mySectionInfoList;
|
||||
PictureInfoList myPictureInfoList;
|
||||
|
||||
Bookmarks myBookmarks;
|
||||
|
||||
shared_ptr<OleStream> myDataStream;
|
||||
};
|
||||
|
||||
#endif /* __OLEMAINSTREAM_H__ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -259,11 +259,11 @@ bool OleStorage::readOleEntry(int propNumber, OleEntry &e) {
|
|||
chainCur < (int)(e.isBigBlock ? myBBD.size() : mySBD.size()) &&
|
||||
e.blocks.size() <= e.length / (e.isBigBlock ? mySectorSize : myShortSectorSize));
|
||||
}
|
||||
e.length = std::min(e.length, (unsigned int)(e.isBigBlock ? mySectorSize : myShortSectorSize) * e.blocks.size());
|
||||
e.length = std::min(e.length, (unsigned int)((e.isBigBlock ? mySectorSize : myShortSectorSize) * e.blocks.size()));
|
||||
return true;
|
||||
}
|
||||
|
||||
unsigned int OleStorage::getFileOffsetOfBlock(OleEntry &e, unsigned int blockNumber) {
|
||||
unsigned int OleStorage::getFileOffsetOfBlock(const OleEntry &e, unsigned int blockNumber) const {
|
||||
unsigned int res;
|
||||
if (e.isBigBlock) {
|
||||
res = BBD_BLOCK_SIZE + e.blocks.at(blockNumber) * mySectorSize;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -55,11 +55,11 @@ public:
|
|||
const std::vector<OleEntry> &getEntries() const;
|
||||
bool getEntryByName(std::string name, OleEntry &entry) const;
|
||||
|
||||
unsigned int getSectorSize();
|
||||
unsigned int getShortSectorSize();
|
||||
unsigned int getSectorSize() const;
|
||||
unsigned int getShortSectorSize() const;
|
||||
|
||||
public: //TODO make private
|
||||
unsigned int getFileOffsetOfBlock(OleEntry &e, unsigned int blockNumber);
|
||||
unsigned int getFileOffsetOfBlock(const OleEntry &e, unsigned int blockNumber) const;
|
||||
|
||||
private:
|
||||
bool readDIFAT(char *oleBuf);
|
||||
|
@ -86,7 +86,7 @@ private:
|
|||
};
|
||||
|
||||
inline const std::vector<OleEntry> &OleStorage::getEntries() const { return myEntries; }
|
||||
inline unsigned int OleStorage::getSectorSize() { return mySectorSize; }
|
||||
inline unsigned int OleStorage::getShortSectorSize() { return myShortSectorSize; }
|
||||
inline unsigned int OleStorage::getSectorSize() const { return mySectorSize; }
|
||||
inline unsigned int OleStorage::getShortSectorSize() const { return myShortSectorSize; }
|
||||
|
||||
#endif /* __OLESTORAGE_H__ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -70,20 +70,17 @@ size_t OleStream::read(char *buffer, size_t maxSize) {
|
|||
|
||||
readedBytes = myBaseStream->read(buffer, std::min(length, bytesLeftInCurBlock));
|
||||
for (size_t i = 0; i < toReadBlocks; ++i) {
|
||||
size_t readbytes;
|
||||
++curBlockNumber;
|
||||
if (++curBlockNumber >= myOleEntry.blocks.size()) {
|
||||
break;
|
||||
}
|
||||
newFileOffset = myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber);
|
||||
myBaseStream->seek(newFileOffset, true);
|
||||
readbytes = myBaseStream->read(buffer + readedBytes, std::min(length - readedBytes, sectorSize));
|
||||
readedBytes += readbytes;
|
||||
readedBytes += myBaseStream->read(buffer + readedBytes, std::min(length - readedBytes, sectorSize));
|
||||
}
|
||||
if (toReadBytes > 0) {
|
||||
size_t readbytes;
|
||||
++curBlockNumber;
|
||||
if (toReadBytes > 0 && ++curBlockNumber < myOleEntry.blocks.size()) {
|
||||
newFileOffset = myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber);
|
||||
myBaseStream->seek(newFileOffset, true);
|
||||
readbytes = myBaseStream->read(buffer + readedBytes, toReadBytes);
|
||||
readedBytes += readbytes;
|
||||
readedBytes += myBaseStream->read(buffer + readedBytes, toReadBytes);
|
||||
}
|
||||
myOleOffset += readedBytes;
|
||||
return readedBytes;
|
||||
|
@ -125,3 +122,74 @@ bool OleStream::seek(unsigned int offset, bool absoluteOffset) {
|
|||
size_t OleStream::offset() {
|
||||
return myOleOffset;
|
||||
}
|
||||
|
||||
ZLFileImage::Blocks OleStream::getBlockPieceInfoList(unsigned int offset, unsigned int size) const {
|
||||
ZLFileImage::Blocks list;
|
||||
unsigned int sectorSize = (myOleEntry.isBigBlock ? myStorage->getSectorSize() : myStorage->getShortSectorSize());
|
||||
unsigned int curBlockNumber = offset / sectorSize;
|
||||
if (curBlockNumber >= myOleEntry.blocks.size()) {
|
||||
return list;
|
||||
}
|
||||
unsigned int modBlock = offset % sectorSize;
|
||||
unsigned int startFileOffset = myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber) + modBlock;
|
||||
|
||||
unsigned int bytesLeftInCurBlock = sectorSize - modBlock;
|
||||
unsigned int toReadBlocks = 0, toReadBytes = 0;
|
||||
if (bytesLeftInCurBlock < size) {
|
||||
toReadBlocks = (size - bytesLeftInCurBlock) / sectorSize;
|
||||
toReadBytes = (size - bytesLeftInCurBlock) % sectorSize;
|
||||
}
|
||||
|
||||
unsigned int readedBytes = std::min(size, bytesLeftInCurBlock);
|
||||
list.push_back(ZLFileImage::Block(startFileOffset, readedBytes));
|
||||
|
||||
for (unsigned int i = 0; i < toReadBlocks; ++i) {
|
||||
if (++curBlockNumber >= myOleEntry.blocks.size()) {
|
||||
break;
|
||||
}
|
||||
unsigned int newFileOffset = myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber);
|
||||
unsigned int readbytes = std::min(size - readedBytes, sectorSize);
|
||||
list.push_back(ZLFileImage::Block(newFileOffset, readbytes));
|
||||
readedBytes += readbytes;
|
||||
}
|
||||
if (toReadBytes > 0 && ++curBlockNumber < myOleEntry.blocks.size()) {
|
||||
unsigned int newFileOffset = myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber);
|
||||
unsigned int readbytes = toReadBytes;
|
||||
list.push_back(ZLFileImage::Block(newFileOffset, readbytes));
|
||||
readedBytes += readbytes;
|
||||
}
|
||||
|
||||
return concatBlocks(list);
|
||||
}
|
||||
|
||||
ZLFileImage::Blocks OleStream::concatBlocks(const ZLFileImage::Blocks &blocks) {
|
||||
if (blocks.size() < 2) {
|
||||
return blocks;
|
||||
}
|
||||
ZLFileImage::Blocks optList;
|
||||
ZLFileImage::Block curBlock = blocks.at(0);
|
||||
unsigned int nextOffset = curBlock.offset + curBlock.size;
|
||||
for (size_t i = 1; i < blocks.size(); ++i) {
|
||||
ZLFileImage::Block b = blocks.at(i);
|
||||
if (b.offset == nextOffset) {
|
||||
curBlock.size += b.size;
|
||||
nextOffset += b.size;
|
||||
} else {
|
||||
optList.push_back(curBlock);
|
||||
curBlock = b;
|
||||
nextOffset = curBlock.offset + curBlock.size;
|
||||
}
|
||||
}
|
||||
optList.push_back(curBlock);
|
||||
return optList;
|
||||
}
|
||||
|
||||
size_t OleStream::fileOffset() {
|
||||
size_t sectorSize = (size_t)(myOleEntry.isBigBlock ? myStorage->getSectorSize() : myStorage->getShortSectorSize());
|
||||
unsigned int curBlockNumber = myOleOffset / sectorSize;
|
||||
if (curBlockNumber >= myOleEntry.blocks.size()) {
|
||||
return 0;
|
||||
}
|
||||
unsigned int modBlock = myOleOffset % sectorSize;
|
||||
return myStorage->getFileOffsetOfBlock(myOleEntry, curBlockNumber) + modBlock;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -20,6 +20,8 @@
|
|||
#ifndef __OLESTREAM_H__
|
||||
#define __OLESTREAM_H__
|
||||
|
||||
#include <ZLFileImage.h>
|
||||
|
||||
#include "OleStorage.h"
|
||||
|
||||
class OleStream {
|
||||
|
@ -36,6 +38,11 @@ public:
|
|||
bool seek(unsigned int offset, bool absoluteOffset);
|
||||
size_t offset();
|
||||
|
||||
public:
|
||||
ZLFileImage::Blocks getBlockPieceInfoList(unsigned int offset, unsigned int size) const;
|
||||
static ZLFileImage::Blocks concatBlocks(const ZLFileImage::Blocks &blocks);
|
||||
size_t fileOffset();
|
||||
|
||||
public:
|
||||
bool eof() const;
|
||||
|
||||
|
@ -48,6 +55,4 @@ protected:
|
|||
unsigned int myOleOffset;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /* __OLESTREAM_H__ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -26,6 +26,7 @@
|
|||
#include "OleMainStream.h"
|
||||
#include "DocBookReader.h"
|
||||
#include "OleUtil.h"
|
||||
#include "DocImageDataReader.h"
|
||||
|
||||
#include "OleStreamReader.h"
|
||||
|
||||
|
@ -42,13 +43,14 @@ const ZLUnicodeUtil::Ucs2Char OleStreamReader::WORD_START_FIELD = 0x0013;
|
|||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::WORD_SEPARATOR_FIELD = 0x0014;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::WORD_END_FIELD = 0x0015;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::WORD_ZERO_WIDTH_UNBREAKABLE_SPACE = 0xfeff;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::PICTURE = 0x0001;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::DRAWN_OBJECT = 0x0008;
|
||||
|
||||
//unicode values:
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::NULL_SYMBOL = 0x0;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::FILE_SEPARATOR = 0x1c;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::LINE_FEED = 0x000a;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::SOFT_HYPHEN = 0xad;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::START_OF_HEADING = 0x0001;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::SPACE = 0x20;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::SHORT_DEFIS = 0x2D;
|
||||
const ZLUnicodeUtil::Ucs2Char OleStreamReader::VERTICAL_LINE = 0x7C;
|
||||
|
@ -67,6 +69,7 @@ void OleStreamReader::clear() {
|
|||
myNextStyleInfoIndex = 0;
|
||||
myNextCharInfoIndex = 0;
|
||||
myNextBookmarkIndex = 0;
|
||||
myNextPictureInfoIndex = 0;
|
||||
}
|
||||
|
||||
bool OleStreamReader::readStream(OleMainStream &oleMainStream) {
|
||||
|
@ -122,8 +125,8 @@ bool OleStreamReader::readStream(OleMainStream &oleMainStream) {
|
|||
case WORD_END_FIELD:
|
||||
handleEndField();
|
||||
break;
|
||||
case START_OF_HEADING:
|
||||
handleStartOfHeading();
|
||||
case PICTURE:
|
||||
//pictures handle method is called from processPicture()
|
||||
break;
|
||||
default:
|
||||
handleOtherControlChar(ucs2char);
|
||||
|
@ -133,11 +136,11 @@ bool OleStreamReader::readStream(OleMainStream &oleMainStream) {
|
|||
continue; //skip
|
||||
} else {
|
||||
//debug output
|
||||
//std::string utf8String;
|
||||
//ZLUnicodeUtil::Ucs2String ucs2String;
|
||||
//ucs2String.push_back(ucs2char);
|
||||
//ZLUnicodeUtil::ucs2ToUtf8(utf8String, ucs2String);
|
||||
//printf("%s", utf8String.c_str());
|
||||
// std::string utf8String;
|
||||
// ZLUnicodeUtil::Ucs2String ucs2String;
|
||||
// ucs2String.push_back(ucs2char);
|
||||
// ZLUnicodeUtil::ucs2ToUtf8(utf8String, ucs2String);
|
||||
// printf("%s", utf8String.c_str());
|
||||
|
||||
handleChar(ucs2char);
|
||||
}
|
||||
|
@ -152,7 +155,40 @@ bool OleStreamReader::getUcs2Char(OleMainStream &stream, ZLUnicodeUtil::Ucs2Char
|
|||
return false;
|
||||
}
|
||||
}
|
||||
ucs2char = myBuffer.at(myCurBufferPosition++);
|
||||
processStyles(stream);
|
||||
if (ucs2char == PICTURE) {
|
||||
processPicture(stream);
|
||||
}
|
||||
++myCurCharPos;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OleStreamReader::processPicture(OleMainStream &stream) {
|
||||
shared_ptr<OleStream> dataStream = stream.dataStream();
|
||||
if (dataStream.isNull()) {
|
||||
return;
|
||||
}
|
||||
const OleMainStream::PictureInfoList &pictureInfoList = stream.getPictureInfoList();
|
||||
if (pictureInfoList.empty()) {
|
||||
return;
|
||||
}
|
||||
//seek to curCharPos, because not all entries in PictureInfo are real pictures
|
||||
while(myNextPictureInfoIndex < pictureInfoList.size() && pictureInfoList.at(myNextPictureInfoIndex).first < myCurCharPos) {
|
||||
++myNextPictureInfoIndex;
|
||||
}
|
||||
while (myNextPictureInfoIndex < pictureInfoList.size() && pictureInfoList.at(myNextPictureInfoIndex).first == myCurCharPos) {
|
||||
OleMainStream::PictureInfo info = pictureInfoList.at(myNextPictureInfoIndex).second;
|
||||
DocImageDataReader imageReader(dataStream);
|
||||
ZLFileImage::Blocks list = imageReader.getImagePieceInfo(info.dataPos);
|
||||
if (!list.empty()) {
|
||||
handlePicture(list);
|
||||
}
|
||||
++myNextPictureInfoIndex;
|
||||
}
|
||||
}
|
||||
|
||||
void OleStreamReader::processStyles(OleMainStream &stream) {
|
||||
const OleMainStream::StyleInfoList &styleInfoList = stream.getStyleInfoList();
|
||||
if (!styleInfoList.empty()) {
|
||||
while (myNextStyleInfoIndex < styleInfoList.size() && styleInfoList.at(myNextStyleInfoIndex).first == myCurCharPos) {
|
||||
|
@ -179,10 +215,6 @@ bool OleStreamReader::getUcs2Char(OleMainStream &stream, ZLUnicodeUtil::Ucs2Char
|
|||
++myNextBookmarkIndex;
|
||||
}
|
||||
}
|
||||
|
||||
ucs2char = myBuffer.at(myCurBufferPosition++);
|
||||
++myCurCharPos;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OleStreamReader::fillBuffer(OleMainStream &stream) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -41,13 +41,14 @@ public:
|
|||
static const ZLUnicodeUtil::Ucs2Char WORD_SEPARATOR_FIELD;
|
||||
static const ZLUnicodeUtil::Ucs2Char WORD_END_FIELD;
|
||||
static const ZLUnicodeUtil::Ucs2Char WORD_ZERO_WIDTH_UNBREAKABLE_SPACE;
|
||||
static const ZLUnicodeUtil::Ucs2Char PICTURE;
|
||||
static const ZLUnicodeUtil::Ucs2Char DRAWN_OBJECT;
|
||||
|
||||
//unicode values:
|
||||
static const ZLUnicodeUtil::Ucs2Char NULL_SYMBOL;
|
||||
static const ZLUnicodeUtil::Ucs2Char FILE_SEPARATOR;
|
||||
static const ZLUnicodeUtil::Ucs2Char LINE_FEED;
|
||||
static const ZLUnicodeUtil::Ucs2Char SOFT_HYPHEN;
|
||||
static const ZLUnicodeUtil::Ucs2Char START_OF_HEADING;
|
||||
static const ZLUnicodeUtil::Ucs2Char SPACE;
|
||||
static const ZLUnicodeUtil::Ucs2Char SHORT_DEFIS;
|
||||
static const ZLUnicodeUtil::Ucs2Char VERTICAL_LINE;
|
||||
|
@ -70,7 +71,7 @@ protected:
|
|||
virtual void handleStartField() = 0;
|
||||
virtual void handleSeparatorField() = 0;
|
||||
virtual void handleEndField() = 0;
|
||||
virtual void handleStartOfHeading() = 0;
|
||||
virtual void handlePicture(const ZLFileImage::Blocks &blocks) = 0;
|
||||
virtual void handleOtherControlChar(ZLUnicodeUtil::Ucs2Char ucs2char) = 0;
|
||||
|
||||
virtual void handleFontStyle(unsigned int fontStyle) = 0;
|
||||
|
@ -79,6 +80,8 @@ protected:
|
|||
|
||||
private:
|
||||
bool getUcs2Char(OleMainStream &stream, ZLUnicodeUtil::Ucs2Char &ucs2char);
|
||||
void processPicture(OleMainStream &stream);
|
||||
void processStyles(OleMainStream &stream);
|
||||
bool fillBuffer(OleMainStream &stream);
|
||||
|
||||
private:
|
||||
|
@ -94,6 +97,7 @@ private:
|
|||
size_t myNextStyleInfoIndex;
|
||||
size_t myNextCharInfoIndex;
|
||||
size_t myNextBookmarkIndex;
|
||||
size_t myNextPictureInfoIndex;
|
||||
};
|
||||
|
||||
#endif /* __OLESTREAMREADER_H__ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2010 Geometer Plus <contact@geometerplus.com>
|
||||
* Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <ZLUnicodeUtil.h>
|
||||
#include <ZLStringUtil.h>
|
||||
#include <ZLXMLNamespace.h>
|
||||
#include <ZLInputStream.h>
|
||||
#include <ZLLogger.h>
|
||||
|
||||
#include "XHTMLReader.h"
|
||||
|
|
|
@ -166,7 +166,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
|||
Method_ZLFile_getPath = new StringMethod(Class_ZLFile, "getPath", "()");
|
||||
Method_ZLFile_size = new LongMethod(Class_ZLFile, "size", "()");
|
||||
|
||||
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
||||
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;[I[I)V");
|
||||
|
||||
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(Class_Paths, "cacheDirectory", Class_java_lang_String, "()");
|
||||
|
||||
|
@ -213,14 +213,25 @@ jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
|
|||
jobject javaFile = createJavaFile(env, image.file().path());
|
||||
jstring javaEncoding = createJavaString(env, image.encoding());
|
||||
|
||||
std::vector<jint> offsets, sizes;
|
||||
const ZLFileImage::Blocks &blocks = image.blocks();
|
||||
for (size_t i = 0; i < blocks.size(); ++i) {
|
||||
offsets.push_back((jint)blocks.at(i).offset);
|
||||
sizes.push_back((jint)blocks.at(i).size);
|
||||
}
|
||||
jintArray javaOffsets = createJavaIntArray(env, offsets);
|
||||
jintArray javaSizes = createJavaIntArray(env, sizes);
|
||||
|
||||
jobject javaImage = Constructor_ZLFileImage->call(
|
||||
javaMimeType, javaFile, javaEncoding,
|
||||
image.offset(), image.size()
|
||||
javaOffsets, javaSizes
|
||||
);
|
||||
|
||||
env->DeleteLocalRef(javaEncoding);
|
||||
env->DeleteLocalRef(javaFile);
|
||||
env->DeleteLocalRef(javaMimeType);
|
||||
env->DeleteLocalRef(javaOffsets);
|
||||
env->DeleteLocalRef(javaSizes);
|
||||
|
||||
return javaImage;
|
||||
}
|
||||
|
|
|
@ -20,28 +20,53 @@
|
|||
#ifndef __ZLFILEIMAGE_H__
|
||||
#define __ZLFILEIMAGE_H__
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <ZLFile.h>
|
||||
|
||||
#include "ZLStreamImage.h"
|
||||
#include "ZLImage.h"
|
||||
|
||||
class ZLFileImage : public ZLStreamImage {
|
||||
class ZLFileImage : public ZLSingleImage {
|
||||
|
||||
public:
|
||||
struct Block {
|
||||
unsigned int offset;
|
||||
unsigned int size;
|
||||
|
||||
Block(unsigned int off, unsigned int s);
|
||||
};
|
||||
typedef std::vector<Block> Blocks;
|
||||
|
||||
public:
|
||||
ZLFileImage(const ZLFile &file, const std::string &encoding, size_t offset, size_t size = 0);
|
||||
ZLFileImage(const ZLFile &file, const std::string &encoding, const Blocks &blocks);
|
||||
|
||||
//Kind kind() const;
|
||||
const ZLFile &file() const;
|
||||
const std::string &encoding() const;
|
||||
const ZLFileImage::Blocks& blocks() const;
|
||||
|
||||
protected:
|
||||
//shared_ptr<ZLInputStream> inputStream() const;
|
||||
|
||||
private:
|
||||
const ZLFile myFile;
|
||||
const std::string myEncoding;
|
||||
Blocks myBlocks;
|
||||
};
|
||||
|
||||
inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding, size_t offset, size_t size) : ZLStreamImage(file.mimeType(), encoding, offset, size), myFile(file) {}
|
||||
inline ZLFileImage::Block::Block(unsigned int off, unsigned int s) : offset(off), size(s) {}
|
||||
|
||||
inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding, size_t offset, size_t size) : ZLSingleImage(file.mimeType()), myFile(file), myEncoding(encoding) {
|
||||
myBlocks.push_back(Block(offset, size));
|
||||
}
|
||||
|
||||
inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding, const ZLFileImage::Blocks &blocks) : ZLSingleImage(file.mimeType()), myFile(file), myEncoding(encoding), myBlocks(blocks) { }
|
||||
|
||||
//inline ZLSingleImage::Kind ZLFileImage::kind() const { return FILE_IMAGE; }
|
||||
inline const ZLFile &ZLFileImage::file() const { return myFile; }
|
||||
inline const std::string &ZLFileImage::encoding() const { return myEncoding; }
|
||||
inline const ZLFileImage::Blocks &ZLFileImage::blocks() const { return myBlocks; }
|
||||
//inline shared_ptr<ZLInputStream> ZLFileImage::inputStream() const { return myFile.inputStream(); }
|
||||
|
||||
#endif /* __ZLFILEIMAGE_H__ */
|
||||
|
|
|
@ -34,12 +34,19 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
public static ZLFileImage byUrlPath(String urlPath) {
|
||||
try {
|
||||
final String[] data = urlPath.split("\000");
|
||||
int count = Integer.parseInt(data[2]);
|
||||
int[] offsets = new int[count];
|
||||
int[] lengths = new int[count];
|
||||
for (int i = 0; i < count; ++i) {
|
||||
offsets[i] = Integer.parseInt(data[3 + i]);
|
||||
lengths[i] = Integer.parseInt(data[3 + count + i]);
|
||||
}
|
||||
return new ZLFileImage(
|
||||
MimeType.IMAGE_AUTO,
|
||||
ZLFile.createFileByPath(data[0]),
|
||||
data[1],
|
||||
Integer.parseInt(data[2]),
|
||||
Integer.parseInt(data[3])
|
||||
offsets,
|
||||
lengths
|
||||
);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -49,19 +56,33 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
|
||||
private final ZLFile myFile;
|
||||
private final String myEncoding;
|
||||
private final int myOffset;
|
||||
private final int myLength;
|
||||
private final int[] myOffsets;
|
||||
private final int[] myLengths;
|
||||
|
||||
public ZLFileImage(String mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths) {
|
||||
this(MimeType.get(mimeType), file, encoding, offsets, lengths);
|
||||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths) {
|
||||
super(mimeType);
|
||||
myFile = file;
|
||||
myEncoding = encoding != null ? encoding : ENCODING_NONE;
|
||||
myOffsets = offsets;
|
||||
myLengths = lengths;
|
||||
}
|
||||
|
||||
public ZLFileImage(String mimeType, ZLFile file, String encoding, int offset, int length) {
|
||||
this(MimeType.get(mimeType), file, encoding, offset, length);
|
||||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file, String encoding, int offset, int length) {
|
||||
super(mimeType);
|
||||
myFile = file;
|
||||
myEncoding = encoding != null ? encoding : ENCODING_NONE;
|
||||
myOffset = offset;
|
||||
myLength = length;
|
||||
super(mimeType);
|
||||
myFile = file;
|
||||
myEncoding = encoding != null ? encoding : ENCODING_NONE;
|
||||
myOffsets = new int[1];
|
||||
myLengths = new int[1];
|
||||
myOffsets[0] = offset;
|
||||
myLengths[0] = length;
|
||||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file) {
|
||||
|
@ -69,15 +90,34 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
}
|
||||
|
||||
public String getURI() {
|
||||
return SCHEME + "://" + myFile.getPath() + "\000" + myEncoding + "\000" + myOffset + "\000" + myLength;
|
||||
String result = SCHEME + "://" + myFile.getPath() + "\000" + myEncoding + "\000" + myOffsets.length;
|
||||
for (int offset : myOffsets) {
|
||||
result += "\000" + offset;
|
||||
}
|
||||
for (int length : myLengths) {
|
||||
result += "\000" + length;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream inputStream() {
|
||||
try {
|
||||
final InputStream stream =
|
||||
new SliceInputStream(myFile.getInputStream(), myOffset, myLength != 0 ? myLength : Integer.MAX_VALUE);
|
||||
if (ENCODING_NONE.equals(myEncoding)) {
|
||||
final InputStream stream;
|
||||
if (myOffsets.length == 1) {
|
||||
final int offset = myOffsets[0];
|
||||
final int length = myLengths[0];
|
||||
stream = new SliceInputStream(myFile.getInputStream(), offset, length != 0 ? length : Integer.MAX_VALUE);
|
||||
} else {
|
||||
final InputStream[] streams = new InputStream[myOffsets.length];
|
||||
for (int i = 0; i < myOffsets.length; ++i) {
|
||||
final int offset = myOffsets[i];
|
||||
final int length = myLengths[i];
|
||||
streams[i] = new SliceInputStream(myFile.getInputStream(), offset, length != 0 ? length : Integer.MAX_VALUE);
|
||||
}
|
||||
stream = new MergedInputStream(streams);
|
||||
}
|
||||
if (ENCODING_NONE.equals(myEncoding)) {
|
||||
return stream;
|
||||
} else if (ENCODING_HEX.equals(myEncoding)) {
|
||||
return new HexInputStream(stream);
|
||||
|
|
107
src/org/geometerplus/zlibrary/core/util/MergedInputStream.java
Normal file
107
src/org/geometerplus/zlibrary/core/util/MergedInputStream.java
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2012 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.zlibrary.core.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class MergedInputStream extends InputStream {
|
||||
private final InputStream[] myStreams;
|
||||
private InputStream myCurrentStream;
|
||||
private int myCurrentStreamNumber;
|
||||
|
||||
public MergedInputStream(InputStream[] streams) throws IOException {
|
||||
myStreams = streams;
|
||||
myCurrentStream = streams[0];
|
||||
myCurrentStreamNumber = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
int readed = -1;
|
||||
boolean streamIsAvailable = true;
|
||||
while (readed == -1 && streamIsAvailable) {
|
||||
readed = myCurrentStream.read();
|
||||
if (readed == -1) {
|
||||
streamIsAvailable = nextStream();
|
||||
}
|
||||
}
|
||||
return readed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] b, int off, int len) throws IOException {
|
||||
int bytesToRead = len;
|
||||
int bytesReaded = 0;
|
||||
boolean streamIsAvailable = true;
|
||||
while (bytesToRead > 0 && streamIsAvailable) {
|
||||
int readed = myCurrentStream.read(b, off, bytesToRead);
|
||||
if (readed != -1) {
|
||||
bytesToRead -= readed;
|
||||
off += readed;
|
||||
bytesReaded += readed;
|
||||
}
|
||||
if (bytesToRead != 0) {
|
||||
streamIsAvailable = nextStream();
|
||||
}
|
||||
}
|
||||
return bytesReaded == 0 ? -1 : bytesReaded;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long skip(long n) throws IOException {
|
||||
long skipped = myCurrentStream.skip(n);
|
||||
boolean streamIsAvailable = true;
|
||||
while (skipped < n && streamIsAvailable) {
|
||||
streamIsAvailable = nextStream();
|
||||
if (streamIsAvailable) {
|
||||
skipped += myCurrentStream.skip(n - skipped);
|
||||
}
|
||||
}
|
||||
return skipped;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int available() throws IOException {
|
||||
int total = 0;
|
||||
for (int i = myCurrentStreamNumber; i < myStreams.length; ++i) {
|
||||
total += myStreams[i].available();
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() throws IOException {
|
||||
myCurrentStream = myStreams[0];
|
||||
myCurrentStreamNumber = 0;
|
||||
for (InputStream stream : myStreams) {
|
||||
stream.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean nextStream() {
|
||||
if (myCurrentStreamNumber + 1 >= myStreams.length) {
|
||||
return false;
|
||||
}
|
||||
++myCurrentStreamNumber;
|
||||
myCurrentStream = myStreams[myCurrentStreamNumber];
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue