mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
add pole back as actual files in the repo
This commit is contained in:
parent
54fd9a01de
commit
ee7f9bdb03
1
third-party/pole/AUTHORS
vendored
Normal file
1
third-party/pole/AUTHORS
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
Ariya Hidayat <ariya@kde.org>
|
21
third-party/pole/COMPILERS.txt
vendored
Normal file
21
third-party/pole/COMPILERS.txt
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
Borland C++ Compiler 5.5.1
|
||||
------------------------------
|
||||
The command-line Borland C++ Compiler version 5.5.1 is available for free
|
||||
(as 'free' in 'free beer') from:
|
||||
http://www.borland.com/products/downloads/download_cbuilder.html
|
||||
|
||||
OpenWatcom 1.3
|
||||
------------------------------
|
||||
OpenWatcom 1.3 does not have STL implementation, therefore you need to
|
||||
install STLport (tested with version 4.6, earlier version may or may not
|
||||
work). Because mainstream STLport can not be used directly with OpenWatcom,
|
||||
please download and use the patched version from this site:
|
||||
http://www.ecet.vtc.edu/~pchapin/OW/index.html
|
||||
|
||||
Digital Mars 8.41n
|
||||
-------------------------------
|
||||
Digital Mars command-line C/C++ compilers are available for download
|
||||
from http://www.digitalmars.com. STLport is required and must be
|
||||
installed as well.
|
||||
|
24
third-party/pole/ChangeLog
vendored
Normal file
24
third-party/pole/ChangeLog
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
POLE 0.3
|
||||
|
||||
* changed license to two-clause BSD license
|
||||
* fixed potential lock-up on corrupted file, bug reported by
|
||||
Andrew Ziem <ahziem1@mailbolt.com>
|
||||
* fixed error reading very huge file (larger than 13 MB)
|
||||
* ported POLEView to Qt 4, making it available also for Windows
|
||||
* assorted user-interface improvements in POLEView
|
||||
|
||||
POLE 0.2 (released March 2005)
|
||||
|
||||
* changed license to BSD license
|
||||
* poleview: graphical tool to view a structured storage
|
||||
* fixed occasional incorrect reading of big file
|
||||
* fixed rare memory problem, found by valgrind
|
||||
* fixed compile with Microsoft Visual C++ and Borland C++ (Windows)
|
||||
* modified storage to become stateless (with better API)
|
||||
* performance improvement, especially with very large file
|
||||
|
||||
POLE 0.1 (released March 2004)
|
||||
|
||||
* initial release
|
||||
* support for reading structured storages, even large ones
|
||||
* no support yet for creating or modifying a storage
|
25
third-party/pole/LICENSE
vendored
Normal file
25
third-party/pole/LICENSE
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
POLE - Portable C++ library to access OLE Storage
|
||||
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org). All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
72
third-party/pole/README
vendored
Normal file
72
third-party/pole/README
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
POLE - portable library for structured storage
|
||||
|
||||
POLE is a portable C++ library to create and read structured storage. With a
|
||||
structured storage, you can store files inside another file, or you can even
|
||||
create complex directory tree, if you want to. The structured storage created by
|
||||
POLE is compatible with Microsoft structured storage, also sometimes called as
|
||||
OLE Compound Document, which are used among others in Microsoft Office. However,
|
||||
POLE has the advantage that it's portable (i.e you can read or write a
|
||||
structured storage in any supported platform), you don't need to rely on Windows
|
||||
library.
|
||||
|
||||
Download
|
||||
==========
|
||||
|
||||
Source code is available at http://developer.berlios.de/projects/pole/.
|
||||
Please always use the latest stable version.
|
||||
|
||||
Install
|
||||
========
|
||||
|
||||
To compile POLE, you need a C++ compiler, with standard C++ library which
|
||||
supports STL (Standard Template Library). On Linux and other Unices, g++ will do
|
||||
the job.
|
||||
|
||||
POLE is just a library, you have to integrate it as part of your
|
||||
application/project. Since it consists of one source file and one header file,
|
||||
it doesn't make much sense to compile POLE as separate library (either static or
|
||||
dynamic). Simply add these files to your project and you're done.
|
||||
|
||||
The source tarball of POLE demonstrates the use of POLE to build poledump, a
|
||||
small utility to extract any stream inside a structured storage. If you use g++
|
||||
as the compiler, you can compile poledump using the following command:
|
||||
|
||||
g++ -o poledump pole.cpp poledump.cpp
|
||||
|
||||
You may use poledump like the example below:
|
||||
|
||||
poledump budget.xls Workbook result.xls
|
||||
|
||||
The above command will extract a stream named Workbook inside Excel document
|
||||
(budget.xls) and save it as result.xls. File result.xls will still be recognized
|
||||
as a valid workbook (in raw format). Launch Microsoft Excel, open this file, and
|
||||
convince yourself.
|
||||
|
||||
Copyright and License
|
||||
=====================
|
||||
|
||||
POLE - Portable C++ library to access OLE Storage
|
||||
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org). All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
1190
third-party/pole/pole.cpp
vendored
Normal file
1190
third-party/pole/pole.cpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
358
third-party/pole/pole.h
vendored
Normal file
358
third-party/pole/pole.h
vendored
Normal file
|
@ -0,0 +1,358 @@
|
|||
/* POLE - Portable C++ library to access OLE Storage
|
||||
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org).
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef POLE_H
|
||||
#define POLE_H
|
||||
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace POLE
|
||||
{
|
||||
|
||||
class StorageIO;
|
||||
class Stream;
|
||||
class StreamIO;
|
||||
class DirTree;
|
||||
class DirEntry;
|
||||
|
||||
class Storage
|
||||
{
|
||||
friend class Stream;
|
||||
friend class StreamOut;
|
||||
|
||||
public:
|
||||
|
||||
// for Storage::result()
|
||||
enum { Ok, OpenFailed, NotOLE, BadOLE, UnknownError };
|
||||
|
||||
/**
|
||||
* Constructs a storage with name filename.
|
||||
**/
|
||||
Storage( char* bytes, unsigned long length );
|
||||
|
||||
/**
|
||||
* Destroys the storage.
|
||||
**/
|
||||
~Storage();
|
||||
|
||||
/**
|
||||
* Opens the storage. Returns true if no error occurs.
|
||||
**/
|
||||
bool open();
|
||||
|
||||
/**
|
||||
* Closes the storage.
|
||||
**/
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Returns the error code of last operation.
|
||||
**/
|
||||
int result();
|
||||
|
||||
/**
|
||||
* Finds all stream and directories in given path.
|
||||
**/
|
||||
std::list<std::string> entries( const std::string& path = "/" );
|
||||
|
||||
/**
|
||||
* Returns true if specified entry name is a directory.
|
||||
*/
|
||||
bool isDirectory( const std::string& name );
|
||||
|
||||
DirTree* dirTree();
|
||||
|
||||
StorageIO* storageIO();
|
||||
|
||||
std::list<DirEntry *> dirEntries( const std::string& path = "/" );
|
||||
|
||||
/**
|
||||
* Finds and returns a stream with the specified name.
|
||||
* If reuse is true, this function returns the already created stream
|
||||
* (if any). Otherwise it will create the stream.
|
||||
*
|
||||
* When errors occur, this function returns NULL.
|
||||
*
|
||||
* You do not need to delete the created stream, it will be handled
|
||||
* automatically.
|
||||
**/
|
||||
Stream* stream( const std::string& name, bool reuse = true );
|
||||
//Stream* stream( const std::string& name, int mode = Stream::ReadOnly, bool reuse = true );
|
||||
|
||||
private:
|
||||
StorageIO* io;
|
||||
|
||||
// no copy or assign
|
||||
Storage( const Storage& );
|
||||
Storage& operator=( const Storage& );
|
||||
|
||||
};
|
||||
|
||||
class Stream
|
||||
{
|
||||
friend class Storage;
|
||||
friend class StorageIO;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Creates a new stream.
|
||||
*/
|
||||
// name must be absolute, e.g "/Workbook"
|
||||
Stream( Storage* storage, const std::string& name );
|
||||
|
||||
/**
|
||||
* Destroys the stream.
|
||||
*/
|
||||
~Stream();
|
||||
|
||||
/**
|
||||
* Returns the full stream name.
|
||||
*/
|
||||
std::string fullName();
|
||||
|
||||
/**
|
||||
* Returns the stream size.
|
||||
**/
|
||||
unsigned long size();
|
||||
|
||||
/**
|
||||
* Returns the current read/write position.
|
||||
**/
|
||||
unsigned long tell();
|
||||
|
||||
/**
|
||||
* Sets the read/write position.
|
||||
**/
|
||||
void seek( unsigned long pos );
|
||||
|
||||
/**
|
||||
* Reads a byte.
|
||||
**/
|
||||
int getch();
|
||||
|
||||
/**
|
||||
* Reads a block of data.
|
||||
**/
|
||||
unsigned long read( unsigned char* data, unsigned long maxlen );
|
||||
|
||||
/**
|
||||
* Returns true if the read/write position is past the file.
|
||||
**/
|
||||
bool eof();
|
||||
|
||||
/**
|
||||
* Returns true whenever error occurs.
|
||||
**/
|
||||
bool fail();
|
||||
|
||||
private:
|
||||
StreamIO* io;
|
||||
|
||||
// no copy or assign
|
||||
Stream( const Stream& );
|
||||
Stream& operator=( const Stream& );
|
||||
};
|
||||
|
||||
class Header
|
||||
{
|
||||
public:
|
||||
unsigned char id[8]; // signature, or magic identifier
|
||||
unsigned b_shift; // bbat->blockSize = 1 << b_shift
|
||||
unsigned s_shift; // sbat->blockSize = 1 << s_shift
|
||||
unsigned num_bat; // blocks allocated for big bat
|
||||
unsigned dirent_start; // starting block for directory info
|
||||
unsigned threshold; // switch from small to big file (usually 4K)
|
||||
unsigned sbat_start; // starting block index to store small bat
|
||||
unsigned num_sbat; // blocks allocated for small bat
|
||||
unsigned mbat_start; // starting block to store meta bat
|
||||
unsigned num_mbat; // blocks allocated for meta bat
|
||||
unsigned long bb_blocks[109];
|
||||
|
||||
Header();
|
||||
bool valid();
|
||||
void load( const unsigned char* buffer );
|
||||
void save( unsigned char* buffer );
|
||||
void debug();
|
||||
};
|
||||
|
||||
class AllocTable
|
||||
{
|
||||
public:
|
||||
static const unsigned Eof;
|
||||
static const unsigned Avail;
|
||||
static const unsigned Bat;
|
||||
static const unsigned MetaBat;
|
||||
unsigned blockSize;
|
||||
AllocTable();
|
||||
void clear();
|
||||
unsigned long count();
|
||||
void resize( unsigned long newsize );
|
||||
void preserve( unsigned long n );
|
||||
void set( unsigned long index, unsigned long val );
|
||||
unsigned unused();
|
||||
void setChain( std::vector<unsigned long> );
|
||||
std::vector<unsigned long> follow( unsigned long start );
|
||||
unsigned long operator[](unsigned long index );
|
||||
void load( const unsigned char* buffer, unsigned len );
|
||||
void save( unsigned char* buffer );
|
||||
unsigned size();
|
||||
void debug();
|
||||
private:
|
||||
std::vector<unsigned long> data;
|
||||
AllocTable( const AllocTable& );
|
||||
AllocTable& operator=( const AllocTable& );
|
||||
};
|
||||
|
||||
class DirEntry
|
||||
{
|
||||
public:
|
||||
bool valid; // false if invalid (should be skipped)
|
||||
std::string name; // the name, not in unicode anymore
|
||||
bool dir; // true if directory
|
||||
unsigned long size; // size (not valid if directory)
|
||||
unsigned long start; // starting block
|
||||
unsigned prev; // previous sibling
|
||||
unsigned next; // next sibling
|
||||
unsigned child; // first child
|
||||
|
||||
DirEntry(): valid(false), name(), dir(false), size(0), start(0),
|
||||
prev(0), next(0), child(0) {}
|
||||
};
|
||||
|
||||
class DirTree
|
||||
{
|
||||
public:
|
||||
static const unsigned End;
|
||||
DirTree();
|
||||
void clear();
|
||||
unsigned entryCount();
|
||||
DirEntry* entry( unsigned index );
|
||||
DirEntry* entry( const std::string& name, bool create=false );
|
||||
int indexOf( DirEntry* e );
|
||||
int parent( unsigned index );
|
||||
std::string fullName( unsigned index );
|
||||
std::vector<unsigned> children( unsigned index );
|
||||
void load( unsigned char* buffer, unsigned len );
|
||||
void save( unsigned char* buffer );
|
||||
unsigned size();
|
||||
void debug();
|
||||
private:
|
||||
std::vector<DirEntry> entries;
|
||||
DirTree( const DirTree& );
|
||||
DirTree& operator=( const DirTree& );
|
||||
};
|
||||
|
||||
class StorageIO
|
||||
{
|
||||
public:
|
||||
Storage* storage; // owner
|
||||
unsigned char *filedata;
|
||||
unsigned long dataLength;
|
||||
int result; // result of operation
|
||||
bool opened; // true if file is opened
|
||||
unsigned long filesize; // size of the file
|
||||
|
||||
Header* header; // storage header
|
||||
DirTree* dirtree; // directory tree
|
||||
AllocTable* bbat; // allocation table for big blocks
|
||||
AllocTable* sbat; // allocation table for small blocks
|
||||
|
||||
std::vector<unsigned long> sb_blocks; // blocks for "small" files
|
||||
|
||||
std::list<Stream*> streams;
|
||||
|
||||
StorageIO( Storage* storage, char* bytes, unsigned long length );
|
||||
~StorageIO();
|
||||
|
||||
bool open();
|
||||
void close();
|
||||
void flush();
|
||||
void load();
|
||||
void create();
|
||||
|
||||
unsigned long loadBigBlocks( std::vector<unsigned long> blocks, unsigned char* buffer, unsigned long maxlen );
|
||||
|
||||
unsigned long loadBigBlock( unsigned long block, unsigned char* buffer, unsigned long maxlen );
|
||||
|
||||
unsigned long loadSmallBlocks( std::vector<unsigned long> blocks, unsigned char* buffer, unsigned long maxlen );
|
||||
|
||||
unsigned long loadSmallBlock( unsigned long block, unsigned char* buffer, unsigned long maxlen );
|
||||
|
||||
StreamIO* streamIO( const std::string& name );
|
||||
|
||||
private:
|
||||
// no copy or assign
|
||||
StorageIO( const StorageIO& );
|
||||
StorageIO& operator=( const StorageIO& );
|
||||
|
||||
};
|
||||
|
||||
class StreamIO
|
||||
{
|
||||
public:
|
||||
StorageIO* io;
|
||||
DirEntry* entry;
|
||||
std::string fullName;
|
||||
bool eof;
|
||||
bool fail;
|
||||
|
||||
StreamIO( StorageIO* io, DirEntry* entry );
|
||||
~StreamIO();
|
||||
unsigned long size();
|
||||
void seek( unsigned long pos );
|
||||
unsigned long tell();
|
||||
int getch();
|
||||
unsigned long read( unsigned char* data, unsigned long maxlen );
|
||||
unsigned long read( unsigned long pos, unsigned char* data, unsigned long maxlen );
|
||||
|
||||
|
||||
private:
|
||||
std::vector<unsigned long> blocks;
|
||||
|
||||
// no copy or assign
|
||||
StreamIO( const StreamIO& );
|
||||
StreamIO& operator=( const StreamIO& );
|
||||
|
||||
// pointer for read
|
||||
unsigned long m_pos;
|
||||
|
||||
// simple cache system to speed-up getch()
|
||||
unsigned char* cache_data;
|
||||
unsigned long cache_size;
|
||||
unsigned long cache_pos;
|
||||
void updateCache();
|
||||
};
|
||||
|
||||
} // namespace POLE
|
||||
|
||||
|
||||
#endif // POLE_H
|
Loading…
Reference in New Issue
Block a user