@ -1 +1,2 @@
|
||||
#usr/lib
|
||||
/opt/trinity/bin
|
||||
/opt/trinity/share
|
||||
|
@ -0,0 +1,3 @@
|
||||
add_subdirectory( data )
|
||||
add_subdirectory( desktop )
|
||||
add_subdirectory( src )
|
@ -0,0 +1,49 @@
|
||||
##### default files
|
||||
|
||||
file( GLOB _default_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/default/*.xml )
|
||||
install(
|
||||
FILES ${_default_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/default
|
||||
)
|
||||
|
||||
|
||||
##### format files
|
||||
|
||||
file( GLOB _formats_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/formats/fb2/* )
|
||||
install(
|
||||
FILES ${_formats_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/formats/fb2
|
||||
)
|
||||
|
||||
file( GLOB _formats_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/formats/html/* )
|
||||
install(
|
||||
FILES ${_formats_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/formats/html
|
||||
)
|
||||
|
||||
|
||||
##### help files
|
||||
|
||||
file( GLOB _help_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/help/*.fb2 )
|
||||
install(
|
||||
FILES ${_help_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/help
|
||||
)
|
||||
|
||||
|
||||
##### icons files
|
||||
|
||||
file( GLOB_RECURSE _icon_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/icons/*)
|
||||
install(
|
||||
FILES ${_icon_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/icons
|
||||
)
|
||||
|
||||
|
||||
##### resource files
|
||||
|
||||
file( GLOB _xml_resource_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/resources/*.xml )
|
||||
install(
|
||||
FILES ${_xml_resource_files}
|
||||
DESTINATION ${DATA_INSTALL_DIR}/tde-ebook-reader/resources
|
||||
)
|
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<menubar>
|
||||
<item id="bookInfo"/>
|
||||
<item id="toc"/>
|
||||
<submenu id="library">
|
||||
<item id="showLibrary"/>
|
||||
<item id="previousBook"/>
|
||||
<item id="showRecent"/>
|
||||
<item id="addBook"/>
|
||||
<item id="showHelp"/>
|
||||
</submenu>
|
||||
<submenu id="navigate">
|
||||
<item id="gotoHome"/>
|
||||
<item id="gotoPageNumber"/>
|
||||
<item id="gotoSectionStart"/>
|
||||
<item id="gotoSectionEnd"/>
|
||||
<item id="nextTOCSection"/>
|
||||
<item id="previousTOCSection"/>
|
||||
<item id="undo"/>
|
||||
<item id="redo"/>
|
||||
</submenu>
|
||||
<submenu id="selection">
|
||||
<item id="copyToClipboard"/>
|
||||
<item id="openInDictionary"/>
|
||||
<item id="clearSelection"/>
|
||||
</submenu>
|
||||
<submenu id="search">
|
||||
<item id="search"/>
|
||||
<item id="findPrevious"/>
|
||||
<item id="findNext"/>
|
||||
</submenu>
|
||||
<submenu id="view">
|
||||
<item id="rotate"/>
|
||||
<item id="toggleFullscreen"/>
|
||||
<item id="toggleIndicator"/>
|
||||
</submenu>
|
||||
<item id="preferences"/>
|
||||
<item id="quit"/>
|
||||
</menubar>
|
@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<toolbar>
|
||||
<button id="showReading"/>
|
||||
<separator/>
|
||||
<button id="showLibrary"/>
|
||||
<button id="showRecent"/>
|
||||
<button id="addBook"/>
|
||||
<separator/>
|
||||
<button id="gotoHome"/>
|
||||
<button id="undo"/>
|
||||
<button id="redo"/>
|
||||
<separator/>
|
||||
<button id="toc"/>
|
||||
<separator/>
|
||||
<button id="search"/>
|
||||
<button id="findPrevious"/>
|
||||
<button id="findNext"/>
|
||||
<separator/>
|
||||
<button id="bookInfo"/>
|
||||
<button id="preferences"/>
|
||||
<separator/>
|
||||
<button id="rotate"/>
|
||||
<separator/>
|
||||
<button id="showHelp"/>
|
||||
</toolbar>
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<toolbar>
|
||||
<button id="showReading"/>
|
||||
<separator/>
|
||||
<button id="showLibrary"/>
|
||||
<button id="showRecent"/>
|
||||
<button id="addBook"/>
|
||||
<separator/>
|
||||
<button id="gotoHome"/>
|
||||
<button id="undo"/>
|
||||
<button id="redo"/>
|
||||
<separator/>
|
||||
<button id="toc"/>
|
||||
<separator/>
|
||||
<button id="search"/>
|
||||
<button id="findPrevious"/>
|
||||
<button id="findNext"/>
|
||||
<separator/>
|
||||
<button id="bookInfo"/>
|
||||
<button id="preferences"/>
|
||||
<separator/>
|
||||
<button id="rotate"/>
|
||||
</toolbar>
|
Before Width: | Height: | Size: 612 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.5 KiB |
@ -1 +0,0 @@
|
||||
48x48.png
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 108 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 177 B |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 398 B After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
@ -1 +0,0 @@
|
||||
22x22-transparent-png
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 269 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 680 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 654 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 836 B |
Before Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 695 B |
@ -1 +0,0 @@
|
||||
22x22-transparent-png
|
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 1015 B After Width: | Height: | Size: 1015 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 241 B |
Before Width: | Height: | Size: 247 B |
Before Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 376 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 235 B |
Before Width: | Height: | Size: 166 B |
Before Width: | Height: | Size: 219 B |
Before Width: | Height: | Size: 495 B |
Before Width: | Height: | Size: 256 B |
Before Width: | Height: | Size: 171 B |
Before Width: | Height: | Size: 134 B |
Before Width: | Height: | Size: 175 B |
Before Width: | Height: | Size: 171 B |
Before Width: | Height: | Size: 274 B |
Before Width: | Height: | Size: 275 B |
Before Width: | Height: | Size: 533 B |
Before Width: | Height: | Size: 525 B |
Before Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 270 B |
Before Width: | Height: | Size: 202 B |
Before Width: | Height: | Size: 218 B |
Before Width: | Height: | Size: 613 B |
Before Width: | Height: | Size: 275 B |
Before Width: | Height: | Size: 196 B |
Before Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 196 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
@ -1 +0,0 @@
|
||||
32x32-transparent-png
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,6 @@
|
||||
INSTALL(
|
||||
FILES tde-ebook-reader.1
|
||||
DESTINATION ${MAN_INSTALL_DIR}/man1
|
||||
)
|
||||
|
||||
tde_create_translated_desktop( tde-ebook-reader.desktop )
|
@ -0,0 +1,19 @@
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_SOURCE_DIR}/zlibrary/core/include
|
||||
${CMAKE_SOURCE_DIR}/zlibrary/text/include
|
||||
${CMAKE_BINARY_DIR}/zlibrary/core/include
|
||||
${CMAKE_BINARY_DIR}/zlibrary/text/include
|
||||
)
|
||||
|
||||
|
||||
##### libzlcore-tqt (shared)
|
||||
|
||||
file( GLOB_RECURSE _src_cpp_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
|
||||
tde_add_executable( tde-ebook-reader AUTOMOC
|
||||
SOURCES ${_src_cpp_files}
|
||||
LINK zlcore-tqt-shared zltext-tqt-shared ${SQLITE_LIBRARIES}
|
||||
DESTINATION ${BIN_INSTALL_DIR}
|
||||
)
|
@ -1,111 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLInputStream.h>
|
||||
|
||||
#include "DocBookBookReader.h"
|
||||
|
||||
#include "../../bookmodel/BookModel.h"
|
||||
#include "../../model/Paragraph.h"
|
||||
|
||||
DocBookBookReader::DocBookBookReader(BookModel &model) : BookReader(model) {
|
||||
setMainTextModel();
|
||||
|
||||
myReadText = false;
|
||||
}
|
||||
|
||||
void DocBookBookReader::characterDataHandler(const char *text, std::size_t len) {
|
||||
addDataToBuffer(text, len);
|
||||
}
|
||||
|
||||
void DocBookBookReader::startElementHandler(int tag, const char **) {
|
||||
switch (tag) {
|
||||
case _SECT1:
|
||||
myReadText = true;
|
||||
pushKind(REGULAR);
|
||||
beginContentsParagraph();
|
||||
break;
|
||||
case _PARA:
|
||||
if (myReadText) {
|
||||
beginParagraph();
|
||||
}
|
||||
break;
|
||||
case _TITLE:
|
||||
enterTitle();
|
||||
pushKind(SECTION_TITLE);
|
||||
if (myReadText) {
|
||||
beginParagraph();
|
||||
}
|
||||
break;
|
||||
case _EMPHASIS:
|
||||
addControl(EMPHASIS, true);
|
||||
break;
|
||||
case _CITETITLE:
|
||||
addControl(CITE, true);
|
||||
break;
|
||||
case _ULINK:
|
||||
case _EMAIL:
|
||||
addControl(CODE, true);
|
||||
break;
|
||||
case _BLOCKQUOTE:
|
||||
pushKind(STRONG);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DocBookBookReader::endElementHandler(int tag) {
|
||||
switch (tag) {
|
||||
case _SECT1:
|
||||
myReadText = false;
|
||||
popKind();
|
||||
endContentsParagraph();
|
||||
insertEndOfSectionParagraph();
|
||||
break;
|
||||
case _PARA:
|
||||
endParagraph();
|
||||
break;
|
||||
case _TITLE:
|
||||
endParagraph();
|
||||
popKind();
|
||||
endContentsParagraph();
|
||||
exitTitle();
|
||||
break;
|
||||
case _EMPHASIS:
|
||||
addControl(EMPHASIS, false);
|
||||
break;
|
||||
case _CITETITLE:
|
||||
addControl(CITE, false);
|
||||
break;
|
||||
case _ULINK:
|
||||
case _EMAIL:
|
||||
addControl(CODE, false);
|
||||
break;
|
||||
case _BLOCKQUOTE:
|
||||
popKind();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DocBookBookReader::readBook(shared_ptr<ZLInputStream> stream) {
|
||||
readDocument(stream);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
* 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 __DOCBOOKBOOKREADER_H__
|
||||
#define __DOCBOOKBOOKREADER_H__
|
||||
|
||||
#include "DocBookReader.h"
|
||||
#include "../../bookmodel/BookReader.h"
|
||||
|
||||
class BookModel;
|
||||
|
||||
class DocBookBookReader : public BookReader, public DocBookReader {
|
||||
|
||||
public:
|
||||
DocBookBookReader(BookModel &model);
|
||||
~DocBookBookReader();
|
||||
void readBook(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
void startElementHandler(int tag, const char **attributes);
|
||||
void endElementHandler(int tag);
|
||||
void characterDataHandler(const char *text, std::size_t len);
|
||||
|
||||
private:
|
||||
bool myReadText;
|
||||
};
|
||||
|
||||
inline DocBookBookReader::~DocBookBookReader() {}
|
||||
|
||||
#endif /* __DOCBOOKBOOKREADER_H__ */
|
@ -1,137 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLInputStream.h>
|
||||
#include <ZLUnicodeUtil.h>
|
||||
|
||||
#include "DocBookDescriptionReader.h"
|
||||
|
||||
#include "../../library/Book.h"
|
||||
#include "../../library/Author.h"
|
||||
|
||||
DocBookDescriptionReader::DocBookDescriptionReader(Book &book) : myBook(book) {
|
||||
myReadTitle = false;
|
||||
myReadAuthor = false;
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
myReadAuthorName[i] = false;
|
||||
}
|
||||
myBook.setLanguage("en");
|
||||
myDepth = 0;
|
||||
}
|
||||
|
||||
void DocBookDescriptionReader::characterDataHandler(const char *text, std::size_t len) {
|
||||
if (myReadTitle) {
|
||||
myBook.setTitle(myBook.title() + std::string(text, len));
|
||||
} else {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
if (myReadAuthorName[i]) {
|
||||
myAuthorNames[i].append(text, len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DocBookDescriptionReader::startElementHandler(int tag, const char **) {
|
||||
++myDepth;
|
||||
switch (tag) {
|
||||
case _SECT1:
|
||||
myReturnCode = true;
|
||||
myDoBreak = true;
|
||||
break;
|
||||
case _TITLE:
|
||||
if (myDepth == 2) {
|
||||
myReadTitle = true;
|
||||
}
|
||||
break;
|
||||
case _AUTHOR:
|
||||
if (myDepth == 3) {
|
||||
myReadAuthor = true;
|
||||
}
|
||||
break;
|
||||
case _FIRSTNAME:
|
||||
if (myReadAuthor) {
|
||||
myReadAuthorName[0] = true;
|
||||
}
|
||||
break;
|
||||
case _OTHERNAME:
|
||||
if (myReadAuthor) {
|
||||
myReadAuthorName[1] = true;
|
||||
}
|
||||
break;
|
||||
case _SURNAME:
|
||||
if (myReadAuthor) {
|
||||
myReadAuthorName[2] = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DocBookDescriptionReader::endElementHandler(int tag) {
|
||||
--myDepth;
|
||||
switch (tag) {
|
||||
case _TITLE:
|
||||
myReadTitle = false;
|
||||
break;
|
||||
case _AUTHOR: {
|
||||
ZLUnicodeUtil::utf8Trim(myAuthorNames[0]);
|
||||
ZLUnicodeUtil::utf8Trim(myAuthorNames[1]);
|
||||
ZLUnicodeUtil::utf8Trim(myAuthorNames[2]);
|
||||
std::string fullName = myAuthorNames[0];
|
||||
if (!fullName.empty() && !myAuthorNames[1].empty()) {
|
||||
fullName += ' ';
|
||||
}
|
||||
fullName += myAuthorNames[1];
|
||||
if (!fullName.empty() && !myAuthorNames[2].empty()) {
|
||||
fullName += ' ';
|
||||
}
|
||||
fullName += myAuthorNames[2];
|
||||
shared_ptr<Author> author = Author::create(fullName, myAuthorNames[2]);
|
||||
if (!author.isNull()) {
|
||||
myBook.authors().add( author );
|
||||
}
|
||||
}
|
||||
myAuthorNames[0].erase();
|
||||
myAuthorNames[1].erase();
|
||||
myAuthorNames[2].erase();
|
||||
myReadAuthor = false;
|
||||
break;
|
||||
case _FIRSTNAME:
|
||||
myReadAuthorName[0] = false;
|
||||
break;
|
||||
case _OTHERNAME:
|
||||
myReadAuthorName[1] = false;
|
||||
break;
|
||||
case _SURNAME:
|
||||
myReadAuthorName[2] = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool DocBookDescriptionReader::readMetaInfo(shared_ptr<ZLInputStream> stream) {
|
||||
bool code = readDocument(stream);
|
||||
if (myBook.authors().empty()) {
|
||||
myBook.authors().push_back( new Author() );
|
||||
}
|
||||
return code;
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* 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 __DOCBOOKDESCRIPTIONREADER_H__
|
||||
#define __DOCBOOKDESCRIPTIONREADER_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "DocBookReader.h"
|
||||
|
||||
class Book;
|
||||
|
||||
class DocBookDescriptionReader : public DocBookReader {
|
||||
|
||||
public:
|
||||
DocBookDescriptionReader(Book &book);
|
||||
~DocBookDescriptionReader();
|
||||
bool readMetaInfo(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
void startElementHandler(int tag, const char **attributes);
|
||||
void endElementHandler(int tag);
|
||||
void characterDataHandler(const char *text, std::size_t len);
|
||||
|
||||
private:
|
||||
Book &myBook;
|
||||
|
||||
bool myReturnCode;
|
||||
|
||||
bool myReadTitle;
|
||||
bool myReadAuthor;
|
||||
bool myReadAuthorName[3];
|
||||
|
||||
std::string myAuthorNames[3];
|
||||
|
||||
int myDepth;
|
||||
};
|
||||
|
||||
inline DocBookDescriptionReader::~DocBookDescriptionReader() {}
|
||||
|
||||
#endif /* __DOCBOOKDESCRIPTIONREADER_H__ */
|
@ -1,43 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLFile.h>
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
#include "DocBookPlugin.h"
|
||||
#include "DocBookDescriptionReader.h"
|
||||
#include "DocBookBookReader.h"
|
||||
#include "../../library/Book.h"
|
||||
|
||||
bool DocBookPlugin::acceptsFile(const std::string &extension) const {
|
||||
return extension == "xml";
|
||||
}
|
||||
|
||||
bool DocBookPlugin::readMetaInfo(Book &book) const {
|
||||
return DocBookDescriptionReader(book).readMetaInfo(ZLFile(path).inputStream());
|
||||
}
|
||||
|
||||
bool DocBookPlugin::readLanguageAndEncoding(Book &book) const {
|
||||
(void)book;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DocBookPlugin::readModel(BookModel &model) const {
|
||||
return DocBookBookReader(model).readDocument(ZLFile(book.fileName()).inputStream());
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* 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 __DOCBOOKPLUGIN_H__
|
||||
#define __DOCBOOKPLUGIN_H__
|
||||
|
||||
#include "../FormatPlugin.h"
|
||||
|
||||
class DocBookPlugin : public FormatPlugin {
|
||||
|
||||
public:
|
||||
DocBookPlugin();
|
||||
~DocBookPlugin();
|
||||
bool providesMetaInfo() const;
|
||||
bool acceptsFile(const std::string &extension) const;
|
||||
bool readMetaInfo(Book &book) const;
|
||||
bool readLanguageAndEncoding(Book &book) const;
|
||||
bool readModel(BookModel &model) const;
|
||||
};
|
||||
|
||||
inline DocBookPlugin::DocBookPlugin() {}
|
||||
inline DocBookPlugin::~DocBookPlugin() {}
|
||||
inline bool DocBookPlugin::providesMetaInfo() const { return true; }
|
||||
|
||||
#endif /* __DOCBOOKPLUGIN_H__ */
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLStringUtil.h>
|
||||
#include <ZLFile.h>
|
||||
#include <ZLDir.h>
|
||||
|
||||
#include "DocBookReader.h"
|
||||
|
||||
static const DocBookReader::Tag TAGS[] = {
|
||||
{"article", DocBookReader::_ARTICLE},
|
||||
{"title", DocBookReader::_TITLE},
|
||||
{"articleinfo", DocBookReader::_ARTICLEINFO},
|
||||
{"author", DocBookReader::_AUTHOR},
|
||||
{"firstname", DocBookReader::_FIRSTNAME},
|
||||
{"othername", DocBookReader::_OTHERNAME},
|
||||
{"surname", DocBookReader::_SURNAME},
|
||||
{"affiliation", DocBookReader::_AFFILIATION},
|
||||
{"orgname", DocBookReader::_ORGNAME},
|
||||
{"ulink", DocBookReader::_ULINK},
|
||||
{"address", DocBookReader::_ADDRESS},
|
||||
{"email", DocBookReader::_EMAIL},
|
||||
{"pubdate", DocBookReader::_PUBDATE},
|
||||
{"releaseinfo", DocBookReader::_RELEASEINFO},
|
||||
{"copyright", DocBookReader::_COPYRIGHT},
|
||||
{"year", DocBookReader::_YEAR},
|
||||
{"holder", DocBookReader::_HOLDER},
|
||||
{"legalnotice", DocBookReader::_LEGALNOTICE},
|
||||
{"para", DocBookReader::_PARA},
|
||||
{"revhistory", DocBookReader::_REVHISTORY},
|
||||
{"revision", DocBookReader::_REVISION},
|
||||
{"revnumber", DocBookReader::_REVNUMBER},
|
||||
{"date", DocBookReader::_DATE},
|
||||
{"authorinitials", DocBookReader::_AUTHORINITIALS},
|
||||
{"revremark", DocBookReader::_REVREMARK},
|
||||
{"abstract", DocBookReader::_ABSTRACT},
|
||||
{"sect1", DocBookReader::_SECT1},
|
||||
{"emphasis", DocBookReader::_EMPHASIS},
|
||||
{"blockquote", DocBookReader::_BLOCKQUOTE},
|
||||
{"citetitle", DocBookReader::_CITETITLE},
|
||||
{"link", DocBookReader::_LINK},
|
||||
{"foreignphrase", DocBookReader::_FOREIGNPHRASE},
|
||||
{"part", DocBookReader::_PART},
|
||||
{"preface", DocBookReader::_PREFACE},
|
||||
{"chapter", DocBookReader::_CHAPTER},
|
||||
{0, DocBookReader::_UNKNOWN}
|
||||
};
|
||||
|
||||
const DocBookReader::Tag *DocBookReader::tags() const {
|
||||
return TAGS;
|
||||
}
|
||||
|
||||
const std::vector<std::string> &DocBookReader::externalDTDs() const {
|
||||
return EntityFilesCollector::Instance().externalDTDs("docbook");
|
||||
}
|
@ -1,95 +0,0 @@
|
||||
/*
|
||||
* 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 __DOCBOOKREADER_H__
|
||||
#define __DOCBOOKREADER_H__
|
||||
|
||||
#include <ZLXMLReader.h>
|
||||
|
||||
class DocBookReader : public ZLXMLReader {
|
||||
|
||||
public:
|
||||
static std::string DTDDirectory;
|
||||
|
||||
public:
|
||||
struct Tag {
|
||||
const char *tagName;
|
||||
int tagCode;
|
||||
};
|
||||
|
||||
public:
|
||||
//protected:
|
||||
enum TagCode {
|
||||
_ARTICLE,
|
||||
_TITLE,
|
||||
_ARTICLEINFO,
|
||||
_AUTHOR,
|
||||
_FIRSTNAME,
|
||||
_OTHERNAME,
|
||||
_SURNAME,
|
||||
_AFFILIATION,
|
||||
_ORGNAME,
|
||||
_ULINK,
|
||||
_ADDRESS,
|
||||
_EMAIL,
|
||||
_PUBDATE,
|
||||
_RELEASEINFO,
|
||||
_COPYRIGHT,
|
||||
_YEAR,
|
||||
_HOLDER,
|
||||
_LEGALNOTICE,
|
||||
_PARA,
|
||||
_REVHISTORY,
|
||||
_REVISION,
|
||||
_REVNUMBER,
|
||||
_DATE,
|
||||
_AUTHORINITIALS,
|
||||
_REVREMARK,
|
||||
_ABSTRACT,
|
||||
_SECT1,
|
||||
_EMPHASIS,
|
||||
_BLOCKQUOTE,
|
||||
_CITETITLE,
|
||||
_LINK,
|
||||
_FOREIGNPHRASE,
|
||||
_FIRSTTERM,
|
||||
_FILENAME,
|
||||
_ITEMIZEDLIST,
|
||||
_LISTITEM,
|
||||
_PART,
|
||||
_PREFACE,
|
||||
_CHAPTER,
|
||||
_UNKNOWN
|
||||
};
|
||||
|
||||
protected:
|
||||
DocBookReader();
|
||||
|
||||
public:
|
||||
~DocBookReader();
|
||||
const Tag *tags() const;
|
||||
|
||||
protected:
|
||||
const std::vector<std::string> &externalDTDs() const;
|
||||
};
|
||||
|
||||
inline DocBookReader::DocBookReader() {}
|
||||
inline DocBookReader::~DocBookReader() {}
|
||||
|
||||
#endif /* __DOCBOOKREADER_H__ */
|
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLInputStream.h>
|
||||
|
||||
#include "DummyBookReader.h"
|
||||
#include "../../bookmodel/BookModel.h"
|
||||
|
||||
DummyBookReader::DummyBookReader(BookModel &model) : myModelReader(model) {
|
||||
}
|
||||
|
||||
/*
|
||||
void DummyBookReader::characterDataHandler(const char *text, std::size_t len) {
|
||||
}
|
||||
|
||||
void DummyBookReader::startElementHandler(int tag, const char **xmlattributes) {
|
||||
}
|
||||
|
||||
void DummyBookReader::endElementHandler(int tag) {
|
||||
}
|
||||
*/
|
||||
|
||||
bool DummyBookReader::readBook(shared_ptr<ZLInputStream> stream) {
|
||||
//return readDocument(stream);
|
||||
return true;
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* 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 __DUMMYBOOKREADER_H__
|
||||
#define __DUMMYBOOKREADER_H__
|
||||
|
||||
#include "../../bookmodel/BookReader.h"
|
||||
|
||||
class DummyBookReader {
|
||||
|
||||
public:
|
||||
DummyBookReader(BookModel &model);
|
||||
~DummyBookReader();
|
||||
bool readBook(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
/*
|
||||
void startElementHandler(int tag, const char **attributes);
|
||||
void endElementHandler(int tag);
|
||||
void characterDataHandler(const char *text, std::size_t len);
|
||||
*/
|
||||
|
||||
private:
|
||||
BookReader myModelReader;
|
||||
};
|
||||
|
||||
inline DummyBookReader::~DummyBookReader() {}
|
||||
|
||||
#endif /* __DUMMYBOOKREADER_H__ */
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLInputStream.h>
|
||||
|
||||
#include "DummyMetaInfoReader.h"
|
||||
|
||||
DummyMetaInfoReader::DummyMetaInfoReader(Book &book) : myBook(book) {
|
||||
}
|
||||
|
||||
/*
|
||||
void DummyMetaInfoReader::characterDataHandler(const char *text, std::size_t len) {
|
||||
}
|
||||
|
||||
void DummyMetaInfoReader::startElementHandler(int tag, const char **) {
|
||||
}
|
||||
|
||||
void DummyMetaInfoReader::endElementHandler(int tag) {
|
||||
}
|
||||
*/
|
||||
|
||||
bool DummyMetaInfoReader::readMetaInfo(shared_ptr<ZLInputStream> stream) {
|
||||
return false;
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* 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 __DUMMYMETAINFOREADER_H__
|
||||
#define __DUMMYMETAINFOREADER_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
class Book;
|
||||
|
||||
class DummyMetaInfoReader {
|
||||
|
||||
public:
|
||||
DummyMetaInfoReader(Book &book);
|
||||
~DummyMetaInfoReader();
|
||||
bool readMetaInfo(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
/*
|
||||
void startElementHandler(int tag, const char **attributes);
|
||||
void endElementHandler(int tag);
|
||||
void characterDataHandler(const char *text, std::size_t len);
|
||||
*/
|
||||
|
||||
private:
|
||||
Book &myBook;
|
||||
};
|
||||
|
||||
inline DummyMetaInfoReader::~DummyMetaInfoReader() {}
|
||||
|
||||
#endif /* __DUMMYMETAINFOREADER_H__ */
|
@ -1,57 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLFile.h>
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
#include "DummyPlugin.h"
|
||||
#include "DummyMetaInfoReader.h"
|
||||
#include "DummyBookReader.h"
|
||||
#include "../../library/Book.h"
|
||||
|
||||
DummyPlugin::DummyPlugin() {
|
||||
}
|
||||
|
||||
DummyPlugin::~DummyPlugin() {
|
||||
}
|
||||
|
||||
bool DummyPlugin::providesMetaInfo() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DummyPlugin::acceptsFile(const ZLFile &file) const {
|
||||
return file.extension() == "dummy";
|
||||
}
|
||||
|
||||
bool DummyPlugin::readMetaInfo(Book &book) const {
|
||||
return DummyMetaInfoReader(book).readMetaInfo(ZLFile(path).inputStream());
|
||||
}
|
||||
|
||||
bool DummyPlugin::readLanguageAndEncoding(Book &book) const {
|
||||
(void)book;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DummyPlugin::readModel(BookModel &model) const {
|
||||
return DummyBookReader(model).readBook(ZLFile(book.fileName()).inputStream());
|
||||
}
|
||||
|
||||
shared_ptr<const ZLImage> DummyPlugin::coverImage(const ZLFile &file) const {
|
||||
return DummyCoverReader(file).readCover();
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
/*
|
||||
* 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 __DUMMYPLUGIN_H__
|
||||
#define __DUMMYPLUGIN_H__
|
||||
|
||||
#include "../FormatPlugin.h"
|
||||
|
||||
class DummyPlugin : public FormatPlugin {
|
||||
|
||||
public:
|
||||
DummyPlugin();
|
||||
~DummyPlugin();
|
||||
bool providesMetaInfo() const;
|
||||
bool acceptsFile(const ZLFile &file) const;
|
||||
bool readMetaInfo(Book &book) const;
|
||||
bool readLanguageAndEncoding(Book &book) const;
|
||||
bool readModel(BookModel &model) const;
|
||||
shared_ptr<const ZLImage> coverImage(const ZLFile &file) const;
|
||||
};
|
||||
|
||||
#endif /* __DUMMYPLUGIN_H__ */
|
@ -1,12 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# != 3 ]; then
|
||||
echo "usage: $0 <short_format_name> <camel_cased_format_name> <upper_cased_format_name>";
|
||||
exit 0;
|
||||
fi;
|
||||
|
||||
if mkdir ../$1; then
|
||||
for file in Dummy*.h Dummy*.cpp; do
|
||||
sed "s/Dummy/$2/g" $file | sed "s/DUMMY/$3/g" > ../$1/`echo $file | sed "s/Dummy/$2/"`;
|
||||
done
|
||||
fi;
|
@ -1,261 +0,0 @@
|
||||
/*
|
||||
* 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 <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
#include <ZLStringUtil.h>
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
#include "PdfBookReader.h"
|
||||
#include "PdfObject.h"
|
||||
#include "../../bookmodel/BookModel.h"
|
||||
|
||||
static void readLine(ZLInputStream &stream, std::string &buffer) {
|
||||
buffer.clear();
|
||||
char ch;
|
||||
while (1) {
|
||||
if (stream.read(&ch, 1) != 1) {
|
||||
return;
|
||||
}
|
||||
if ((ch == 10) || (ch == 13)) {
|
||||
if (!buffer.empty()) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
buffer += ch;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PdfBookReader::PdfBookReader(BookModel &model) : myModelReader(model) {
|
||||
}
|
||||
|
||||
PdfBookReader::~PdfBookReader() {
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfBookReader::readObjectFromLocation(ZLInputStream &stream, const std::pair<int,int> &address) {
|
||||
std::map<std::pair<int,int>,int>::const_iterator jt = myObjectLocationMap.find(address);
|
||||
if (jt == myObjectLocationMap.end()) {
|
||||
return 0;
|
||||
}
|
||||
stream.seek(jt->second, true);
|
||||
char ch = 0;
|
||||
PdfObject::readToken(stream, myBuffer, ch);
|
||||
if (address.first != atoi(myBuffer.c_str())) {
|
||||
return 0;
|
||||
}
|
||||
PdfObject::readToken(stream, myBuffer, ch);
|
||||
if (address.second != atoi(myBuffer.c_str())) {
|
||||
return 0;
|
||||
}
|
||||
PdfObject::readToken(stream, myBuffer, ch);
|
||||
if (myBuffer != "obj") {
|
||||
return 0;
|
||||
}
|
||||
return PdfObject::readObject(stream, ch);
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfBookReader::resolveReference(shared_ptr<PdfObject> ref, ZLInputStream &stream) {
|
||||
if (ref.isNull() || (ref->type() != PdfObject::REFERENCE)) {
|
||||
return ref;
|
||||
}
|
||||
const PdfObjectReference &reference = (const PdfObjectReference&)*ref;
|
||||
const std::pair<int,int> address(reference.number(), reference.generation());
|
||||
std::map<std::pair<int,int>,shared_ptr<PdfObject> >::const_iterator it = myObjectMap.find(address);
|
||||
if (it != myObjectMap.end()) {
|
||||
return it->second;
|
||||
}
|
||||
std::map<std::pair<int,int>,int>::const_iterator jt = myObjectLocationMap.find(address);
|
||||
shared_ptr<PdfObject> object = readObjectFromLocation(stream, address);
|
||||
myObjectMap.insert(std::make_pair(address, object));
|
||||
return object;
|
||||
}
|
||||
|
||||
static void stripBuffer(std::string &buffer) {
|
||||
int index = buffer.find('%');
|
||||
if (index >= 0) {
|
||||
buffer.erase(index);
|
||||
}
|
||||
ZLStringUtil::stripWhiteSpaces(buffer);
|
||||
}
|
||||
|
||||
bool PdfBookReader::readReferenceTable(ZLInputStream &stream, int xrefOffset) {
|
||||
while (true) {
|
||||
stream.seek(xrefOffset, true);
|
||||
readLine(stream, myBuffer);
|
||||
stripBuffer(myBuffer);
|
||||
if (myBuffer != "xref") {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
readLine(stream, myBuffer);
|
||||
stripBuffer(myBuffer);
|
||||
if (myBuffer == "trailer") {
|
||||
break;
|
||||
}
|
||||
const int index = myBuffer.find(' ');
|
||||
const int start = atoi(myBuffer.c_str());
|
||||
const int len = atoi(myBuffer.c_str() + index + 1);
|
||||
for (int i = 0; i < len; ++i) {
|
||||
readLine(stream, myBuffer);
|
||||
stripBuffer(myBuffer);
|
||||
if (myBuffer.length() != 18) {
|
||||
return false;
|
||||
}
|
||||
const int objectOffset = atoi(myBuffer.c_str());
|
||||
const int objectGeneration = atoi(myBuffer.c_str() + 11);
|
||||
const bool objectInUse = myBuffer[17] == 'n';
|
||||
if (objectInUse) {
|
||||
myObjectLocationMap[std::make_pair(start + i, objectGeneration)] = objectOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
char ch = 0;
|
||||
shared_ptr<PdfObject> trailer = PdfObject::readObject(stream, ch);
|
||||
if (trailer.isNull() || (trailer->type() != PdfObject::DICTIONARY)) {
|
||||
return false;
|
||||
}
|
||||
if (myTrailer.isNull()) {
|
||||
myTrailer = trailer;
|
||||
}
|
||||
PdfDictionaryObject &trailerDictionary = (PdfDictionaryObject&)*trailer;
|
||||
shared_ptr<PdfObject> previous = trailerDictionary["Prev"];
|
||||
if (previous.isNull()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (previous->type() != PdfObject::INTEGER_NUMBER) {
|
||||
return false;
|
||||
}
|
||||
xrefOffset = ((PdfIntegerObject&)*previous).value();
|
||||
}
|
||||
}
|
||||
|
||||
bool PdfBookReader::readBook(shared_ptr<ZLInputStream> stream) {
|
||||
if (stream.isNull() || !stream->open()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
readLine(*stream, myBuffer);
|
||||
if (!ZLStringUtil::stringStartsWith(myBuffer, "%PDF-")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string version = myBuffer.substr(5);
|
||||
std::cerr << "version = " << version << "\n";
|
||||
|
||||
std::size_t eofOffset = stream->sizeOfOpened();
|
||||
if (eofOffset < 100) {
|
||||
return false;
|
||||
}
|
||||
|
||||
stream->seek(eofOffset - 100, true);
|
||||
bool readXrefOffset = false;
|
||||
std::size_t xrefOffset = (std::size_t)-1;
|
||||
while (true) {
|
||||
readLine(*stream, myBuffer);
|
||||
if (myBuffer.empty()) {
|
||||
break;
|
||||
}
|
||||
stripBuffer(myBuffer);
|
||||
if (readXrefOffset) {
|
||||
if (!myBuffer.empty()) {
|
||||
xrefOffset = atoi(myBuffer.c_str());
|
||||
break;
|
||||
}
|
||||
} else if (myBuffer == "startxref") {
|
||||
readXrefOffset = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!readReferenceTable(*stream, xrefOffset)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PdfDictionaryObject &trailerDictionary = (PdfDictionaryObject&)*myTrailer;
|
||||
shared_ptr<PdfObject> root = resolveReference(trailerDictionary["Root"], *stream);
|
||||
if (root.isNull() || (root->type() != PdfObject::DICTIONARY)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PdfDictionaryObject &rootDictionary = (PdfDictionaryObject&)*root;
|
||||
if (rootDictionary["Type"] != PdfNameObject::nameObject("Catalog")) {
|
||||
return false;
|
||||
}
|
||||
shared_ptr<PdfObject> pageRootNode = resolveReference(rootDictionary["Pages"], *stream);
|
||||
if (pageRootNode.isNull() || (pageRootNode->type() != PdfObject::DICTIONARY)) {
|
||||
return false;
|
||||
}
|
||||
PdfDictionaryObject &pageRootNodeDictionary = (PdfDictionaryObject&)*pageRootNode;
|
||||
if (pageRootNodeDictionary["Type"] != PdfNameObject::nameObject("Pages")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
shared_ptr<PdfObject> count = pageRootNodeDictionary["Count"];
|
||||
if (!count.isNull() && (count->type() == PdfObject::INTEGER_NUMBER)) {
|
||||
std::cerr << "count = " << ((PdfIntegerObject&)*count).value() << "\n";
|
||||
}
|
||||
*/
|
||||
shared_ptr<PdfObject> pages = pageRootNodeDictionary["Kids"];
|
||||
if (pages.isNull() || (pages->type() != PdfObject::ARRAY)) {
|
||||
return false;
|
||||
}
|
||||
const PdfArrayObject& pagesArray = (const PdfArrayObject&)*pages;
|
||||
const std::size_t pageNumber = pagesArray.size();
|
||||
for (std::size_t i = 0; i < pageNumber; ++i) {
|
||||
processPage(pagesArray[i], *stream);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void PdfBookReader::processContents(shared_ptr<PdfObject> contentsObject, ZLInputStream &stream) {
|
||||
contentsObject = resolveReference(contentsObject, stream);
|
||||
}
|
||||
|
||||
void PdfBookReader::processPage(shared_ptr<PdfObject> pageObject, ZLInputStream &stream) {
|
||||
pageObject = resolveReference(pageObject, stream);
|
||||
if (pageObject.isNull() || pageObject->type() != PdfObject::DICTIONARY) {
|
||||
return;
|
||||
}
|
||||
const PdfDictionaryObject &pageDictionary = (const PdfDictionaryObject&)*pageObject;
|
||||
shared_ptr<PdfObject> contents = pageDictionary["Contents"];
|
||||
if (contents.isNull()) {
|
||||
return;
|
||||
}
|
||||
switch (contents->type()) {
|
||||
default:
|
||||
break;
|
||||
case PdfObject::REFERENCE:
|
||||
processContents(contents, stream);
|
||||
break;
|
||||
case PdfObject::ARRAY:
|
||||
{
|
||||
const PdfArrayObject &array = (const PdfArrayObject&)*contents;
|
||||
const std::size_t len = array.size();
|
||||
for (std::size_t i = 0; i < len; ++i) {
|
||||
processContents(array[i], stream);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* 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 __PdfBOOKREADER_H__
|
||||
#define __PdfBOOKREADER_H__
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "../../bookmodel/BookReader.h"
|
||||
|
||||
class PdfObject;
|
||||
class PdfObjectReference;
|
||||
|
||||
class PdfBookReader {
|
||||
|
||||
public:
|
||||
PdfBookReader(BookModel &model);
|
||||
~PdfBookReader();
|
||||
bool readBook(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
private:
|
||||
bool readReferenceTable(ZLInputStream &stream, int offset);
|
||||
shared_ptr<PdfObject> resolveReference(shared_ptr<PdfObject> reference, ZLInputStream &stream);
|
||||
shared_ptr<PdfObject> readObjectFromLocation(ZLInputStream &stream, const std::pair<int,int> &address);
|
||||
void processPage(shared_ptr<PdfObject> pageObject, ZLInputStream &stream);
|
||||
void processContents(shared_ptr<PdfObject> contentsObject, ZLInputStream &stream);
|
||||
|
||||
private:
|
||||
BookReader myModelReader;
|
||||
std::string myBuffer;
|
||||
std::map<std::pair<int,int>,int> myObjectLocationMap;
|
||||
std::map<std::pair<int,int>,shared_ptr<PdfObject> > myObjectMap;
|
||||
shared_ptr<PdfObject> myTrailer;
|
||||
};
|
||||
|
||||
#endif /* __PdfBOOKREADER_H__ */
|
@ -1,29 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLInputStream.h>
|
||||
|
||||
#include "PdfDescriptionReader.h"
|
||||
|
||||
PdfDescriptionReader::PdfDescriptionReader(Book &book) : myBook(book) {
|
||||
}
|
||||
|
||||
bool PdfDescriptionReader::readMetaInfo(shared_ptr<ZLInputStream> stream) {
|
||||
return true;
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* 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 __PDFDESCRIPTIONREADER_H__
|
||||
#define __PDFDESCRIPTIONREADER_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
class Book;
|
||||
|
||||
class PdfDescriptionReader {
|
||||
|
||||
public:
|
||||
PdfDescriptionReader(Book &book);
|
||||
~PdfDescriptionReader();
|
||||
bool readMetaInfo(shared_ptr<ZLInputStream> stream);
|
||||
|
||||
private:
|
||||
Book &myBook;
|
||||
};
|
||||
|
||||
inline PdfDescriptionReader::~PdfDescriptionReader() {}
|
||||
|
||||
#endif /* __PDFDESCRIPTIONREADER_H__ */
|
@ -1,450 +0,0 @@
|
||||
/*
|
||||
* 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 <iostream>
|
||||
|
||||
#include <ZLInputStream.h>
|
||||
#include <ZLZDecompressor.h>
|
||||
|
||||
#include "PdfObject.h"
|
||||
|
||||
PdfObject::~PdfObject() {
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfIntegerObject::integerObject(int value) {
|
||||
if ((value < 0) || (value >= 256)) {
|
||||
return new PdfIntegerObject(value);
|
||||
} else {
|
||||
static shared_ptr<PdfObject>* table = new shared_ptr<PdfObject>[256];
|
||||
if (table[value].isNull()) {
|
||||
table[value] = new PdfIntegerObject(value);
|
||||
}
|
||||
return table[value];
|
||||
}
|
||||
}
|
||||
|
||||
PdfIntegerObject::PdfIntegerObject(int value) : myValue(value) {
|
||||
std::cerr << "PdfIntegerObject " << value << "\n";
|
||||
}
|
||||
|
||||
int PdfIntegerObject::value() const {
|
||||
return myValue;
|
||||
}
|
||||
|
||||
PdfObject::Type PdfIntegerObject::type() const {
|
||||
return INTEGER_NUMBER;
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfBooleanObject::TRUE() {
|
||||
static shared_ptr<PdfObject> value = new PdfBooleanObject(true);
|
||||
return value;
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfBooleanObject::FALSE() {
|
||||
static shared_ptr<PdfObject> value = new PdfBooleanObject(false);
|
||||
return value;
|
||||
}
|
||||
|
||||
PdfBooleanObject::PdfBooleanObject(bool value) : myValue(value) {
|
||||
std::cerr << "PdfBooleanObject " << value << "\n";
|
||||
}
|
||||
|
||||
bool PdfBooleanObject::value() const {
|
||||
return myValue;
|
||||
}
|
||||
|
||||
PdfObject::Type PdfBooleanObject::type() const {
|
||||
return BOOLEAN;
|
||||
}
|
||||
|
||||
PdfStringObject::PdfStringObject(const std::string &value) : myValue(value) {
|
||||
std::cerr << "PdfStringObject " << value << "\n";
|
||||
}
|
||||
|
||||
PdfObject::Type PdfStringObject::type() const {
|
||||
return STRING;
|
||||
}
|
||||
|
||||
std::map<std::string,shared_ptr<PdfObject> > PdfNameObject::ourObjectMap;
|
||||
|
||||
shared_ptr<PdfObject> PdfNameObject::nameObject(const std::string &id) {
|
||||
// TODO: process escaped characters
|
||||
std::map<std::string,shared_ptr<PdfObject> >::const_iterator it = ourObjectMap.find(id);
|
||||
if (it != ourObjectMap.end()) {
|
||||
return it->second;
|
||||
}
|
||||
std::cerr << "PdfNameObject " << id << "\n";
|
||||
shared_ptr<PdfObject> object = new PdfNameObject();
|
||||
ourObjectMap.insert(std::make_pair(id, object));
|
||||
return object;
|
||||
}
|
||||
|
||||
PdfNameObject::PdfNameObject() {
|
||||
}
|
||||
|
||||
PdfObject::Type PdfNameObject::type() const {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
PdfDictionaryObject::PdfDictionaryObject() {
|
||||
}
|
||||
|
||||
void PdfDictionaryObject::setObject(shared_ptr<PdfObject> id, shared_ptr<PdfObject> object) {
|
||||
myMap[id] = object;
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfDictionaryObject::operator[](shared_ptr<PdfObject> id) const {
|
||||
std::map<shared_ptr<PdfObject>,shared_ptr<PdfObject> >::const_iterator it = myMap.find(id);
|
||||
return (it != myMap.end()) ? it->second : 0;
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfDictionaryObject::operator[](const std::string &id) const {
|
||||
return operator[](PdfNameObject::nameObject(id));
|
||||
}
|
||||
|
||||
PdfObject::Type PdfDictionaryObject::type() const {
|
||||
return DICTIONARY;
|
||||
}
|
||||
|
||||
PdfArrayObject::PdfArrayObject() {
|
||||
}
|
||||
|
||||
void PdfArrayObject::addObject(shared_ptr<PdfObject> object) {
|
||||
myVector.push_back(object);
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfArrayObject::popLast() {
|
||||
if (!myVector.empty()) {
|
||||
shared_ptr<PdfObject> last = myVector.back();
|
||||
myVector.pop_back();
|
||||
return last;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int PdfArrayObject::size() const {
|
||||
return myVector.size();
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfArrayObject::operator[](int index) const {
|
||||
return myVector[index];
|
||||
}
|
||||
|
||||
PdfObject::Type PdfArrayObject::type() const {
|
||||
return ARRAY;
|
||||
}
|
||||
|
||||
PdfObjectReference::PdfObjectReference(int number, int generation) : myNumber(number), myGeneration(generation) {
|
||||
}
|
||||
|
||||
int PdfObjectReference::number() const {
|
||||
return myNumber;
|
||||
}
|
||||
|
||||
int PdfObjectReference::generation() const {
|
||||
return myGeneration;
|
||||
}
|
||||
|
||||
PdfObject::Type PdfObjectReference::type() const {
|
||||
return REFERENCE;
|
||||
}
|
||||
|
||||
PdfStreamObject::PdfStreamObject(const PdfDictionaryObject &dictionary, ZLInputStream &dataStream) {
|
||||
char ch;
|
||||
skipWhiteSpaces(dataStream, ch);
|
||||
|
||||
shared_ptr<PdfObject> length = dictionary["Length"];
|
||||
if (!length.isNull() && (length->type() == INTEGER_NUMBER)) {
|
||||
int value = ((PdfIntegerObject&)*length).value();
|
||||
if (value > 0) {
|
||||
shared_ptr<PdfObject> filter = dictionary["Filter"];
|
||||
if (filter == PdfNameObject::nameObject("FlateDecode")) {
|
||||
dataStream.seek(1, false);
|
||||
ZLZDecompressor decompressor(value - 2);
|
||||
char buffer[2048];
|
||||
while (true) {
|
||||
std::size_t size = decompressor.decompress(dataStream, buffer, 2048);
|
||||
if (size == 0) {
|
||||
break;
|
||||
}
|
||||
myData.append(buffer, size);
|
||||
}
|
||||
std::cerr << myData << "\n";
|
||||
} else {
|
||||
myData.append(value, '\0');
|
||||
myData[0] = ch;
|
||||
dataStream.read((char*)myData.data() + 1, value - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
shared_ptr<PdfObject> filter = dictionary["Filter"];
|
||||
if (!filter.isNull()) {
|
||||
switch (filter->type()) {
|
||||
default:
|
||||
break;
|
||||
case NAME:
|
||||
myFilters.push_back(
|
||||
(filter == PdfNameObject::nameObject("FlateDecode")) ?
|
||||
FLATE : UNKNOWN
|
||||
);
|
||||
break;
|
||||
case ARRAY:
|
||||
{
|
||||
// TODO: process filters array
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
PdfObject::Type PdfStreamObject::type() const {
|
||||
return STREAM;
|
||||
}
|
||||
|
||||
enum PdfCharacterType {
|
||||
PDF_CHAR_REGULAR,
|
||||
PDF_CHAR_WHITESPACE,
|
||||
PDF_CHAR_DELIMITER
|
||||
};
|
||||
|
||||
static PdfCharacterType *PdfCharacterTypeTable = 0;
|
||||
|
||||
void PdfObject::skipWhiteSpaces(ZLInputStream &stream, char &ch) {
|
||||
if (PdfCharacterTypeTable == 0) {
|
||||
PdfCharacterTypeTable = new PdfCharacterType[256];
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
PdfCharacterTypeTable[i] = PDF_CHAR_REGULAR;
|
||||
}
|
||||
PdfCharacterTypeTable[0] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable[9] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable[10] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable[12] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable[13] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable[32] = PDF_CHAR_WHITESPACE;
|
||||
PdfCharacterTypeTable['('] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable[')'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['<'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['>'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['['] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable[']'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['{'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['}'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['/'] = PDF_CHAR_DELIMITER;
|
||||
PdfCharacterTypeTable['%'] = PDF_CHAR_DELIMITER;
|
||||
}
|
||||
|
||||
while ((PdfCharacterTypeTable[(unsigned char)ch] == PDF_CHAR_WHITESPACE) &&
|
||||
(stream.read(&ch, 1) == 1)) {
|
||||
}
|
||||
}
|
||||
|
||||
void PdfObject::readToken(ZLInputStream &stream, std::string &buffer, char &ch) {
|
||||
buffer.clear();
|
||||
skipWhiteSpaces(stream, ch);
|
||||
while (PdfCharacterTypeTable[(unsigned char)ch] == PDF_CHAR_REGULAR) {
|
||||
buffer += ch;
|
||||
if (stream.read(&ch, 1) != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shared_ptr<PdfObject> PdfObject::readObject(ZLInputStream &stream, char &ch) {
|
||||
skipWhiteSpaces(stream, ch);
|
||||
|
||||
PdfObject::Type type = PdfObject::NIL;
|
||||
bool hexString = false;
|
||||
switch (ch) {
|
||||
case '(':
|
||||
hexString = false;
|
||||
type = PdfObject::STRING;
|
||||
break;
|
||||
case '<':
|
||||
stream.read(&ch, 1);
|
||||
hexString = true;
|
||||
type = (ch == '<') ? PdfObject::DICTIONARY : PdfObject::STRING;
|
||||
break;
|
||||
case '>': // end of dictionary
|
||||
stream.read(&ch, 1);
|
||||
if (ch == '>') {
|
||||
stream.read(&ch, 1);
|
||||
}
|
||||
return 0;
|
||||
case '/':
|
||||
type = PdfObject::NAME;
|
||||
break;
|
||||
case '[':
|
||||
type = PdfObject::ARRAY;
|
||||
break;
|
||||
case ']': // end of array
|
||||
stream.read(&ch, 1);
|
||||
return 0;
|
||||
case '+':
|
||||
case '-':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
type = PdfObject::INTEGER_NUMBER;
|
||||
break;
|
||||
case 't':
|
||||
case 'f':
|
||||
type = PdfObject::BOOLEAN;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case PdfObject::DICTIONARY:
|
||||
{
|
||||
ch = 0;
|
||||
shared_ptr<PdfObject> name;
|
||||
shared_ptr<PdfObject> value;
|
||||
shared_ptr<PdfObject> next;
|
||||
PdfDictionaryObject *dictionary = new PdfDictionaryObject();
|
||||
while (true) {
|
||||
next = readObject(stream, ch);
|
||||
if (next.isNull()) {
|
||||
break;
|
||||
}
|
||||
PdfObject::Type oType = next->type();
|
||||
if (oType == PdfObject::NAME) {
|
||||
name = next;
|
||||
value = readObject(stream, ch);
|
||||
if (value.isNull()) {
|
||||
break;
|
||||
}
|
||||
dictionary->setObject(name, value);
|
||||
} else if (oType == PdfObject::INTEGER_NUMBER) {
|
||||
if (value.isNull() || (value->type() != PdfObject::INTEGER_NUMBER)) {
|
||||
break;
|
||||
}
|
||||
skipWhiteSpaces(stream, ch);
|
||||
if (ch != 'R') {
|
||||
break;
|
||||
}
|
||||
const int number = ((PdfIntegerObject&)*value).value();
|
||||
const int generation = ((PdfIntegerObject&)*next).value();
|
||||
dictionary->setObject(name, new PdfObjectReference(number, generation));
|
||||
value = 0;
|
||||
ch = 0;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
std::string token;
|
||||
readToken(stream, token, ch);
|
||||
if (token == "stream") {
|
||||
shared_ptr<PdfObject> d = dictionary;
|
||||
return new PdfStreamObject(*dictionary, stream);
|
||||
} else {
|
||||
return dictionary;
|
||||
}
|
||||
}
|
||||
case PdfObject::NAME:
|
||||
{
|
||||
std::string name;
|
||||
stream.read(&ch, 1);
|
||||
readToken(stream, name, ch);
|
||||
return PdfNameObject::nameObject(name);
|
||||
}
|
||||
case PdfObject::BOOLEAN:
|
||||
{
|
||||
std::string name;
|
||||
readToken(stream, name, ch);
|
||||
return (name == "true") ? PdfBooleanObject::TRUE() : PdfBooleanObject::FALSE();
|
||||
}
|
||||
case PdfObject::INTEGER_NUMBER:
|
||||
{
|
||||
std::string str;
|
||||
if ((ch == '+') || (ch == '-')) {
|
||||
str += ch;
|
||||
stream.read(&ch, 1);
|
||||
}
|
||||
while ((ch >= '0') && (ch <= '9')) {
|
||||
str += ch;
|
||||
stream.read(&ch, 1);
|
||||
}
|
||||
return PdfIntegerObject::integerObject(atoi(str.c_str()));
|
||||
}
|
||||
case PdfObject::STRING:
|
||||
{
|
||||
std::string value;
|
||||
if (hexString) {
|
||||
char num[3];
|
||||
num[2] = '\0';
|
||||
while (ch != '>') {
|
||||
num[0] = ch;
|
||||
stream.read(num + 1, 1);
|
||||
value += (char)strtol(num, 0, 16);
|
||||
stream.read(&ch, 1);
|
||||
}
|
||||
ch = 0;
|
||||
} else {
|
||||
// TODO: implement
|
||||
}
|
||||
return new PdfStringObject(value);
|
||||
}
|
||||
case PdfObject::ARRAY:
|
||||
{
|
||||
PdfArrayObject *array = new PdfArrayObject();
|
||||
ch = 0;
|
||||
while (true) {
|
||||
skipWhiteSpaces(stream, ch);
|
||||
if (ch == 'R') {
|
||||
const int size = array->size();
|
||||
if ((size >= 2) &&
|
||||
((*array)[size - 1]->type() == PdfObject::INTEGER_NUMBER) &&
|
||||
((*array)[size - 2]->type() == PdfObject::INTEGER_NUMBER)) {
|
||||
const int generation = ((PdfIntegerObject&)*array->popLast()).value();
|
||||
const int number = ((PdfIntegerObject&)*array->popLast()).value();
|
||||
array->addObject(new PdfObjectReference(number, generation));
|
||||
ch = 0;
|
||||
}
|
||||
}
|
||||
shared_ptr<PdfObject> object = readObject(stream, ch);
|
||||
if (object.isNull()) {
|
||||
break;
|
||||
}
|
||||
array->addObject(object);
|
||||
}
|
||||
std::cerr << "PdfArrayObject " << array->size() << "\n";
|
||||
return array;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
std::string buffer;
|
||||
stream.read(&ch, 1);
|
||||
while (PdfCharacterTypeTable[(unsigned char)ch] == PDF_CHAR_REGULAR) {
|
||||
buffer += ch;
|
||||
stream.read(&ch, 1);
|
||||
}
|
||||
std::cerr << "buffer = " << buffer << "\n";
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,201 +0,0 @@
|
||||
/*
|
||||
* 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 __PDFOBJECT_H__
|
||||
#define __PDFOBJECT_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#include <shared_ptr.h>
|
||||
|
||||
class ZLInputStream;
|
||||
|
||||
class PdfObject {
|
||||
|
||||
public:
|
||||
static shared_ptr<PdfObject> readObject(ZLInputStream &stream, char &ch);
|
||||
static void readToken(ZLInputStream &stream, std::string &buffer, char &ch);
|
||||
|
||||
protected:
|
||||
static void skipWhiteSpaces(ZLInputStream &stream, char &ch);
|
||||
|
||||
public:
|
||||
enum Type {
|
||||
BOOLEAN,
|
||||
INTEGER_NUMBER,
|
||||
REAL_NUMBER,
|
||||
STRING,
|
||||
NAME,
|
||||
ARRAY,
|
||||
DICTIONARY,
|
||||
STREAM,
|
||||
NIL,
|
||||
REFERENCE
|
||||
};
|
||||
|
||||
virtual ~PdfObject();
|
||||
|
||||
virtual Type type() const = 0;
|
||||
};
|
||||
|
||||
class PdfBooleanObject : public PdfObject {
|
||||
|
||||
public:
|
||||
static shared_ptr<PdfObject> TRUE();
|
||||
static shared_ptr<PdfObject> FALSE();
|
||||
|
||||
private:
|
||||
PdfBooleanObject(bool value);
|
||||
|
||||
public:
|
||||
bool value() const;
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
const bool myValue;
|
||||
};
|
||||
|
||||
class PdfIntegerObject : public PdfObject {
|
||||
|
||||
public:
|
||||
static shared_ptr<PdfObject> integerObject(int value);
|
||||
|
||||
private:
|
||||
PdfIntegerObject(int value);
|
||||
|
||||
public:
|
||||
int value() const;
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
const int myValue;
|
||||
};
|
||||
|
||||
class PdfStringObject : public PdfObject {
|
||||
|
||||
private:
|
||||
PdfStringObject(const std::string &value);
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
std::string myValue;
|
||||
|
||||
friend shared_ptr<PdfObject> PdfObject::readObject(ZLInputStream &stream, char &ch);
|
||||
};
|
||||
|
||||
class PdfNameObject : public PdfObject {
|
||||
|
||||
public:
|
||||
static shared_ptr<PdfObject> nameObject(const std::string &id);
|
||||
|
||||
private:
|
||||
static std::map<std::string,shared_ptr<PdfObject> > ourObjectMap;
|
||||
|
||||
private:
|
||||
PdfNameObject();
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
};
|
||||
|
||||
class PdfDictionaryObject : public PdfObject {
|
||||
|
||||
private:
|
||||
PdfDictionaryObject();
|
||||
void setObject(shared_ptr<PdfObject> id, shared_ptr<PdfObject> object);
|
||||
|
||||
public:
|
||||
shared_ptr<PdfObject> operator [] (shared_ptr<PdfObject> id) const;
|
||||
shared_ptr<PdfObject> operator [] (const std::string &id) const;
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
std::map<shared_ptr<PdfObject>,shared_ptr<PdfObject> > myMap;
|
||||
|
||||
friend shared_ptr<PdfObject> PdfObject::readObject(ZLInputStream &stream, char &ch);
|
||||
};
|
||||
|
||||
class PdfStreamObject : public PdfObject {
|
||||
|
||||
private:
|
||||
PdfStreamObject(const PdfDictionaryObject &dictionary, ZLInputStream &dataStream);
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
std::string myData;
|
||||
/*
|
||||
enum EncodingType {
|
||||
UNKNOWN,
|
||||
FLATE,
|
||||
};
|
||||
std::vector<EncodingType> myFilters;
|
||||
*/
|
||||
|
||||
friend shared_ptr<PdfObject> PdfObject::readObject(ZLInputStream &stream, char &ch);
|
||||
};
|
||||
|
||||
class PdfArrayObject : public PdfObject {
|
||||
|
||||
private:
|
||||
PdfArrayObject();
|
||||
void addObject(shared_ptr<PdfObject> object);
|
||||
shared_ptr<PdfObject> popLast();
|
||||
|
||||
public:
|
||||
int size() const;
|
||||
shared_ptr<PdfObject> operator [] (int index) const;
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
std::vector<shared_ptr<PdfObject> > myVector;
|
||||
|
||||
friend shared_ptr<PdfObject> PdfObject::readObject(ZLInputStream &stream, char &ch);
|
||||
};
|
||||
|
||||
class PdfObjectReference : public PdfObject {
|
||||
|
||||
public:
|
||||
PdfObjectReference(int number, int generation);
|
||||
|
||||
int number() const;
|
||||
int generation() const;
|
||||
|
||||
private:
|
||||
Type type() const;
|
||||
|
||||
private:
|
||||
const int myNumber;
|
||||
const int myGeneration;
|
||||
};
|
||||
|
||||
#endif /* __PDFOBJECT_H__ */
|
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* 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 <ZLFile.h>
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
#include "PdfPlugin.h"
|
||||
#include "PdfDescriptionReader.h"
|
||||
#include "PdfBookReader.h"
|
||||
#include "../../library/Book.h"
|
||||
|
||||
bool PdfPlugin::acceptsFile(const ZLFile &file) const {
|
||||
return file.extension() == "pdf";
|
||||
}
|
||||
|
||||
bool PdfPlugin::readMetaInfo(Book &book) const {
|
||||
return PdfDescriptionReader(book).readMetaInfo(ZLFile(path).inputStream());
|
||||
}
|
||||
|
||||
bool PdfPlugin::readLanguageAndEncoding(Book &book) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PdfPlugin::readModel(BookModel &model) const {
|
||||
return PdfBookReader(model).readBook(ZLFile(book.fileName()).inputStream());
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* 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 __PdfPLUGIN_H__
|
||||
#define __PdfPLUGIN_H__
|
||||
|
||||
#include "../FormatPlugin.h"
|
||||
|
||||
class PdfPlugin : public FormatPlugin {
|
||||
|
||||
public:
|
||||
PdfPlugin();
|
||||
~PdfPlugin();
|
||||
bool providesMetaInfo() const;
|
||||
bool acceptsFile(const ZLFile &file) const;
|
||||
bool readMetaInfo(Book &book) const;
|
||||
bool readLanguageAndEncoding(Book &book) const;
|
||||
bool readModel(BookModel &model) const;
|
||||
};
|
||||
|
||||
inline PdfPlugin::PdfPlugin() {}
|
||||
inline PdfPlugin::~PdfPlugin() {}
|
||||
inline bool PdfPlugin::providesMetaInfo() const { return true; }
|
||||
|
||||
#endif /* __PdfPLUGIN_H__ */
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2008-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 <algorithm>
|
||||
|
||||
#include "StringStream.h"
|
||||
|
||||
StringStream::StringStream(const std::string &data) : myData(data), myOffset(0) {
|
||||
}
|
||||
|
||||
bool StringStream::open() {
|
||||
myOffset = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::size_t StringStream::read(char *buffer, std::size_t maxSize) {
|
||||
std::size_t size = std::min(maxSize, myData.length() - myOffset);
|
||||
memcpy(buffer, myData.data() + myOffset, size);
|
||||
myOffset += size;
|
||||
return size;
|
||||
}
|
||||
|
||||
void StringStream::close() {
|
||||
}
|
||||
|
||||
void StringStream::seek(int offset, bool absoluteOffset) {
|
||||
if (!absoluteOffset) {
|
||||
offset += myOffset;
|
||||
}
|
||||
myOffset = std::min((std::size_t)std::max(0, offset), myData.length());
|
||||
}
|
||||
|
||||
std::size_t StringStream::offset() const {
|
||||
return myOffset;
|
||||
}
|
||||
|
||||
std::size_t StringStream::sizeOfOpened() {
|
||||
return myData.length();
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2008-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 __STRINGSTREAM_H__
|
||||
#define __STRINGSTREAM_H__
|
||||
|
||||
#include <ZLInputStream.h>
|
||||
|
||||
class StringStream : public ZLInputStream {
|
||||
|
||||
public:
|
||||
StringStream(const std::string &data);
|
||||
|
||||
public:
|
||||
bool open();
|
||||
std::size_t read(char *buffer, std::size_t maxSize);
|
||||
void close();
|
||||
|
||||
void seek(int offset, bool absoluteOffset);
|
||||
std::size_t offset() const;
|
||||
std::size_t sizeOfOpened();
|
||||
|
||||
private:
|
||||
const std::string &myData;
|
||||
std::size_t myOffset;
|
||||
};
|
||||
|
||||
#endif /* __STRINGSTREAM_H__ */
|