diff --git a/config/Doxyfile b/config/Doxyfile index f2969889..db62e1de 100644 --- a/config/Doxyfile +++ b/config/Doxyfile @@ -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 diff --git a/include/exiv2/basicio.hpp b/include/exiv2/basicio.hpp index 7c5e8285..beb491c7 100644 --- a/include/exiv2/basicio.hpp +++ b/include/exiv2/basicio.hpp @@ -1071,6 +1071,7 @@ namespace Exiv2 { // Pimpl idiom class Impl; + //! Pointer to implementation Impl* p_; }; // class RemoteIo diff --git a/include/exiv2/cr2image.hpp b/include/exiv2/cr2image.hpp index 672bc285..a6564ceb 100644 --- a/include/exiv2/cr2image.hpp +++ b/include/exiv2/cr2image.hpp @@ -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); /*! diff --git a/include/exiv2/error.hpp b/include/exiv2/error.hpp index 7ce7f0fe..01d23fc1 100644 --- a/include/exiv2/error.hpp +++ b/include/exiv2/error.hpp @@ -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 + //! BasicError constructor BasicError::BasicError(int code) : code_(code), count_(0) { @@ -274,6 +275,7 @@ namespace Exiv2 { } template template + //! BasicError constructor BasicError::BasicError(int code, const A& arg1) : code_(code), count_(1), arg1_(toBasicString(arg1)) { @@ -281,6 +283,7 @@ namespace Exiv2 { } template template + //! BasicError constructor BasicError::BasicError(int code, const A& arg1, const B& arg2) : code_(code), count_(2), arg1_(toBasicString(arg1)), @@ -290,6 +293,7 @@ namespace Exiv2 { } template template + //! BasicError constructor BasicError::BasicError(int code, const A& arg1, const B& arg2, const C& arg3) : code_(code), count_(3), arg1_(toBasicString(arg1)), diff --git a/include/exiv2/futils.hpp b/include/exiv2/futils.hpp index db1dcd67..23c6a328 100644 --- a/include/exiv2/futils.hpp +++ b/include/exiv2/futils.hpp @@ -151,7 +151,7 @@ namespace Exiv2 { /*! @brief Get the path of file URL. - @param url The file URL in the format file:/// or file:///. + @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); diff --git a/include/exiv2/http.hpp b/include/exiv2/http.hpp index 6805f333..ccc27a14 100644 --- a/include/exiv2/http.hpp +++ b/include/exiv2/http.hpp @@ -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); } diff --git a/include/exiv2/image.hpp b/include/exiv2/image.hpp index e4e54b4a..4040d524 100644 --- a/include/exiv2/image.hpp +++ b/include/exiv2/image.hpp @@ -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: diff --git a/include/exiv2/jp2image.hpp b/include/exiv2/jp2image.hpp index 51c99d21..d66ced4b 100644 --- a/include/exiv2/jp2image.hpp +++ b/include/exiv2/jp2image.hpp @@ -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); diff --git a/include/exiv2/jpgimage.hpp b/include/exiv2/jpgimage.hpp index 753c442d..d0c802d5 100644 --- a/include/exiv2/jpgimage.hpp +++ b/include/exiv2/jpgimage.hpp @@ -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); //@} diff --git a/include/exiv2/pngimage.hpp b/include/exiv2/pngimage.hpp index a70dabb9..d064b4f6 100644 --- a/include/exiv2/pngimage.hpp +++ b/include/exiv2/pngimage.hpp @@ -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); //@} diff --git a/include/exiv2/properties.hpp b/include/exiv2/properties.hpp index 18c61a8b..415ab4ab 100644 --- a/include/exiv2/properties.hpp +++ b/include/exiv2/properties.hpp @@ -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_; /*! diff --git a/include/exiv2/rwlock.hpp b/include/exiv2/rwlock.hpp index 4d5fcc9b..caafb638 100644 --- a/include/exiv2/rwlock.hpp +++ b/include/exiv2/rwlock.hpp @@ -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_; }; } diff --git a/include/exiv2/tiffimage.hpp b/include/exiv2/tiffimage.hpp index c0dc3620..e74fabab 100644 --- a/include/exiv2/tiffimage.hpp +++ b/include/exiv2/tiffimage.hpp @@ -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); diff --git a/include/exiv2/utilsvideo.hpp b/include/exiv2/utilsvideo.hpp index 3eec31e1..2f37f6d9 100644 --- a/include/exiv2/utilsvideo.hpp +++ b/include/exiv2/utilsvideo.hpp @@ -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 diff --git a/include/exiv2/value.hpp b/include/exiv2/value.hpp index 207b413b..64a8ca7f 100644 --- a/include/exiv2/value.hpp +++ b/include/exiv2/value.hpp @@ -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 diff --git a/include/exiv2/version.hpp b/include/exiv2/version.hpp index 2c310bfb..b141806e 100644 --- a/include/exiv2/version.hpp +++ b/include/exiv2/version.hpp @@ -37,6 +37,9 @@ // + standard includes #include +/*! + @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_; }; /*! diff --git a/src/basicio.cpp b/src/basicio.cpp index b49d9c56..e899d8de 100644 --- a/src/basicio.cpp +++ b/src/basicio.cpp @@ -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 /*! diff --git a/src/canonmn.cpp b/src/canonmn.cpp index d6a78dfe..450c7d9e 100644 --- a/src/canonmn.cpp +++ b/src/canonmn.cpp @@ -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) diff --git a/src/exiv2app.hpp b/src/exiv2app.hpp index c1d99630..affbcb80 100644 --- a/src/exiv2app.hpp +++ b/src/exiv2app.hpp @@ -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. diff --git a/src/futils.cpp b/src/futils.cpp index e8744f67..d1427188 100644 --- a/src/futils.cpp +++ b/src/futils.cpp @@ -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) { diff --git a/src/ini_int.hpp b/src/ini_int.hpp index 52a45543..ac7e84e2 100755 --- a/src/ini_int.hpp +++ b/src/ini_int.hpp @@ -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 _values; - static std::string MakeKey(std::string section, std::string name); + int _error; //!< status + std::map _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 diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp index 232ce0f7..525f4917 100644 --- a/src/jpgimage.cpp +++ b/src/jpgimage.cpp @@ -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] != ' ' ) diff --git a/src/minoltamn.cpp b/src/minoltamn.cpp index e280e5e2..e4d00b11 100644 --- a/src/minoltamn.cpp +++ b/src/minoltamn.cpp @@ -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& tokens, const std::string& delimiters = " ") diff --git a/src/pentaxmn.cpp b/src/pentaxmn.cpp index 26ec01de..a5e4e19c 100644 --- a/src/pentaxmn.cpp +++ b/src/pentaxmn.cpp @@ -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) { diff --git a/src/properties.cpp b/src/properties.cpp index b5a7cca4..01273823 100644 --- a/src/properties.cpp +++ b/src/properties.cpp @@ -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 diff --git a/website/Makefile b/website/Makefile index 451e6ea9..bb7c7794 100644 --- a/website/Makefile +++ b/website/Makefile @@ -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 diff --git a/website/doxygen/Doxyfile b/website/doxygen/Doxyfile index b4df3129..edab945f 100644 --- a/website/doxygen/Doxyfile +++ b/website/doxygen/Doxyfile @@ -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