#1279 Cleaned up doxygen warnings for doc and website.
This commit is contained in:
+9
-6
@@ -343,7 +343,7 @@ TYPEDEF_HIDES_STRUCT = NO
|
||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
|
||||
SYMBOL_CACHE_SIZE = 0
|
||||
# SYMBOL_CACHE_SIZE = 0
|
||||
|
||||
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
|
||||
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
|
||||
@@ -709,7 +709,10 @@ EXCLUDE = ../samples/Jzon.h \
|
||||
../src/getopt_win32.h \
|
||||
../src/private.h \
|
||||
../src/timegm.h \
|
||||
../src/tzfile.h
|
||||
../src/tzfile.h \
|
||||
../src/fff.h \
|
||||
../include/exiv2/exv_msvc.h \
|
||||
../include/exiv2/exv_msvc-webready.h
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||
@@ -1484,13 +1487,13 @@ XML_OUTPUT = xml
|
||||
# which can be used by a validating XML parser to check the
|
||||
# syntax of the XML files.
|
||||
|
||||
XML_SCHEMA =
|
||||
# XML_SCHEMA =
|
||||
|
||||
# The XML_DTD tag can be used to specify an XML DTD,
|
||||
# which can be used by a validating XML parser to check the
|
||||
# syntax of the XML files.
|
||||
|
||||
XML_DTD =
|
||||
# XML_DTD =
|
||||
|
||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
|
||||
# dump the program listings (including syntax highlighting
|
||||
@@ -1702,7 +1705,7 @@ DOT_NUM_THREADS = 0
|
||||
# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
|
||||
# directory containing the font.
|
||||
|
||||
DOT_FONTNAME = FreeSans
|
||||
DOT_FONTNAME = Arial
|
||||
|
||||
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
|
||||
# The default size is 10pt.
|
||||
@@ -1838,7 +1841,7 @@ MSCFILE_DIRS =
|
||||
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
|
||||
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
|
||||
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
DOT_GRAPH_MAX_NODES = 100
|
||||
|
||||
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
|
||||
# graphs generated by dot. A depth value of 3 means that only nodes reachable
|
||||
|
||||
@@ -1071,6 +1071,7 @@ namespace Exiv2 {
|
||||
|
||||
// Pimpl idiom
|
||||
class Impl;
|
||||
//! Pointer to implementation
|
||||
Impl* p_;
|
||||
}; // class RemoteIo
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace Exiv2 {
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@warning This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
*/
|
||||
void printStructure(std::ostream& out, PrintStructureOption option,int depth);
|
||||
/*!
|
||||
|
||||
@@ -142,13 +142,13 @@ namespace Exiv2 {
|
||||
|
||||
// Macros for simple access
|
||||
//! Shorthand to create a temp debug log message object and return its ostringstream
|
||||
#define EXV_DEBUG if (LogMsg::debug >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::debug).os()
|
||||
#define EXV_DEBUG if (LogMsg::debug >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::debug).os()
|
||||
//! Shorthand for a temp info log message object and return its ostringstream
|
||||
#define EXV_INFO if (LogMsg::info >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::info).os()
|
||||
#define EXV_INFO if (LogMsg::info >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::info).os()
|
||||
//! Shorthand for a temp warning log message object and return its ostringstream
|
||||
#define EXV_WARNING if (LogMsg::warn >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::warn).os()
|
||||
#define EXV_WARNING if (LogMsg::warn >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::warn).os()
|
||||
//! Shorthand for a temp error log message object and return its ostringstream
|
||||
#define EXV_ERROR if (LogMsg::error >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::error).os()
|
||||
#define EXV_ERROR if (LogMsg::error >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::error).os()
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// Disable MSVC warnings "non - DLL-interface classkey 'identifier' used as base
|
||||
@@ -267,6 +267,7 @@ namespace Exiv2 {
|
||||
EXIV2API const char* errMsg(int code);
|
||||
|
||||
template<typename charT>
|
||||
//! BasicError constructor
|
||||
BasicError<charT>::BasicError(int code)
|
||||
: code_(code), count_(0)
|
||||
{
|
||||
@@ -274,6 +275,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
template<typename charT> template<typename A>
|
||||
//! BasicError constructor
|
||||
BasicError<charT>::BasicError(int code, const A& arg1)
|
||||
: code_(code), count_(1), arg1_(toBasicString<charT>(arg1))
|
||||
{
|
||||
@@ -281,6 +283,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
template<typename charT> template<typename A, typename B>
|
||||
//! BasicError constructor
|
||||
BasicError<charT>::BasicError(int code, const A& arg1, const B& arg2)
|
||||
: code_(code), count_(2),
|
||||
arg1_(toBasicString<charT>(arg1)),
|
||||
@@ -290,6 +293,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
template<typename charT> template<typename A, typename B, typename C>
|
||||
//! BasicError constructor
|
||||
BasicError<charT>::BasicError(int code, const A& arg1, const B& arg2, const C& arg3)
|
||||
: code_(code), count_(3),
|
||||
arg1_(toBasicString<charT>(arg1)),
|
||||
|
||||
@@ -151,7 +151,7 @@ namespace Exiv2 {
|
||||
/*!
|
||||
@brief Get the path of file URL.
|
||||
|
||||
@param url The file URL in the format file:///<path> or file://<host>/<path>.
|
||||
@param url The file URL in the format file:///path or file://host/path
|
||||
@return the path of file URL.
|
||||
*/
|
||||
EXIV2API std::string pathOfFileUrl(const std::string& url);
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
#include "datasets.hpp"
|
||||
|
||||
namespace Exiv2 {
|
||||
/*!
|
||||
@brief execute an HTTP request
|
||||
@param request - a Dictionary of headers to send to server
|
||||
@param response - a Dictionary of response headers (dictionary is filled by the response)
|
||||
@param errors - a String with an error
|
||||
@return Server response 200 = OK, 404 = Not Found etc...
|
||||
*/
|
||||
EXIV2API int http(Exiv2::Dictionary& request,Exiv2::Dictionary& response,std::string& errors);
|
||||
}
|
||||
|
||||
|
||||
@@ -104,8 +104,8 @@ namespace Exiv2 {
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@caution You may need to put the stream into binary mode (see src/actions.cpp)
|
||||
@warning This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@warning You may need to put the stream into binary mode (see src/actions.cpp)
|
||||
*/
|
||||
virtual void printStructure(std::ostream& out, PrintStructureOption option =kpsNone, int depth=0);
|
||||
/*!
|
||||
@@ -224,6 +224,7 @@ namespace Exiv2 {
|
||||
@brief Set the image iccProfile. The new profile is not written
|
||||
to the image until the writeMetadata() method is called.
|
||||
@param iccProfile DataBuf containing profile (binary)
|
||||
@param bTestValid - tests that iccProfile contains credible data
|
||||
*/
|
||||
virtual void setIccProfile(DataBuf& iccProfile,bool bTestValid=true);
|
||||
/*!
|
||||
@@ -340,6 +341,7 @@ namespace Exiv2 {
|
||||
@brief is the host platform littleEndian
|
||||
*/
|
||||
bool isLittleEndianPlatform();
|
||||
|
||||
bool isStringType(uint16_t type);
|
||||
bool isShortType(uint16_t type);
|
||||
bool isLongType(uint16_t type);
|
||||
@@ -466,6 +468,7 @@ namespace Exiv2 {
|
||||
const NativePreviewList& nativePreviews() const;
|
||||
//@}
|
||||
|
||||
//! set type support for this image format
|
||||
void setTypeSupported(
|
||||
int imageType,
|
||||
uint16_t supportedMetadata
|
||||
@@ -474,6 +477,7 @@ namespace Exiv2 {
|
||||
supportedMetadata_ = supportedMetadata;
|
||||
}
|
||||
|
||||
//! set type support for this image format
|
||||
int imageType() const { return imageType_; }
|
||||
|
||||
protected:
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace Exiv2
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@warning This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
*/
|
||||
void printStructure(std::ostream& out, PrintStructureOption option,int depth);
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Exiv2 {
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@warning This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
*/
|
||||
void printStructure(std::ostream& out, PrintStructureOption option,int depth);
|
||||
//@}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Exiv2
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
@warning This function is not thread safe and intended for exiv2 -pS for debugging.
|
||||
*/
|
||||
void printStructure(std::ostream& out, PrintStructureOption option,int depth);
|
||||
//@}
|
||||
|
||||
@@ -213,6 +213,8 @@ namespace Exiv2 {
|
||||
@note This invalidates XMP keys generated in this namespace.
|
||||
*/
|
||||
static void unregisterNs(const std::string& ns);
|
||||
|
||||
//! lock to be used while modifying properties
|
||||
static Exiv2::RWLock rwLock_;
|
||||
|
||||
/*!
|
||||
|
||||
@@ -143,45 +143,56 @@ namespace Exiv2 {
|
||||
class RWLock
|
||||
{
|
||||
public:
|
||||
//! constructor (acquires the lock)
|
||||
RWLock(const pthread_rwlockattr_t *attr = 0)
|
||||
{
|
||||
pthread_rwlock_init(&rwlock_, attr);
|
||||
}
|
||||
|
||||
//! constructor (releases lock)
|
||||
~RWLock()
|
||||
{
|
||||
pthread_rwlock_destroy(&rwlock_);
|
||||
}
|
||||
|
||||
//! acquire rw lock
|
||||
void wrlock()
|
||||
{
|
||||
pthread_rwlock_wrlock(&rwlock_);
|
||||
}
|
||||
|
||||
//! test to see if the rw lock can be acquired
|
||||
bool trywrlock()
|
||||
{
|
||||
return 0 == pthread_rwlock_trywrlock(&rwlock_);
|
||||
}
|
||||
|
||||
//! acquire rd lock
|
||||
void rdlock()
|
||||
{
|
||||
pthread_rwlock_rdlock(&rwlock_);
|
||||
}
|
||||
|
||||
//! test to see if the rd lock can be acquired
|
||||
bool tryrdlock()
|
||||
{
|
||||
return 0 == pthread_rwlock_tryrdlock(&rwlock_);
|
||||
}
|
||||
|
||||
//! release rw lock
|
||||
void unlock()
|
||||
{
|
||||
pthread_rwlock_unlock(&rwlock_);
|
||||
}
|
||||
|
||||
//! unlock rd lock
|
||||
void rdunlock() { unlock(); }
|
||||
|
||||
//! unlock rw lock
|
||||
void wrunlock() { unlock(); }
|
||||
|
||||
private:
|
||||
//! the lock itself
|
||||
pthread_rwlock_t rwlock_;
|
||||
};
|
||||
#endif
|
||||
@@ -193,15 +204,18 @@ namespace Exiv2 {
|
||||
class ScopedReadLock
|
||||
{
|
||||
public:
|
||||
//! constructor - locks the object
|
||||
ScopedReadLock(RWLock &rwlock):
|
||||
rwlock_(rwlock)
|
||||
{
|
||||
rwlock_.rdlock();
|
||||
}
|
||||
|
||||
//! destructor - unlocks the object used in constructor
|
||||
~ScopedReadLock() { rwlock_.rdunlock(); }
|
||||
|
||||
private:
|
||||
//! object locked by the constructor (and released by destructor)
|
||||
RWLock &rwlock_;
|
||||
};
|
||||
|
||||
@@ -212,15 +226,18 @@ namespace Exiv2 {
|
||||
class ScopedWriteLock
|
||||
{
|
||||
public:
|
||||
//! constructor - locks the object
|
||||
ScopedWriteLock(RWLock &rwlock):
|
||||
rwlock_(rwlock)
|
||||
{
|
||||
rwlock_.wrlock();
|
||||
}
|
||||
|
||||
//! destructor - unlocks the object used in constructor
|
||||
~ScopedWriteLock() { rwlock_.wrunlock(); }
|
||||
|
||||
private:
|
||||
//! object locked by the constructor (and released by destructor)
|
||||
RWLock &rwlock_;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ namespace Exiv2 {
|
||||
@brief Print out the structure of image file.
|
||||
@throw Error if reading of the file fails or the image data is
|
||||
not valid (does not look like data of the specific image type).
|
||||
@caution This function is not thread safe and intended for exiv2 -p{S|R} as a file debugging aid
|
||||
@warning This function is not thread safe and intended for exiv2 -p{S|R} as a file debugging aid
|
||||
*/
|
||||
virtual void printStructure(std::ostream& out, PrintStructureOption option,int depth=-1);
|
||||
|
||||
|
||||
@@ -30,8 +30,30 @@ namespace Exiv2
|
||||
class UtilsVideo
|
||||
{
|
||||
public:
|
||||
/*!
|
||||
@brief compare a buffer and string
|
||||
@param buf - binary buffer
|
||||
@param str - nul terminated C string
|
||||
@return true if match
|
||||
*/
|
||||
static bool compareTagValue(Exiv2::DataBuf &buf, const char *str);
|
||||
|
||||
/*!
|
||||
@brief compare a buffer and an array of strings
|
||||
@param buf - binary buffer
|
||||
@param arr - array of C strings C
|
||||
@param arraysize - length of arr
|
||||
@return true if match
|
||||
*/
|
||||
static bool compareTagValue(Exiv2::DataBuf& buf,const char arr[][5],int32_t arraysize);
|
||||
|
||||
/*!
|
||||
@brief compare a buffer and string
|
||||
@param buf - binary buffer
|
||||
@param str - C string (not guaranteed nul terminated)
|
||||
@param size - number of bytes to compare
|
||||
@return true if match
|
||||
*/
|
||||
static bool simpleBytesComparison(Exiv2::DataBuf& buf ,const char* str,int32_t size);
|
||||
}; // class UtilsVideo
|
||||
|
||||
|
||||
@@ -879,6 +879,7 @@ namespace Exiv2 {
|
||||
XMP spec chapter B.4 (page 42) the xml:lang qualifier is to be compared case insensitive.
|
||||
*/
|
||||
struct LangAltValueComparator {
|
||||
//! LangAltValueComparator comparison case insensitive function
|
||||
bool operator() (const std::string& str1, const std::string& str2) const
|
||||
{
|
||||
int result = str1.size() < str2.size() ? 1
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
// + standard includes
|
||||
#include <vector>
|
||||
|
||||
/*!
|
||||
@brief CPLUSPLUS11 is the value of macro --cplusplus for C++11
|
||||
*/
|
||||
#define CPLUSPLUS11 201103L
|
||||
|
||||
#if __cplusplus >= CPLUSPLUS11
|
||||
@@ -57,9 +60,16 @@
|
||||
@brief exv_grep_key_t is a simple string and the ignore flag
|
||||
*/
|
||||
struct Exiv2_grep_key_t {
|
||||
/*!
|
||||
@brief Exiv2_grep_key_t constructor
|
||||
*/
|
||||
Exiv2_grep_key_t(std::string pattern,bool bIgnoreCase)
|
||||
:pattern_(pattern),bIgnoreCase_(bIgnoreCase) {}
|
||||
|
||||
//! simple string to match
|
||||
std::string pattern_;
|
||||
|
||||
//! should we ignore cast in the match?
|
||||
bool bIgnoreCase_;
|
||||
};
|
||||
/*!
|
||||
|
||||
+1
-1
@@ -1483,7 +1483,7 @@ namespace Exiv2 {
|
||||
bool isMalloced_; //!< Was the blocksMap_ allocated?
|
||||
bool eof_; //!< EOF indicator
|
||||
Protocol protocol_; //!< the protocol of url
|
||||
uint32_t totalRead_;
|
||||
uint32_t totalRead_; //!< bytes requested from host
|
||||
|
||||
// METHODS
|
||||
/*!
|
||||
|
||||
@@ -64,12 +64,15 @@ namespace Exiv2 {
|
||||
std::ostream& printCsLensByFocalLengthAndMaxAperture(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata);
|
||||
//! Special treatment pretty-print function for non-unique lens ids.
|
||||
std::ostream& printCsLensByFocalLength(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata);
|
||||
//! Special treatment pretty-print function for non-unique lens ids.
|
||||
std::ostream& printCsLensByFocalLengthTC(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata);
|
||||
//! Special treatment pretty-print function for non-unique lens ids.
|
||||
std::ostream& printCsLensFFFF(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata);
|
||||
@@ -1592,6 +1595,7 @@ namespace Exiv2 {
|
||||
return tagInfoPr_;
|
||||
}
|
||||
|
||||
//! canonTimeZoneCity - array of cityID/cityName used by Canon
|
||||
extern const TagDetails canonTimeZoneCity[] = {
|
||||
{ 0x0000, N_("n/a") },
|
||||
{ 0x0001, N_("Chatham Islands") },
|
||||
@@ -1797,6 +1801,7 @@ namespace Exiv2 {
|
||||
&& std::string(td.label_).find(ltfl.maxAperture_) != std::string::npos);
|
||||
}
|
||||
|
||||
//! extractLensFocalLength from metadata
|
||||
void extractLensFocalLength(LensTypeAndFocalLengthAndMaxAperture& ltfl,
|
||||
const ExifData* metadata)
|
||||
{
|
||||
@@ -1815,6 +1820,7 @@ namespace Exiv2 {
|
||||
}
|
||||
}
|
||||
|
||||
//! convertFocalLength to a human readable string
|
||||
void convertFocalLength(LensTypeAndFocalLengthAndMaxAperture& ltfl,
|
||||
double divisor)
|
||||
{
|
||||
@@ -1828,6 +1834,7 @@ namespace Exiv2 {
|
||||
ltfl.focalLength_ = oss.str();
|
||||
}
|
||||
|
||||
//! printCsLensByFocalLengthAndMaxAperture to human readable string
|
||||
std::ostream& printCsLensByFocalLengthAndMaxAperture(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata)
|
||||
@@ -1864,6 +1871,7 @@ namespace Exiv2 {
|
||||
return os << td->label_;
|
||||
}
|
||||
|
||||
//! printCsLensByFocalLength to human readable string
|
||||
std::ostream& printCsLensByFocalLength(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata)
|
||||
@@ -1885,6 +1893,7 @@ namespace Exiv2 {
|
||||
return os << td->label_;
|
||||
}
|
||||
|
||||
//! printCsLensByFocalLengthTC to human readable string
|
||||
std::ostream& printCsLensByFocalLengthTC(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata)
|
||||
@@ -1911,6 +1920,7 @@ namespace Exiv2 {
|
||||
return os << td->label_;
|
||||
}
|
||||
|
||||
//! printCsLensType by searching the config file if necessary
|
||||
std::ostream& CanonMakerNote::printCsLensType(std::ostream& os,
|
||||
const Value& value,
|
||||
const ExifData* metadata)
|
||||
|
||||
+1
-1
@@ -256,7 +256,7 @@ public:
|
||||
Keys keys_; //!< List of keys to match from the metadata
|
||||
std::string charset_; //!< Charset to use for UNICODE Exif user comment
|
||||
|
||||
Exiv2::DataBuf stdinBuf; //! < DataBuf with the binary bytes from stdin
|
||||
Exiv2::DataBuf stdinBuf; //!< DataBuf with the binary bytes from stdin
|
||||
|
||||
private:
|
||||
//! Pointer to the global Params object.
|
||||
|
||||
+2
-2
@@ -58,8 +58,8 @@ extern int strerror_r(int errnum, char *buf, size_t n);
|
||||
#endif
|
||||
|
||||
namespace Exiv2 {
|
||||
const char* ENVARDEF[] = {"/exiv2.php", "40"};
|
||||
const char* ENVARKEY[] = {"EXIV2_HTTP_POST", "EXIV2_TIMEOUT"};
|
||||
const char* ENVARDEF[] = {"/exiv2.php", "40"}; //!< @brief default URL for http exiv2 handler and time-out
|
||||
const char* ENVARKEY[] = {"EXIV2_HTTP_POST", "EXIV2_TIMEOUT"}; //!< @brief request keys for http exiv2 handler and time-out
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
std::string getEnv(EnVar var) {
|
||||
|
||||
+90
-39
@@ -14,7 +14,6 @@
|
||||
|
||||
namespace Exiv2 {
|
||||
|
||||
|
||||
/* inih -- simple .INI file parser
|
||||
|
||||
inih is released under the New BSD license (see LICENSE.txt). Go to the project
|
||||
@@ -32,15 +31,15 @@ https://github.com/benhoyt/inih
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* Typedef for prototype of handler function. */
|
||||
//! @brief typedef for prototype of handler function.
|
||||
typedef int (*ini_handler)(void* user, const char* section,
|
||||
const char* name, const char* value);
|
||||
|
||||
/* Typedef for prototype of fgets-style reader function. */
|
||||
//! Typedef for prototype of fgets-style reader function.
|
||||
typedef char* (*ini_reader)(char* str, int num, void* stream);
|
||||
|
||||
/* Parse given INI-style file. May have [section]s, name=value pairs
|
||||
/*!
|
||||
@brief Parse given INI-style file. May have [section]s, name=value pairs
|
||||
(whitespace stripped), and comments starting with ';' (semicolon). Section
|
||||
is "" if name=value pair parsed before any section heading. name:value
|
||||
pairs are also supported as a concession to Python's configparser.
|
||||
@@ -49,37 +48,58 @@ typedef char* (*ini_reader)(char* str, int num, void* stream);
|
||||
pointer as well as section, name, and value (data only valid for duration
|
||||
of handler call). Handler should return nonzero on success, zero on error.
|
||||
|
||||
Returns 0 on success, line number of first error on parse error (doesn't
|
||||
@param filename path to file
|
||||
@param handler user defined handler
|
||||
@param user void pointer passed to user handler
|
||||
|
||||
@return 0 on success, line number of first error on parse error (doesn't
|
||||
stop on first error), -1 on file open error, or -2 on memory allocation
|
||||
error (only when INI_USE_STACK is zero).
|
||||
|
||||
@return 0 on success
|
||||
*/
|
||||
int ini_parse(const char* filename, ini_handler handler, void* user);
|
||||
|
||||
/* Same as ini_parse(), but takes a FILE* instead of filename. This doesn't
|
||||
close the file when it's finished -- the caller must do that. */
|
||||
/*! @brief Same as ini_parse(), but takes a FILE* instead of filename. This doesn't
|
||||
close the file when it's finished -- the caller must do that.
|
||||
|
||||
@param file open "C" file
|
||||
@param handler user defined handler
|
||||
@param user void pointer passed to user handler
|
||||
*/
|
||||
int ini_parse_file(FILE* file, ini_handler handler, void* user);
|
||||
|
||||
/* Same as ini_parse(), but takes an ini_reader function pointer instead of
|
||||
filename. Used for implementing custom or string-based I/O. */
|
||||
/*! @brief Same as ini_parse(), but takes an ini_reader function pointer instead of
|
||||
filename. Used for implementing custom or string-based I/O.
|
||||
@param reader magic
|
||||
@param stream more magic
|
||||
@param handler user defined handler
|
||||
@param user void pointer passed to user handler
|
||||
|
||||
@return 0 on success
|
||||
*/
|
||||
int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler,
|
||||
void* user);
|
||||
|
||||
/* Nonzero to allow multi-line value parsing, in the style of Python's
|
||||
configparser. If allowed, ini_parse() will call the handler with the same
|
||||
name for each subsequent line parsed. */
|
||||
/*! @brief Nonzero to allow multi-line value parsing, in the style of Python's
|
||||
configparser. If allowed, ini_parse() will call the handler with the same
|
||||
name for each subsequent line parsed.
|
||||
*/
|
||||
#ifndef INI_ALLOW_MULTILINE
|
||||
#define INI_ALLOW_MULTILINE 1
|
||||
#endif
|
||||
|
||||
/* Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of
|
||||
the file. See http://code.google.com/p/inih/issues/detail?id=21 */
|
||||
/*! @brief Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of
|
||||
the file. See http://code.google.com/p/inih/issues/detail?id=21
|
||||
*/
|
||||
#ifndef INI_ALLOW_BOM
|
||||
#define INI_ALLOW_BOM 1
|
||||
#endif
|
||||
|
||||
/* Nonzero to allow inline comments (with valid inline comment characters
|
||||
/*! @brief Nonzero to allow inline comments (with valid inline comment characters
|
||||
specified by INI_INLINE_COMMENT_PREFIXES). Set to 0 to turn off and match
|
||||
Python 3.2+ configparser behaviour. */
|
||||
Python 3.2+ configparser behaviour.
|
||||
*/
|
||||
#ifndef INI_ALLOW_INLINE_COMMENTS
|
||||
#define INI_ALLOW_INLINE_COMMENTS 1
|
||||
#endif
|
||||
@@ -87,17 +107,17 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler,
|
||||
#define INI_INLINE_COMMENT_PREFIXES ";"
|
||||
#endif
|
||||
|
||||
/* Nonzero to use stack, zero to use heap (malloc/free). */
|
||||
//! @brief Nonzero to use stack, zero to use heap (malloc/free).
|
||||
#ifndef INI_USE_STACK
|
||||
#define INI_USE_STACK 1
|
||||
#endif
|
||||
|
||||
/* Stop parsing on first error (default is to keep parsing). */
|
||||
//! @brief Stop parsing on first error (default is to keep parsing).
|
||||
#ifndef INI_STOP_ON_FIRST_ERROR
|
||||
#define INI_STOP_ON_FIRST_ERROR 0
|
||||
#endif
|
||||
|
||||
/* Maximum line length for any line in INI file. */
|
||||
//! @brief Maximum line length for any line in INI file.
|
||||
#ifndef INI_MAX_LINE
|
||||
#define INI_MAX_LINE 200
|
||||
#endif
|
||||
@@ -109,43 +129,74 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler,
|
||||
#endif /* __INI_H__ */
|
||||
|
||||
|
||||
// Read an INI file into easy-to-access name/value pairs. (Note that I've gone
|
||||
// for simplicity here rather than speed, but it should be pretty decent.)
|
||||
/*! @brief Read an INI file into easy-to-access name/value pairs. (Note that I've gone
|
||||
for simplicity here rather than speed, but it should be pretty decent.)
|
||||
*/
|
||||
class EXIV2API INIReader
|
||||
{
|
||||
public:
|
||||
// Construct INIReader and parse given filename. See ini.h for more info
|
||||
// about the parsing.
|
||||
/*! @brief Construct INIReader and parse given filename. See ini.h for more info
|
||||
about the parsing.
|
||||
*/
|
||||
INIReader(std::string filename);
|
||||
|
||||
// Return the result of ini_parse(), i.e., 0 on success, line number of
|
||||
// first error on parse error, or -1 on file open error.
|
||||
/*! @brief Return the result of ini_parse(), i.e., 0 on success, line number of
|
||||
first error on parse error, or -1 on file open error.
|
||||
*/
|
||||
int ParseError();
|
||||
|
||||
// Get a string value from INI file, returning default_value if not found.
|
||||
/*! @brief Get a string value from INI file, returning default_value if not found.
|
||||
|
||||
@param section name of section
|
||||
@param name name of key
|
||||
@param default_value default if not found
|
||||
|
||||
@return value
|
||||
*/
|
||||
std::string Get(std::string section, std::string name,
|
||||
std::string default_value);
|
||||
|
||||
// Get an integer (long) value from INI file, returning default_value if
|
||||
// not found or not a valid integer (decimal "1234", "-1234", or hex "0x4d2").
|
||||
/*! @brief Get an integer (long) value from INI file, returning default_value if
|
||||
not found or not a valid integer (decimal "1234", "-1234", or hex "0x4d2").
|
||||
|
||||
@param section name of section
|
||||
@param name name of key
|
||||
@param default_value default if not found
|
||||
|
||||
@return value
|
||||
*/
|
||||
long GetInteger(std::string section, std::string name, long default_value);
|
||||
|
||||
// Get a real (floating point double) value from INI file, returning
|
||||
// default_value if not found or not a valid floating point value
|
||||
// according to strtod().
|
||||
/*! @brief Get a real (floating point double) value from INI file, returning
|
||||
default_value if not found or not a valid floating point value
|
||||
according to strtod().
|
||||
|
||||
@param section name of section
|
||||
@param name name of key
|
||||
@param default_value default if not found
|
||||
|
||||
@return value
|
||||
*/
|
||||
double GetReal(std::string section, std::string name, double default_value);
|
||||
|
||||
// Get a boolean value from INI file, returning default_value if not found or if
|
||||
// not a valid true/false value. Valid true values are "true", "yes", "on", "1",
|
||||
// and valid false values are "false", "no", "off", "0" (not case sensitive).
|
||||
/*! @brief Get a boolean value from INI file, returning default_value if not found or if
|
||||
not a valid true/false value. Valid true values are "true", "yes", "on", "1",
|
||||
and valid false values are "false", "no", "off", "0" (not case sensitive).
|
||||
|
||||
@param section name of section
|
||||
@param name name of key
|
||||
@param default_value default if not found
|
||||
|
||||
@return value
|
||||
*/
|
||||
bool GetBoolean(std::string section, std::string name, bool default_value);
|
||||
|
||||
private:
|
||||
int _error;
|
||||
std::map<std::string, std::string> _values;
|
||||
static std::string MakeKey(std::string section, std::string name);
|
||||
int _error; //!< status
|
||||
std::map<std::string, std::string> _values; //!< values from file
|
||||
static std::string MakeKey(std::string section, std::string name); //!< return key encoded from section/name
|
||||
static int ValueHandler(void* user, const char* section, const char* name,
|
||||
const char* value);
|
||||
const char* value); //!< value handler
|
||||
};
|
||||
} // namespace Exiv2
|
||||
|
||||
|
||||
+1
-1
@@ -559,7 +559,7 @@ namespace Exiv2 {
|
||||
}
|
||||
} // JpegBase::readMetadata
|
||||
|
||||
bool isBlank(std::string& s)
|
||||
static bool isBlank(std::string& s) //!< predicate
|
||||
{
|
||||
for ( std::size_t i = 0 ; i < s.length() ; i++ )
|
||||
if ( s[i] != ' ' )
|
||||
|
||||
+6
-5
@@ -1994,28 +1994,29 @@ namespace Exiv2 {
|
||||
return result;
|
||||
}
|
||||
|
||||
// http://stackoverflow.com/questions/1798112/removing-leading-and-trailing-spaces-from-a-string
|
||||
// trim from left
|
||||
/*! http://stackoverflow.com/questions/1798112/removing-leading-and-trailing-spaces-from-a-string
|
||||
trim from left
|
||||
*/
|
||||
inline std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v")
|
||||
{
|
||||
s.erase(0, s.find_first_not_of(t));
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from right
|
||||
//! trim from right
|
||||
inline std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v")
|
||||
{
|
||||
s.erase(s.find_last_not_of(t) + 1);
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from left & right
|
||||
//! trim from left & right
|
||||
inline std::string& trim(std::string& s, const char* t = " \t\n\r\f\v")
|
||||
{
|
||||
return ltrim(rtrim(s, t), t);
|
||||
}
|
||||
|
||||
// http://www.sbin.org/doc/HOWTO/C++Programming-HOWTO-7.html
|
||||
//! http://www.sbin.org/doc/HOWTO/C++Programming-HOWTO-7.html
|
||||
static void tokenize(const std::string& str,
|
||||
std::vector<std::string>& tokens,
|
||||
const std::string& delimiters = " ")
|
||||
|
||||
@@ -1207,6 +1207,7 @@ namespace Exiv2 {
|
||||
return result;
|
||||
}
|
||||
|
||||
//! resolveLens0x32c print lens in human format
|
||||
std::ostream& resolveLens0x32c(std::ostream& os, const Value& value,
|
||||
const ExifData* metadata)
|
||||
{
|
||||
@@ -1231,6 +1232,7 @@ namespace Exiv2 {
|
||||
// #1144 end
|
||||
|
||||
// #816 begin
|
||||
//! resolveLens0x3ff print lens in human format
|
||||
std::ostream& resolveLens0x3ff(std::ostream& os, const Value& value,
|
||||
const ExifData* metadata)
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -1290,6 +1292,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
// #1155
|
||||
//! resolveLens0x8ff print lens in human format
|
||||
std::ostream& resolveLens0x8ff(std::ostream& os, const Value& value,
|
||||
const ExifData* metadata)
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -1317,6 +1320,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
// #1155
|
||||
//! resolveLens0x319 print lens in human format
|
||||
std::ostream& resolveLens0x319(std::ostream& os, const Value& value,
|
||||
const ExifData* metadata)
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -1351,6 +1355,7 @@ namespace Exiv2 {
|
||||
return EXV_PRINT_COMBITAG_MULTI(pentaxLensType, 2, 1, 2)(os, value, metadata);
|
||||
}
|
||||
|
||||
//! resolveLensType print lens in human format
|
||||
std::ostream& resolveLensType(std::ostream& os, const Value& value,
|
||||
const ExifData* metadata)
|
||||
{
|
||||
|
||||
+4
-5
@@ -2697,9 +2697,7 @@ namespace Exiv2 {
|
||||
return fct(os, value, 0);
|
||||
}
|
||||
|
||||
//! @cond IGNORE
|
||||
|
||||
//! Internal Pimpl structure with private members and data of class XmpKey.
|
||||
//! @brief Internal Pimpl structure with private members and data of class XmpKey.
|
||||
struct XmpKey::Impl {
|
||||
Impl() {} //!< Default constructor
|
||||
Impl(const std::string& prefix, const std::string& property); //!< Constructor
|
||||
@@ -2711,7 +2709,7 @@ namespace Exiv2 {
|
||||
|
||||
@throw Error if the key cannot be decomposed.
|
||||
*/
|
||||
void decomposeKey(const std::string& key);
|
||||
void decomposeKey(const std::string& key); //!< Misterious magic
|
||||
|
||||
// DATA
|
||||
static const char* familyName_; //!< "Xmp"
|
||||
@@ -2719,8 +2717,8 @@ namespace Exiv2 {
|
||||
std::string prefix_; //!< Prefix
|
||||
std::string property_; //!< Property name
|
||||
};
|
||||
//! @endcond
|
||||
|
||||
//! @brief Constructor for Internal Pimpl structure XmpKey::Impl::Impl
|
||||
XmpKey::Impl::Impl(const std::string& prefix, const std::string& property)
|
||||
{
|
||||
// Validate prefix
|
||||
@@ -2808,6 +2806,7 @@ namespace Exiv2 {
|
||||
return XmpProperties::ns(p_->prefix_);
|
||||
}
|
||||
|
||||
//! @cond IGNORE
|
||||
void XmpKey::Impl::decomposeKey(const std::string& key)
|
||||
{
|
||||
// Get the family name, prefix and property name parts of the key
|
||||
|
||||
+1
-1
@@ -108,7 +108,7 @@ html: news
|
||||
@bin/download.sh
|
||||
@bin/gen.py master/*.in
|
||||
@echo "Moving files to html/ ..."
|
||||
-@mv -f master/*.html master/*.php html/
|
||||
-@mv -f master/*.html html/
|
||||
|
||||
news: var/__whatsnew-latest__ var/__whatsnew-table__ html/rss.xml
|
||||
|
||||
|
||||
@@ -1487,13 +1487,13 @@ XML_OUTPUT = xml
|
||||
# which can be used by a validating XML parser to check the
|
||||
# syntax of the XML files.
|
||||
|
||||
XML_SCHEMA =
|
||||
# XML_SCHEMA =
|
||||
|
||||
# The XML_DTD tag can be used to specify an XML DTD,
|
||||
# which can be used by a validating XML parser to check the
|
||||
# syntax of the XML files.
|
||||
|
||||
XML_DTD =
|
||||
# XML_DTD =
|
||||
|
||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
|
||||
# dump the program listings (including syntax highlighting
|
||||
|
||||
Reference in New Issue
Block a user