diff options
56 files changed, 5321 insertions, 2786 deletions
diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3944fce..0000000 --- a/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.swp -*~$ -tags -cscope.* -.ycm_extra_conf.pyc -/build -/obj* diff --git a/CMakeLists.txt b/CMakeLists.txt index ac224ff..d707ab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,14 @@ project(cmocka C) # Required cmake version -cmake_minimum_required(VERSION 2.6.0) +cmake_minimum_required(VERSION 3.3.0) # global needed variables set(APPLICATION_NAME ${PROJECT_NAME}) set(APPLICATION_VERSION_MAJOR "1") set(APPLICATION_VERSION_MINOR "1") -set(APPLICATION_VERSION_PATCH "1") +set(APPLICATION_VERSION_PATCH "2") set(APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}") @@ -19,22 +19,22 @@ set(APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINO # Increment AGE. Set REVISION to 0 # If the source code was changed, but there were no interface changes: # Increment REVISION. -set(LIBRARY_VERSION "0.4.1") +set(LIBRARY_VERSION "0.5.0") set(LIBRARY_SOVERSION "0") # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked set(CMAKE_MODULE_PATH - ${CMAKE_SOURCE_DIR}/cmake/Modules + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules ) # add definitions include(DefineCMakeDefaults) include(DefinePlatformDefaults) -include(DefineCompilerFlags) include(DefineInstallationPaths) include(DefineOptions.cmake) include(CPackConfig.cmake) include(CheckSymbolExists) +include(CompilerChecks.cmake) # disallow in-source build include(MacroEnsureOutOfSourceBuild) @@ -86,3 +86,7 @@ install( COMPONENT devel ) + +# Add 'make dist' target which makes sure to invoke cmake before +add_custom_target(dist + COMMAND ${CMAKE_MAKE_PROGRAM} package_source) diff --git a/CPackConfig.cmake b/CPackConfig.cmake index 8d427a3..a11f803 100644 --- a/CPackConfig.cmake +++ b/CPackConfig.cmake @@ -4,10 +4,10 @@ ### general settings set(CPACK_PACKAGE_NAME ${APPLICATION_NAME}) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Unit testing framework for C with mock objects") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_PACKAGE_VENDOR "Andreas Schneider") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") ### versions @@ -18,7 +18,7 @@ set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSIO ### source generator -set(CPACK_SOURCE_GENERATOR "TGZ") +set(CPACK_SOURCE_GENERATOR "TXZ") set(CPACK_SOURCE_IGNORE_FILES "~$;[.]swp$;/[.]svn/;/[.]git/;.gitignore;/obj*;tags;cscope.*;.ycm_extra_conf.pyc") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") diff --git a/CTestConfig.cmake b/CTestConfig.cmake index f93a981..8645258 100644 --- a/CTestConfig.cmake +++ b/CTestConfig.cmake @@ -4,7 +4,6 @@ set(CTEST_PROJECT_NAME "cmocka") set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC") set(CTEST_DROP_METHOD "https") -set(CTEST_DROP_SITE "mock.cryptomilk.org") +set(CTEST_DROP_SITE "test.cmocka.org") set(CTEST_DROP_LOCATION "/submit.php?project=${CTEST_PROJECT_NAME}") set(CTEST_DROP_SITE_CDASH TRUE) - @@ -1,3 +1,11 @@ +Wed Aug 29 2018 Andreas Schneider <asn@cryptomilk.org> + * cmocka version 1.1.2 + * Added function to filter tests (cmocka_set_test_filter) + * Added new mocking example (uptime) + * Fixed fixture error reporting + * Fixed compiler flags detection + * Some improvement for API documentation + Fri Apr 07 2016 Andreas Schneider <asn@cryptomilk.org> * cmocka: version 1.1.1 * Fixed TAP output diff --git a/CompilerChecks.cmake b/CompilerChecks.cmake new file mode 100644 index 0000000..f8a7af1 --- /dev/null +++ b/CompilerChecks.cmake @@ -0,0 +1,93 @@ +include(AddCCompilerFlag) +include(CheckCCompilerFlagSSP) + +if (UNIX) + # + # Check for -Werror turned on if possible + # + # This will prevent that compiler flags are detected incorrectly. + # + check_c_compiler_flag("-Werror" REQUIRED_FLAGS_WERROR) + if (REQUIRED_FLAGS_WERROR) + set(CMAKE_REQUIRED_FLAGS "-Werror") + + if (PICKY_DEVELOPER) + list(APPEND SUPPORTED_COMPILER_FLAGS "-Werror") + endif() + endif() + + add_c_compiler_flag("-std=gnu99" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-pedantic" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-pedantic-errors" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wall" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wshadow" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wmissing-prototypes" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wcast-align" SUPPORTED_COMPILER_FLAGS) + #add_c_compiler_flag("-Wcast-qual" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=address" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wstrict-prototypes" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=strict-prototypes" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wwrite-strings" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=write-strings" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror-implicit-function-declaration" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wpointer-arith" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=pointer-arith" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wdeclaration-after-statement" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=declaration-after-statement" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wreturn-type" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=return-type" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wuninitialized" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=uninitialized" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wimplicit-fallthrough" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=strict-overflow" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wstrict-overflow=2" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wno-format-zero-length" SUPPORTED_COMPILER_FLAGS) + + check_c_compiler_flag("-Wformat" REQUIRED_FLAGS_WFORMAT) + if (REQUIRED_FLAGS_WFORMAT) + list(APPEND SUPPORTED_COMPILER_FLAGS "-Wformat") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wformat") + endif() + add_c_compiler_flag("-Wformat-security" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Werror=format-security" SUPPORTED_COMPILER_FLAGS) + + # Allow zero for a variadic macro argument + add_c_compiler_flag("-Wno-gnu-zero-variadic-macro-arguments" SUPPORTED_COMPILER_FLAGS) + + add_c_compiler_flag("-fno-common" SUPPORTED_COMPILER_FLAGS) + + if (CMAKE_BUILD_TYPE) + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) + if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel)) + add_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" SUPPORTED_COMPILER_FLAGS) + endif() + endif() + + check_c_compiler_flag_ssp("-fstack-protector" WITH_STACK_PROTECTOR) + if (WITH_STACK_PROTECTOR) + list(APPEND SUPPORTED_COMPILER_FLAGS "-fstack-protector") + endif() + + if (PICKY_DEVELOPER) + add_c_compiler_flag("-Wno-error=deprecated-declarations" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("-Wno-error=tautological-compare" SUPPORTED_COMPILER_FLAGS) + endif() + + # Unset CMAKE_REQUIRED_FLAGS + unset(CMAKE_REQUIRED_FLAGS) +endif() + +if (MSVC) + add_c_compiler_flag("/D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("/D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("/D _CRT_NONSTDC_NO_WARNINGS=1" SUPPORTED_COMPILER_FLAGS) + add_c_compiler_flag("/D _CRT_SECURE_NO_WARNINGS=1" SUPPORTED_COMPILER_FLAGS) +endif() + +# This removes this annoying warning +# "warning: 'BN_CTX_free' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]" +if (OSX) + add_c_compiler_flag("-Wno-deprecated-declarations" SUPPORTED_COMPILER_FLAGS) +endif() + +set(DEFAULT_C_COMPILE_FLAGS ${SUPPORTED_COMPILER_FLAGS} CACHE INTERNAL "Default C Compiler Flags" FORCE) diff --git a/DefineOptions.cmake b/DefineOptions.cmake index 7564a22..bca0848 100644 --- a/DefineOptions.cmake +++ b/DefineOptions.cmake @@ -1,6 +1,7 @@ option(WITH_STATIC_LIB "Build with a static library" OFF) option(WITH_CMOCKERY_SUPPORT "Install a cmockery header" OFF) option(UNIT_TESTING "Build with unit testing" OFF) +option(PICKY_DEVELOPER "Build with picky developer flags" OFF) if (UNIT_TESTING) set(WITH_STATIC_LIB ON) @@ -26,7 +26,8 @@ On Windows you should choose a makefile gernerator with -G, for example: cmake -G "Visual Studio 12 2013" -DCMAKE_BUILD_TYPE=Debug /path/to/source You can also use the CMake GUI which is shipped with CMake. It will list all -available generators for MSVC on Windows. +available generators for MSVC on Windows. We only support Visual Studio 2013 +or newer which supports C99. ### CMake standard options Here is a list of the most interesting options provided out of the box by @@ -69,7 +70,7 @@ If you want to install cmocka after compilation run: The cmocka library can be found in the `build/src` directory. You can run the binaries in `build/examples/*` which is a -are exsample tests. +are example tests. ## Testing @@ -1,15 +1,21 @@ -CMOCKA -======= +cmocka +====== -cmocka is a fork for Google's cmockery unit testing framework to fix bugs and -support it in future. -See https://code.google.com/p/cmockery/ +cmocka is an elegant unit testing framework for C with support for mock +objects. It only requires the standard C library, works on a range of computing +platforms (including embedded) and with different compilers. For information about how to use the cmocka unit testing framework see -doc/index.html. +doc/index.html or https://api.cmocka.org/. -COMPILING +Compiling --------- + To compile the cmocka library and example applications run, create a build dir, and in the build dir call 'cmake /path/to/cmocka' followed by 'make'. On Windows you can use the cmake gui. More details can be found in the INSTALL file. + +Website +------- + +https://cmocka.org diff --git a/cmake/Modules/AddCCompilerFlag.cmake b/cmake/Modules/AddCCompilerFlag.cmake new file mode 100644 index 0000000..c24c215 --- /dev/null +++ b/cmake/Modules/AddCCompilerFlag.cmake @@ -0,0 +1,21 @@ +# +# add_c_compiler_flag("-Werror" SUPPORTED_CFLAGS) +# +# Copyright (c) 2018 Andreas Schneider <asn@cryptomilk.org> +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +include(CheckCCompilerFlag) + +macro(add_c_compiler_flag _COMPILER_FLAG _OUTPUT_VARIABLE) + string(TOUPPER ${_COMPILER_FLAG} _COMPILER_FLAG_NAME) + string(REGEX REPLACE "^-" "" _COMPILER_FLAG_NAME "${_COMPILER_FLAG_NAME}") + string(REGEX REPLACE "(-|=|\ )" "_" _COMPILER_FLAG_NAME "${_COMPILER_FLAG_NAME}") + + check_c_compiler_flag("${_COMPILER_FLAG}" WITH_${_COMPILER_FLAG_NAME}_FLAG) + if (WITH_${_COMPILER_FLAG_NAME}_FLAG) + #string(APPEND ${_OUTPUT_VARIABLE} "${_COMPILER_FLAG} ") + list(APPEND ${_OUTPUT_VARIABLE} ${_COMPILER_FLAG}) + endif() +endmacro() diff --git a/cmake/Modules/CheckCCompilerFlagSSP.cmake b/cmake/Modules/CheckCCompilerFlagSSP.cmake index 2fe4395..e421091 100644 --- a/cmake/Modules/CheckCCompilerFlagSSP.cmake +++ b/cmake/Modules/CheckCCompilerFlagSSP.cmake @@ -15,12 +15,15 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. - +# Requires cmake 3.10 +#include_guard(GLOBAL) include(CheckCSourceCompiles) -function(CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT) +macro(CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT) set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}") + check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT}) + set(CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") -endfunction(CHECK_C_COMPILER_FLAG_SSP) +endmacro(CHECK_C_COMPILER_FLAG_SSP) diff --git a/cmake/Modules/DefineCompilerFlags.cmake b/cmake/Modules/DefineCompilerFlags.cmake deleted file mode 100644 index cef5dc1..0000000 --- a/cmake/Modules/DefineCompilerFlags.cmake +++ /dev/null @@ -1,79 +0,0 @@ -# define system dependent compiler flags - -include(CheckCCompilerFlag) -include(CheckCCompilerFlagSSP) - -if (UNIX AND NOT WIN32) - # - # Define GNUCC compiler flags - # - if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)") - - # add -Wconversion ? - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -pedantic -pedantic-errors") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute -Wundef -Wstrict-prototypes") - - # with -fPIC - check_c_compiler_flag("-fPIC" WITH_FPIC) - if (WITH_FPIC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - endif (WITH_FPIC) - - check_c_compiler_flag_ssp("-fstack-protector" WITH_STACK_PROTECTOR) - if (WITH_STACK_PROTECTOR) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector") - endif (WITH_STACK_PROTECTOR) - - if (CMAKE_BUILD_TYPE) - string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) - if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel)) - check_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE) - if (WITH_FORTIFY_SOURCE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wp,-D_FORTIFY_SOURCE=2") - endif (WITH_FORTIFY_SOURCE) - endif() - endif() - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE") - endif (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)") - - # - # Check for large filesystem support - # - if (CMAKE_SIZEOF_VOID_P MATCHES "8") - # with large file support - execute_process( - COMMAND - getconf LFS64_CFLAGS - OUTPUT_VARIABLE - _lfs_CFLAGS - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - else (CMAKE_SIZEOF_VOID_P MATCHES "8") - # with large file support - execute_process( - COMMAND - getconf LFS_CFLAGS - OUTPUT_VARIABLE - _lfs_CFLAGS - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif (CMAKE_SIZEOF_VOID_P MATCHES "8") - if (_lfs_CFLAGS) - string(REGEX REPLACE "[\r\n]" " " "${_lfs_CFLAGS}" "${${_lfs_CFLAGS}}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_lfs_CFLAGS}") - endif (_lfs_CFLAGS) - -endif (UNIX AND NOT WIN32) - -if (MSVC) - # Use secure functions by defaualt and suppress warnings about - #"deprecated" functions - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1") -endif (MSVC) diff --git a/cmake/Modules/FindNSIS.cmake b/cmake/Modules/FindNSIS.cmake index 08d839b..9f1ab17 100644 --- a/cmake/Modules/FindNSIS.cmake +++ b/cmake/Modules/FindNSIS.cmake @@ -1,6 +1,10 @@ # - Try to find NSIS # Once done this will define # +# NSIS_ROOT_PATH - Set this variable to the root installation of NSIS +# +# Read-Only variables: +# # NSIS_FOUND - system has NSIS # NSIS_MAKE - NSIS creator executable # @@ -17,17 +21,16 @@ # if (WIN32) - set(_NSIS_ROOT_HINTS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\NSIS;Default]") + set(_x86 "(x86)") set(_NSIS_ROOT_PATHS - $ENV{PROGRAMFILES}/NSIS) + "$ENV{ProgramFiles}/NSIS" + "$ENV{ProgramFiles${_x86}}/NSIS" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\NSIS;Default]") find_path(NSIS_ROOT_PATH NAMES Include/Library.nsh - HINTS - ${_NSIS_ROOT_HINTS} PATHS ${_NSIS_ROOT_PATHS} ) diff --git a/cmake/Modules/UseDoxygen.cmake b/cmake/Modules/UseDoxygen.cmake deleted file mode 100644 index 72c384d..0000000 --- a/cmake/Modules/UseDoxygen.cmake +++ /dev/null @@ -1,140 +0,0 @@ -# - Run Doxygen -# -# Adds a doxygen target that runs doxygen to generate the html -# and optionally the LaTeX API documentation. -# The doxygen target is added to the doc target as a dependency. -# i.e.: the API documentation is built with: -# make doc -# -# USAGE: GLOBAL INSTALL -# -# Install it with: -# cmake ./ && sudo make install -# Add the following to the CMakeLists.txt of your project: -# include(UseDoxygen OPTIONAL) -# Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it. -# -# USAGE: INCLUDE IN PROJECT -# -# set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) -# include(UseDoxygen) -# Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory. -# -# -# CONFIGURATION -# -# To configure Doxygen you can edit Doxyfile.in and set some variables in cmake. -# Variables you may define are: -# DOXYFILE_SOURCE_DIR - Path where the Doxygen input files are. -# Defaults to the current source directory. -# DOXYFILE_EXTRA_SOURCES - Additional source diretories/files for Doxygen to scan. -# The Paths should be in double quotes and separated by space. e.g.: -# "${CMAKE_CURRENT_BINARY_DIR}/foo.c" "${CMAKE_CURRENT_BINARY_DIR}/bar/" -# -# DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored. -# Defaults to "${CMAKE_CURRENT_BINARY_DIR}/doc". -# -# DOXYFILE_LATEX - ON/OFF; Set to "ON" if you want the LaTeX documentation -# to be built. -# DOXYFILE_LATEX_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where -# the Doxygen LaTeX output is stored. Defaults to "latex". -# -# DOXYFILE_HTML_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where -# the Doxygen html output is stored. Defaults to "html". -# - -# -# Copyright (c) 2009, 2010, 2011 Tobias Rautenkranz <tobias@rautenkranz.ch> -# -# Redistribution and use is allowed according to the terms of the New -# BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# - -macro(usedoxygen_set_default name value type docstring) - if(NOT DEFINED "${name}") - set("${name}" "${value}" CACHE "${type}" "${docstring}") - endif() -endmacro() - -find_package(Doxygen) - -if(DOXYGEN_FOUND) - find_file(DOXYFILE_IN "Doxyfile.in" - PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/" - NO_DEFAULT_PATH - DOC "Path to the doxygen configuration template file") - set(DOXYFILE "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(DOXYFILE_IN DEFAULT_MSG "DOXYFILE_IN") -endif() - -if(DOXYGEN_FOUND AND DOXYFILE_IN_FOUND) - usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc" - PATH "Doxygen output directory") - usedoxygen_set_default(DOXYFILE_HTML_DIR "html" - STRING "Doxygen HTML output directory") - usedoxygen_set_default(DOXYFILE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" - PATH "Input files source directory") - usedoxygen_set_default(DOXYFILE_EXTRA_SOURCE_DIRS "" - STRING "Additional source files/directories separated by space") - set(DOXYFILE_SOURCE_DIRS "\"${DOXYFILE_SOURCE_DIR}\" ${DOXYFILE_EXTRA_SOURCES}") - - usedoxygen_set_default(DOXYFILE_LATEX YES BOOL "Generate LaTeX API documentation" OFF) - usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex" STRING "LaTex output directory") - - mark_as_advanced(DOXYFILE_OUTPUT_DIR DOXYFILE_HTML_DIR DOXYFILE_LATEX_DIR - DOXYFILE_SOURCE_DIR DOXYFILE_EXTRA_SOURCE_DIRS DOXYFILE_IN) - - - set_property(DIRECTORY - APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES - "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}") - - add_custom_target(doxygen - COMMAND "${DOXYGEN_EXECUTABLE}" - "${DOXYFILE}" - COMMENT "Writing documentation to ${DOXYFILE_OUTPUT_DIR}..." - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") - - set(DOXYFILE_DOT "NO") - if(DOXYGEN_DOT_EXECUTABLE) - set(DOXYFILE_DOT "YES") - endif() - - ## LaTeX - set(DOXYFILE_PDFLATEX "NO") - - set_property(DIRECTORY APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES - "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") - - if(DOXYFILE_LATEX STREQUAL "ON") - set(DOXYFILE_GENERATE_LATEX "YES") - find_package(LATEX) - find_program(DOXYFILE_MAKE make) - mark_as_advanced(DOXYFILE_MAKE) - if(LATEX_COMPILER AND MAKEINDEX_COMPILER AND DOXYFILE_MAKE) - if(PDFLATEX_COMPILER) - set(DOXYFILE_PDFLATEX "YES") - endif() - - add_custom_command(TARGET doxygen - POST_BUILD - COMMAND "${DOXYFILE_MAKE}" - COMMENT "Running LaTeX for Doxygen documentation in ${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}..." - WORKING_DIRECTORY "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") - else() - set(DOXYGEN_LATEX "NO") - endif() - else() - set(DOXYFILE_GENERATE_LATEX "NO") - endif() - - - configure_file("${DOXYFILE_IN}" "${DOXYFILE}" @ONLY) - - add_custom_target(doc) - add_dependencies(doc doxygen) -endif() diff --git a/cmocka-config.cmake.in b/cmocka-config.cmake.in index 317f0a2..e92ad03 100644 --- a/cmocka-config.cmake.in +++ b/cmocka-config.cmake.in @@ -9,3 +9,5 @@ endif() set(CMOCKA_LIBRARY @LIB_INSTALL_DIR@/@CMOCKA_LIBRARY_NAME@) set(CMOCKA_LIBRARIES @LIB_INSTALL_DIR@/@CMOCKA_LIBRARY_NAME@) + +mark_as_advanced(CMOCKA_LIBRARY CMOCKA_INCLUDE_DIR) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 3124281..4e3dc23 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,5 +1,41 @@ # # Build the documentation # -include(UseDoxygen OPTIONAL) +find_package(Doxygen) +if (DOXYGEN_FOUND) + set(DOXYGEN_PROJECT_NAME ${APPLICATION_NAME}) + set(DOXYGEN_PROJECT_NUMBER ${APPLICATION_VERSION}) + set(DOXYGEN_PROJECT_BRIEF "Unit testing library with mock support") + + set(DOXYGEN_TAB_SIZE 4) + set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES) + set(DOXYGEN_MARKDOWN_SUPPORT YES) + + set(DOXYGEN_PREDEFINED DOXYGEN + CMOCKA_PRINTF_ATTRIBUTE(x,y)) + + set(DOXYGEN_EXCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/that_style) + set(DOXYGEN_HTML_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/that_style/header.html) + set(DOXYGEN_HTML_EXTRA_STYLESHEET ${CMAKE_CURRENT_SOURCE_DIR}/that_style/that_style.css) + set(DOXYGEN_HTML_EXTRA_FILES ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/nav_edge_left.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/nav_edge_right.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/nav_edge_inter.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/sync_off.png + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/sync_on.png + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/splitbar_handle.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/doc.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/mag_glass.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/folderclosed.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/img/folderopen.svg + ${CMAKE_CURRENT_SOURCE_DIR}/that_style/js/striped_bg.js) + + set(_doxyfile_template "${CMAKE_BINARY_DIR}/CMakeDoxyfile.in") + set(_target_doxyfile "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.docs") + configure_file("${_doxyfile_template}" "${_target_doxyfile}") + + doxygen_add_docs(docs + ${cmocka-library_SOURCE_DIR} + ${cmocka-headers_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}) +endif(DOXYGEN_FOUND) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in deleted file mode 100644 index 221beba..0000000 --- a/doc/Doxyfile.in +++ /dev/null @@ -1,2442 +0,0 @@ -# Doxyfile 1.8.12 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = @APPLICATION_NAME@ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = @APPLICATION_VERSION@ - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = "@CMAKE_CURRENT_BINARY_DIR@" - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = "@CMAKE_SOURCE_DIR@" - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = "@CMAKE_SOURCE_DIR@" - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = YES - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = @CMAKE_INTERNAL_DOC@ - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = YES - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if <section_label> ... \endif and \cond <section_label> -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = "@CMAKE_SOURCE_DIR@/include" \ - "@CMAKE_SOURCE_DIR@/src" \ - "@CMAKE_SOURCE_DIR@/doc" - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.cpp \ - *.cc \ - *.c \ - *.h \ - *.hh \ - *.hpp \ - *.dox - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# 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 -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = */.git/* \ - */.svn/* \ - */cmake/* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = "@CMAKE_SOURCE_DIR@/example" - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = *.c \ - *.h \ - INSTALL \ - DEPENDENCIES \ - CHANGELOG \ - LICENSE \ - LGPL - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# <filter> <input-file> -# -# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 2 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use <access key> + S -# (what the <access key> is depends on the OS and browser, but it is typically -# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down -# key> to jump into the search results window, the results can be navigated -# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel -# the search. The filter options can be selected when the cursor is inside the -# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> -# to select a filter and <Enter> or <escape> to activate or cancel the filter -# option. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There -# are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and -# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing -# and searching needs to be provided by external tools. See the section -# "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain the -# search results. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). -# -# See the section "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will return the search results when EXTERNAL_SEARCH is enabled. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and -# Searching" for details. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. -# The default file is: searchdata.xml. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of -# to a relative location where the documentation can be found. The format is: -# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# Configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. -# The default value is: YES. - -GENERATE_LATEX = @DOXYFILE_LATEX@ - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. -# -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_CMD_NAME = @LATEX_COMPILER@ - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate -# index for LaTeX. -# The default file is: makeindex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -MAKEINDEX_CMD_NAME = @MAKEINDEX_COMPILER@ - -# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used by the -# printer. -# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x -# 14 inches) and executive (7.25 x 10.5 inches). -# The default value is: a4. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. The package can be specified just -# by its name or with the correct syntax as to be used with the LaTeX -# \usepackage command. To get the times font for instance you can specify : -# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} -# To use the option intlimits with the amsmath package you can specify: -# EXTRA_PACKAGES=[intlimits]{amsmath} -# If left blank no extra packages will be included. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. -# -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See -# LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_FOOTER = - -# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# LaTeX style sheets that are included after the standard style sheets created -# by doxygen. Using this option one can overrule certain style aspects. Doxygen -# will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_STYLESHEET = - -# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the LATEX_OUTPUT output -# directory. Note that the files will be copied as-is; there are no commands or -# markers available. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_FILES = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is -# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will -# contain links (just like the HTML output) instead of page references. This -# makes the output suitable for online browsing using a PDF viewer. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BATCHMODE = YES - -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the -# index chapters (such as File Index, Compound Index, etc.) in the output. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HIDE_INDICES = NO - -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. -# The default value is: plain. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BIB_STYLE = plain - -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The -# RTF output is optimized for Word 97 and may not look too pretty with other RTF -# readers/editors. -# The default value is: NO. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: rtf. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will -# contain hyperlink fields. The RTF file will contain links (just like the HTML -# output) instead of page references. This makes the output suitable for online -# browsing using Word or some other Word compatible readers that support those -# fields. -# -# Note: WordPad (write) and others do not support links. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. -# -# See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_EXTENSIONS_FILE = - -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for -# classes and files. -# The default value is: NO. - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. A directory man3 will be created inside the directory specified by -# MAN_OUTPUT. -# The default directory is: man. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to the generated -# man pages. In case the manual section does not start with a number, the number -# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is -# optional. -# The default value is: .3. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_EXTENSION = .3 - -# The MAN_SUBDIR tag determines the name of the directory created within -# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by -# MAN_EXTENSION with the initial . removed. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_SUBDIR = - -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it -# will generate one additional man file for each entity documented in the real -# man page(s). These additional files only source the real man page, but without -# them the man command would be unable to find the correct page. -# The default value is: NO. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that -# captures the structure of the code including all documentation. -# The default value is: NO. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: xml. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_OUTPUT = xml - -# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program -# listings (including syntax highlighting and cross-referencing information) to -# the XML output. Note that enabling this will significantly increase the size -# of the XML output. -# The default value is: YES. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- - -# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files -# that can be used to generate PDF. -# The default value is: NO. - -GENERATE_DOCBOOK = NO - -# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in -# front of it. -# The default directory is: docbook. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_OUTPUT = docbook - -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - -#--------------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module -# file that captures the structure of the code including all documentation. -# -# Note that this feature is still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary -# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI -# output from the Perl module output. -# The default value is: NO. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely -# formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO, the -# size of the Perl module output will be much smaller and Perl will parse it -# just the same. -# The default value is: YES. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file are -# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful -# so different doxyrules.make files included by the same Makefile don't -# overwrite each other's variables. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all -# C-preprocessor directives found in the sources and include files. -# The default value is: YES. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names -# in the source code. If set to NO, only conditional compilation will be -# performed. Macro expansion can be done in a controlled way by setting -# EXPAND_ONLY_PREDEF to YES. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then -# the macro expansion is limited to the macros specified with the PREDEFINED and -# EXPAND_AS_DEFINED tags. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES, the include files in the -# INCLUDE_PATH will be searched if a #include is found. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by the -# preprocessor. -# This tag requires that the tag SEARCH_INCLUDES is set to YES. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will be -# used. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that are -# defined before the preprocessor is started (similar to the -D option of e.g. -# gcc). The argument of the tag is a list of macros of the form: name or -# name=definition (no spaces). If the definition and the "=" are omitted, "=1" -# is assumed. To prevent a macro definition from being undefined via #undef or -# recursively expanded use the := operator instead of the = operator. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -PREDEFINED = DOXYGEN \ - PRINTF_ATTRIBUTE(x,y)= - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this -# tag can be used to specify a list of macro names that should be expanded. The -# macro definition that is found in the sources will be used. Use the PREDEFINED -# tag if you want to use a different macro definition that overrules the -# definition found in the source code. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all references to function-like macros that are alone on a line, have -# an all uppercase name, and do not end with a semicolon. Such function macros -# are typically used for boiler-plate code, and will confuse the parser if not -# removed. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tag files. For each tag -# file the location of the external documentation should be added. The format of -# a tag file without this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where loc1 and loc2 can be relative or absolute paths or URLs. See the -# section "Linking to external documentation" for more information about the use -# of tag files. -# Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is -# run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a -# tag file that is based on the input files it reads. See section "Linking to -# external documentation" for more information about the usage of tag files. - -GENERATE_TAGFILE = "@CMAKE_CURRENT_BINARY_DIR@/html/@PROJECT_NAME@.TAGFILE" - -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. -# The default value is: NO. - -ALLEXTERNALS = YES - -# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be -# listed. -# The default value is: YES. - -EXTERNAL_GROUPS = YES - -# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in -# the related pages index. If set to NO, only the current project's pages will -# be listed. -# The default value is: YES. - -EXTERNAL_PAGES = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = NO - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - -# If set to YES the inheritance and collaboration graphs will hide inheritance -# and usage relations if the target is undocumented or is not a class. -# The default value is: YES. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent -# Bell Labs. The other options in this section have no effect if this option is -# set to NO -# The default value is: NO. - -HAVE_DOT = @DOXYGEN_DOT_FOUND@ - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of -# processors available in the system. You can set it explicitly to a value -# larger than 0 to get control over the balance between CPU load and processing -# speed. -# Minimum value: 0, maximum value: 32, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NUM_THREADS = 0 - -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTPATH = - -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a -# graph for each documented class showing the direct and indirect implementation -# dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside the -# class node. If there are many fields or methods and many nodes the graph may -# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the -# number of items for each type to make the size more manageable. Set this to 0 -# for no limit. Note that the threshold may be exceeded by 50% before the limit -# is enforced. So when you set the threshold to 10, up to 15 fields may appear, -# but if the number exceeds 15, the total amount of fields shown is limited to -# 10. -# Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LIMIT_NUM_FIELDS = 10 - -# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and -# collaboration graphs will show the relations between templates and their -# instances. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -TEMPLATE_RELATIONS = YES - -# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the -# direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDE_GRAPH = NO - -# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing -# the direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. Disabling a call graph can be -# accomplished by means of the command \hidecallgraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. Disabling a caller graph can be -# accomplished by means of the command \hidecallergraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical -# hierarchy of all classes instead of a textual one. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the -# dependencies a directory has on other directories in a graphical way. The -# dependency relations are determined by the #include relations between the -# files in the directories. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. For an explanation of the image formats see the section -# output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). -# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order -# to make the SVG files visible in IE 9+ (other browsers do not have this -# requirement). -# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, -# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and -# png:gdiplus:gdiplus. -# The default value is: png. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# -# Note that this requires a modern browser other than Internet Explorer. Tested -# and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -INTERACTIVE_SVG = NO - -# The DOT_PATH tag can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_PATH = @DOXYGEN_DOT_EXECUTABLE_PATH@ - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the \dotfile -# command). -# This tag requires that the tag HAVE_DOT is set to YES. - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). - -MSCFILE_DIRS = - -# The DIAFILE_DIRS tag can be used to specify one or more directories that -# contain dia files that are included in the documentation (see the \diafile -# command). - -DIAFILE_DIRS = - -# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. - -PLANTUML_JAR_PATH = - -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. - -PLANTUML_INCLUDE_PATH = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes -# that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct -# children of the root node in a graph is already larger than -# 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. -# Minimum value: 0, maximum value: 10000, default value: 50. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_GRAPH_MAX_NODES = 50 - -# 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 from the -# root by following a path via at most 3 edges will be shown. Nodes that lay -# further from the root node will be omitted. Note that setting this option to 1 -# or 2 may greatly reduce the computation time needed for large code bases. Also -# note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -# Minimum value: 0, maximum value: 1000, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) support -# this, this feature is disabled by default. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page -# explaining the meaning of the various boxes and arrows in the dot generated -# graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot -# files that are used to generate the various graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_CLEANUP = YES diff --git a/doc/that_style/LICENSE b/doc/that_style/LICENSE new file mode 100644 index 0000000..eac42e7 --- /dev/null +++ b/doc/that_style/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Jan-Lukas Wynen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/doc/that_style/README.md b/doc/that_style/README.md new file mode 100644 index 0000000..7572720 --- /dev/null +++ b/doc/that_style/README.md @@ -0,0 +1,22 @@ +# that style +A plain, more modern HTML style for Doxygen + +## Requirements +- Doxygen (tested with version 1.8.13) +- *optional*: a sass/scss compiler if you want to modify the style + +## Simple usage +Tell Doxygen about the files for that style as shown in [doxyfile.conf](doxyfile.conf). You might need to adjust the +paths depending on where you installed that style. +When you run Doxygen, all files are copied into to generated HTML folder. So you don't need to keep the originals around +unless you want to re-generate the documentation. + +## Advanced +that style uses a custom javascript to hack some nice stripes into some tables. It has to be loaded from HTML. Hence you need +to use the provided custom header. Since its default content may change when Doxygen is updated, there might be syntax error in +the generated HTML. If this is the case, you can remove the custom header (adjust your doxyfile.conf). This has no +disadvantages other than removing the stripes. + +[that_style.css](that_style.css) was generated from the scss files in the folder [sass](sass). If you want to change the style, +use those files in order to have better control. For instance, you can easily change most colors by modifying the variables +in the beginning of [that_style.scss](sass/that_style.scss). diff --git a/doc/that_style/header.html b/doc/that_style/header.html new file mode 100644 index 0000000..3da4639 --- /dev/null +++ b/doc/that_style/header.html @@ -0,0 +1,56 @@ +<!-- HTML header for doxygen 1.8.13--> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen $doxygenversion"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> +<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> +<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="$relpath^jquery.js"></script> +<script type="text/javascript" src="$relpath^dynsections.js"></script> +$treeview +$search +$mathjax +<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> +<script src="$relpath^striped_bg.js"></script> +$extrastylesheet +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> + +<!--BEGIN TITLEAREA--> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <!--BEGIN PROJECT_LOGO--> + <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td> + <!--END PROJECT_LOGO--> + <!--BEGIN PROJECT_NAME--> + <td id="projectalign" style="padding-left: 0.5em;"> + <div id="projectname">$projectname + <!--BEGIN PROJECT_NUMBER--> <span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER--> + </div> + <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF--> + </td> + <!--END PROJECT_NAME--> + <!--BEGIN !PROJECT_NAME--> + <!--BEGIN PROJECT_BRIEF--> + <td style="padding-left: 0.5em;"> + <div id="projectbrief">$projectbrief</div> + </td> + <!--END PROJECT_BRIEF--> + <!--END !PROJECT_NAME--> + <!--BEGIN DISABLE_INDEX--> + <!--BEGIN SEARCHENGINE--> + <td>$searchbox</td> + <!--END SEARCHENGINE--> + <!--END DISABLE_INDEX--> + </tr> + </tbody> +</table> +</div> +<!--END TITLEAREA--> +<!-- end header part --> diff --git a/doc/that_style/img/doc.svg b/doc/that_style/img/doc.svg new file mode 100644 index 0000000..68e1ba0 --- /dev/null +++ b/doc/that_style/img/doc.svg @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="22" + viewBox="0 0 6.3499999 5.8208335" + version="1.1" + id="svg8" + sodipodi:docname="doc.svg" + inkscape:version="0.92.1 r"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="11.139212" + inkscape:cy="14.811193" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:showpageshadow="false" + units="px" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-291.17915)"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#4d4d4d;stroke-width:0.26458329;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 3.315043,291.8406 H 1.4552083 v 4.49792 h 3.1749999 v -3.10055 z" + id="path5095" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 3.1837239,291.84114 v 1.71186 h 1.4472656 v -0.31418 H 3.4473958 v -1.39768 z" + id="path5128" + inkscape:connector-curvature="0" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect5132" + width="2.1166668" + height="0.26458332" + x="1.8520833" + y="293.82498" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect5136" + width="1.0583334" + height="0.26458332" + x="1.8520832" + y="294.35416" /> + <rect + y="294.88333" + x="1.8520832" + height="0.26458332" + width="1.8520833" + id="rect5138" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4543" + width="1.5875" + height="0.26458332" + x="1.8520832" + y="295.41248" /> + </g> +</svg> diff --git a/doc/that_style/img/folderclosed.svg b/doc/that_style/img/folderclosed.svg new file mode 100644 index 0000000..e53ec90 --- /dev/null +++ b/doc/that_style/img/folderclosed.svg @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="22" + viewBox="0 0 6.3499998 5.8208335" + version="1.1" + id="svg8" + inkscape:version="0.92.1 r" + sodipodi:docname="folderclosed.svg" + inkscape:export-filename="/home/jl/Prog/doxygen_style/folderclosed.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="51.113139" + inkscape:cx="7.7057751" + inkscape:cy="12.584171" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:snap-global="false" + units="px" + inkscape:showpageshadow="false" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:measure-start="0,0" + inkscape:measure-end="0,0" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-291.17915)"> + <path + inkscape:connector-curvature="0" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 0.52916667,292.2374 -0.26458334,0.52925 v 3.43958 H 4.7625001 v -3.43958 H 2.38125 L 2.1166667,292.2374 Z" + id="rect4498" + sodipodi:nodetypes="cccccccc" /> + <path + inkscape:connector-curvature="0" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.66145831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 2.9104167,292.76665 2.38125,293.56034 H 0.26458333 v 0.26464 H 2.38125 l 0.5291667,-0.79375 h 1.8520834 v -0.26458 z" + id="rect4500" + sodipodi:nodetypes="ccccccccc" /> + </g> +</svg> diff --git a/doc/that_style/img/folderopen.svg b/doc/that_style/img/folderopen.svg new file mode 100644 index 0000000..1ab7b78 --- /dev/null +++ b/doc/that_style/img/folderopen.svg @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="22" + viewBox="0 0 6.3499998 5.8208335" + version="1.1" + id="svg8" + inkscape:version="0.92.1 r" + sodipodi:docname="folderopen.svg" + inkscape:export-filename="/home/jl/Prog/doxygen_style/folderopen.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="43.725861" + inkscape:cx="8.2043861" + inkscape:cy="13.464183" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:snap-global="false" + units="px" + inkscape:showpageshadow="false" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:measure-start="0,0" + inkscape:measure-end="0,0" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-291.17915)"> + <path + inkscape:connector-curvature="0" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.66145831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 0.52916667,292.23748 -0.26458334,0.52917 v 3.43958 H 4.762461 l 7.8e-5,-3.43958 H 2.38125 l -0.2645833,-0.52917 z" + id="path5228" + sodipodi:nodetypes="cccccccc" /> + <path + inkscape:connector-curvature="0" + id="path5279" + d="M 1.0583333,293.5604 H 5.55625 L 4.7625,296.20603 H 0.26458333 Z" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.66145831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + sodipodi:nodetypes="ccccc" /> + <path + sodipodi:nodetypes="ccccccc" + inkscape:connector-curvature="0" + id="path5234" + d="M 1.0583333,294.35415 H 3.175 l 0.5291667,-0.52917 H 5.55625 L 4.7625,296.20603 H 0.26458333 Z" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.66145831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + </g> +</svg> diff --git a/doc/that_style/img/mag_glass.svg b/doc/that_style/img/mag_glass.svg new file mode 100644 index 0000000..e21a004 --- /dev/null +++ b/doc/that_style/img/mag_glass.svg @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="22" + height="22" + viewBox="0 0 5.8208332 5.8208335" + version="1.1" + id="svg8" + inkscape:version="0.92.1 r" + sodipodi:docname="mag_glass.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="8.961936" + inkscape:cy="10.205344" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:showpageshadow="false" + inkscape:snap-bbox="false" + inkscape:bbox-nodes="true" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:snap-global="false" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-291.17915)"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 6.9101562 2.4082031 C 3.1105656 2.4082031 -5.9211895e-16 5.5081643 0 9.3027344 C 0 13.097342 3.1105656 16.197266 6.9101562 16.197266 C 8.2869348 16.197266 9.5698699 15.787508 10.650391 15.087891 L 15.162109 19.587891 L 16.636719 18.115234 L 12.214844 13.707031 C 13.214837 12.510659 13.818359 10.974238 13.818359 9.3027344 C 13.818359 5.5081643 10.709747 2.4082031 6.9101562 2.4082031 z M 6.9101562 4.9101562 C 9.3624717 4.9101562 11.324219 6.8631249 11.324219 9.3027344 C 11.324219 11.742382 9.3624717 13.695312 6.9101562 13.695312 C 4.4578408 13.695312 2.5019531 11.742382 2.5019531 9.3027344 C 2.5019531 6.8631249 4.4578408 4.9101562 6.9101562 4.9101562 z " + transform="matrix(0.26458333,0,0,0.26458333,0,291.17915)" + id="rect4524" /> + <path + transform="matrix(0.99422295,0,0,0.68955299,-0.83134947,91.755588)" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.63466448;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + inkscape:transform-center-y="0.25905895" + d="m 5.6074138,294.49889 -1.0836583,-1.87695 2.1673165,0 z" + id="path4491" /> + </g> +</svg> diff --git a/doc/that_style/img/nav_edge_inter.svg b/doc/that_style/img/nav_edge_inter.svg new file mode 100644 index 0000000..f04f10f --- /dev/null +++ b/doc/that_style/img/nav_edge_inter.svg @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="10.53333" + height="32" + viewBox="0 0 9.8749964 30" + id="svg2" + version="1.1" + inkscape:version="0.92.1 r" + sodipodi:docname="nav_edge_inter.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="8.6823304" + inkscape:cy="16.225639" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="false" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:object-nodes="true" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1022.3622)"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 0,1022.3622 v 15 15 l 8,-15 z" + id="path4143" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1.2910156,1022.3496 -0.82421872,0.4473 7.87890622,14.5527 -7.87890622,14.5527 0.82421872,0.4473 8.1210938,-15 z" + id="path5240" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/doc/that_style/img/nav_edge_left.svg b/doc/that_style/img/nav_edge_left.svg new file mode 100644 index 0000000..ca1adf4 --- /dev/null +++ b/doc/that_style/img/nav_edge_left.svg @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="8.5333338" + height="32" + viewBox="0 0 8.0000001 30" + id="svg2" + version="1.1" + inkscape:version="0.92.1 r" + sodipodi:docname="nav_edge_left.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="5.3721385" + inkscape:cy="14.16429" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="false" + inkscape:bbox-nodes="false" + inkscape:snap-bbox-edge-midpoints="false" + inkscape:object-nodes="true" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1022.3622)"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 0 0 L 0 32 L 8.5332031 16 L 0 0 z " + transform="matrix(0.93749998,0,0,0.93749998,0,1022.3622)" + id="rect4586" /> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 0,1022.3622 v 15 15 l 8,-15 z" + id="path4143" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/doc/that_style/img/nav_edge_right.svg b/doc/that_style/img/nav_edge_right.svg new file mode 100644 index 0000000..bb33815 --- /dev/null +++ b/doc/that_style/img/nav_edge_right.svg @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="8" + height="30" + viewBox="0 0 8.0000001 30" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="nav_edge.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="5.3721385" + inkscape:cy="14.16429" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="false" + inkscape:bbox-nodes="false" + inkscape:snap-bbox-edge-midpoints="false" + inkscape:object-nodes="true" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1022.3622)"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 0,1022.3622 0,15 0,15 8,-15 -8,-15 z" + id="path4143" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1e-8,1022.3622 7.99999999,15 0,-15 -8,0 z m 7.99999999,15 -8,15 8,0 0,-15 z" + id="rect4136" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/doc/that_style/img/splitbar_handle.svg b/doc/that_style/img/splitbar_handle.svg new file mode 100644 index 0000000..e0dc90d --- /dev/null +++ b/doc/that_style/img/splitbar_handle.svg @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="6" + height="9" + viewBox="0 0 1.5875 2.3812501" + version="1.1" + id="svg8" + inkscape:version="0.92.1 r" + sodipodi:docname="splitbar_handle.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="32" + inkscape:cx="8.7681488" + inkscape:cy="-2.7929517" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:showpageshadow="false" + showguides="false" + inkscape:window-width="2560" + inkscape:window-height="1357" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1"> + <inkscape:grid + type="xygrid" + id="grid4487" /> + </sodipodi:namedview> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-294.61873)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4485" + width="0.26458335" + height="0.26458332" + x="0.26458332" + y="294.8833" /> + <rect + y="294.8833" + x="1.0583333" + height="0.26458332" + width="0.26458335" + id="rect4489" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + y="295.41248" + x="0.26458329" + height="0.26458332" + width="0.26458335" + id="rect4491" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4493" + width="0.26458335" + height="0.26458332" + x="1.0583333" + y="295.41248" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4495" + width="0.26458335" + height="0.26458332" + x="0.26458332" + y="295.94165" /> + <rect + y="295.94165" + x="1.0583333" + height="0.26458332" + width="0.26458335" + id="rect4497" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + y="296.47079" + x="0.26458329" + height="0.26458332" + width="0.26458335" + id="rect4499" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4501" + width="0.26458335" + height="0.26458332" + x="1.0583333" + y="296.47079" /> + </g> +</svg> diff --git a/doc/that_style/img/sync_off.png b/doc/that_style/img/sync_off.png Binary files differnew file mode 100644 index 0000000..9d286d9 --- /dev/null +++ b/doc/that_style/img/sync_off.png diff --git a/doc/that_style/img/sync_on.png b/doc/that_style/img/sync_on.png Binary files differnew file mode 100644 index 0000000..b8434e8 --- /dev/null +++ b/doc/that_style/img/sync_on.png diff --git a/doc/that_style/js/striped_bg.js b/doc/that_style/js/striped_bg.js new file mode 100644 index 0000000..97ae0a8 --- /dev/null +++ b/doc/that_style/js/striped_bg.js @@ -0,0 +1,32 @@ +// Adds extra CSS classes "even" and "odd" to .memberdecls to allow +// striped backgrounds. +function MemberDeclsStriper () { + var counter = 0; + + this.stripe = function() { + $(".memberdecls tbody").children().each(function(i) { + + // reset counter at every heading -> always start with even + if ($(this).is(".heading")) { + counter = 0; + } + + // add extra classes + if (counter % 2 == 1) { + $(this).addClass("odd"); + } + else { + $(this).addClass("even"); + } + + // advance counter at every separator + // this is the only way to reliably detect which table rows belong together + if ($(this).is('[class^="separator"]')) { + counter++; + } + }); + } +} + +// execute the function +$(document).ready(new MemberDeclsStriper().stripe); diff --git a/doc/that_style/sass/_fragment_base.scss b/doc/that_style/sass/_fragment_base.scss new file mode 100644 index 0000000..b46e46e --- /dev/null +++ b/doc/that_style/sass/_fragment_base.scss @@ -0,0 +1,69 @@ +/* + Basic styling for fragments shared by all themes. +*/ + +div.fragment { + padding: 0; + margin: 4px 8px 4px 2px; + color: #bebebe; + background-color: #323232; + border: 3px solid #e8e8e8; + border-radius: 2px; + overflow-y: hidden; + overflow-x: auto; + position: relative; + +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-indent: -53px; + margin: 0px; + padding: 1px 0 1px 53px; + white-space: pre; + + @include transition-property(background-color); + @include transition-duration(0s); + + &:hover { + background-color: #1a1a1a; + } + + &::after { + // insert linefeed + content:"\000A"; + white-space: pre; + } +} + +span.lineno { + padding-right: 4px; + text-align: right; + color: black; + height: 100px; + white-space: pre; + border-right: 3px solid #1d7567; + background-color: #a0a0a0; +} + +span.lineno a, span.lineno a:visited { + background-color: inherit; + color: #1e595a; +} + +span.lineno a:hover { + background-color: #C8C8C8; + text-decoration: none; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} diff --git a/doc/that_style/sass/_fragment_color.scss b/doc/that_style/sass/_fragment_color.scss new file mode 100644 index 0000000..8b7977a --- /dev/null +++ b/doc/that_style/sass/_fragment_color.scss @@ -0,0 +1,80 @@ +// colours of code view + +div.fragment { + color: #bebebe; + background-color: #323232; +} + +div.fragment::before { + background-color: #1a1a1a; + border-right: 1px solid #3e3e3e; +} + +div.line:hover { + background-color: #1a1a1a; +} + +span.lineno { + color: #969696; + background-color: #1a1a1a; + border-right: 1px solid #3e3e3e; +} + +span.lineno a, span.lineno a:visited { + background-color: inherit; + color: #dcdcdc; +} + +span.lineno a:hover { + background-color: #323232; +} + + +// syntax highlighting + +a.code, a.code:visited { + color: #6cc7eb; +} + +a.codeRef, a.codeRef:visited { + color: #3d95e6; +} + +span.keyword { + color: #98f77a; + font-weight: bold; +} + +span.keywordtype { + color: #ffa0a0; +} + +span.keywordflow { + color: #98f77a; + font-weight: bold; +} + +span.comment { + // color: #dadbb1; + color: #999; + font-style: oblique; +} + +span.preprocessor { + color: #cd5c57; +} + +span.stringliteral { + color: #64b041; +} + +span.charliteral { + color: #64b041; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} diff --git a/doc/that_style/sass/_menu_bar.scss b/doc/that_style/sass/_menu_bar.scss new file mode 100644 index 0000000..d6aa1c3 --- /dev/null +++ b/doc/that_style/sass/_menu_bar.scss @@ -0,0 +1,70 @@ +/* + * The main menu at the top + */ + +#main-menu { + background-image: none; + background: $background-color-dark; + padding: 0; +} + +.sm-dox { + // :not(:last-child) -> do not style search box + &> li:not(:last-child) > a { + background-image: none; + text-shadow: none; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; + text-transform: uppercase; + } + + &> li:not(:last-child) > a:hover, + &> li:not(:last-child) > a.highlighted { + background-color: $primary-color; + } + + a span.sub-arrow { + // this sets the color of the arrow + border-color: white transparent transparent; + } + + ul { + // sub menus + border: none; + @include border-radius(0 !important); + padding: 0; + background: $background-color-dark; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); + + a { + background: inherit; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; + } + + a:hover { + background: $primary-color; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; + } + + a.highlighted { + background: $primary-color; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; + } + + a span.sub-arrow { + /* this sets the color of the arrow */ + border-color: white transparent transparent; + } + } +} diff --git a/doc/that_style/sass/_mixins.scss b/doc/that_style/sass/_mixins.scss new file mode 100644 index 0000000..aa030de --- /dev/null +++ b/doc/that_style/sass/_mixins.scss @@ -0,0 +1,33 @@ +@mixin box-shadow($args...) { + -moz-box-shadow: $args; + -webkit-box-shadow: $args; + -o-box-shadow: $args; + box-shadow: $args; +} + +@mixin border-radius($args...) { + -moz-border-radius: $args; + -webkit-border-radius: $args; + border-radius: $args; +} + +@mixin transition($args...) { + -webkit-transition: $args; + -moz-transition: $args; + -o-transition: $args; + transition: $args; +} + +@mixin transition-property($arg) { + -webkit-transition: $arg; + -moz-transition: $arg; + -o-transition: $arg; + transition: $arg; +} + +@mixin transition-duration($arg) { + -webkit-duration: $arg; + -moz-duration: $arg; + -o-duration: $arg; + duration: $arg; +} diff --git a/doc/that_style/sass/_nav_tree.scss b/doc/that_style/sass/_nav_tree.scss new file mode 100644 index 0000000..0b265c6 --- /dev/null +++ b/doc/that_style/sass/_nav_tree.scss @@ -0,0 +1,72 @@ +/* + * The tree view on the left + */ + +.arrow { + color:black; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; + margin-left: 4px; + + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + &:hover { + color: black; + } +} + +#selected .arrow { + color: white; + + &:hover { + color: #d2d2d2; + } +} + +#nav-tree { + background-image: none; + background-color: white; + + .item { + margin: 0; + + &:hover { + background-color: #d2d2d2; + } + } + + .selected { + background-image: none; + background-color: $primary-color; + color: white; + text-shadow: none; + + &:hover { + background-image: none; + background-color: $primary-color; + color: white; + text-shadow: none; + } + } + + a { + color: black; + } +} + +.ui-resizable-e { + background: #808080 url("splitbar_handle.svg") no-repeat center; + border-right: solid 1px #c0c0c0; + border-left: solid 1px black; + + &:hover { + background-color: #606060; + } +} diff --git a/doc/that_style/sass/_navpath.scss b/doc/that_style/sass/_navpath.scss new file mode 100644 index 0000000..a266dca --- /dev/null +++ b/doc/that_style/sass/_navpath.scss @@ -0,0 +1,121 @@ +/* + * The line at the bottom + */ + +.navpath { + ul { + font-size: 11px; + background-image: none; + height: 30px; + line-height: 30px; + color: black; + border: none; + border-top: 1px solid #808080; + overflow: hidden; + margin: 0px; + padding: 0px; + } + + /* intermediate navelems */ + li:not(:first-child) { + list-style-type: none; + float: left; + padding-left: 18px; + padding-right: 10px; + color: black; + background-color: white; + background-image: url('nav_edge_inter.svg'); + background-repeat: no-repeat; + background-position: left -1px; + background-size: auto 100%; + } + + /* first navelem */ + li:first-child { + list-style-type: none; + float: left; + padding-left: 15px; + padding-right: 10px; + color: black; + background-color: white; + background-image: none; + } + + /* last navelem */ + li:nth-last-child(2) { + list-style-type: none; + float: left; + padding-left:10px; + padding-right:15px; + color: white; + background-color: $primary-color; + background-image: url('nav_edge_right.svg'); + background-repeat: no-repeat; + background-position: right -1px; + background-size: auto 100%; + + } + + li:nth-last-child(2):not(:first-child) { + list-style-type: none; + float: left; + padding-left:15px; + padding-right:15px; + color: white; + background-color: $primary-color; + background-image: url('nav_edge_left.svg'), url('nav_edge_right.svg'); + background-repeat: no-repeat; + background-position: -1px -1px, right -1px; + background-size: auto 100%; + } + + li.navelem a, .navpath li.navelem b { + height:32px; + display:block; + text-decoration: none; + outline: none; + color: inherit; + font-family: Roboto,sans-serif; + text-shadow: none; + text-decoration: none; + font-weight: normal; + } + + li.navelem a:hover { + color: inherit; + text-decoration: underline; + } + + // the "doxygen" logo at the right + li.footer { + list-style-type: none; + float: right; + padding-left: 0; + padding-right: 10px; + background-color: #d5d5d5; + background-image: none; + color: black; + font-size: 8pt; + + // show the edge image + &:before { + content: ""; + width: 13px; + height: 30px; + display: inline-block; + float: left; + background-image: url("nav_edge_right.svg"); + background-repeat: no-repeat; + background-position: right 0; + background-size: auto 100%; + + /* flip the element horizontally */ + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + -webkit-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: "FlipH"; + } + } +} diff --git a/doc/that_style/sass/_search.scss b/doc/that_style/sass/_search.scss new file mode 100644 index 0000000..abd83bc --- /dev/null +++ b/doc/that_style/sass/_search.scss @@ -0,0 +1,89 @@ +/* + * The search box + */ + +.sm-dox > li:last-child { + margin-right: 10pt; +} + +#MSearchBox { + border: 2px inset black; + display: table; + width: 350px; + height: 26px; + background: white; + margin-top: 5px; + + .left { + background-image: none; + display: table-cell; + width: 100%; + height: inherit; + left: 0; + } + + // don't need this element + .right { + background-image: none; + width: 0; + display: none; + visibility: hidden; + } +} + +// override for when there is no main menu +nav > #MSearchBox { + border: 2px solid #666666; + margin: 5px 10pt 0 0; + height: 22px; +} + +#MSearchSelect, .left #MSearchSelect { + left: 0; + background-image: url("mag_glass.svg"); + width: 22px; + height: 22px; + padding: 22px 22px 0 0 ; + margin: 0 4px 0 4px; + box-sizing: border-box; +} + +#MSearchField { + background-image: none; + display: table-cell; + margin: 0; + // leave room for #MSearchSelect and a bit more for the border + margin-left: 30px; + width: calc(100% - 34px); + height: 22px; + font: 11pt sans-serif; +} + +#MSearchSelectWindow { + background-color: $background-color-dark; + padding: 0; + border: solid 1px black; + @include border-radius(0); + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} + +a.SelectItem { + color: white; + padding: 3px 4px; + font: 10pt sans-serif; + letter-spacing: 1px; + + &:hover { + background-color: $primary-color; + color: white; + } + + &:focus, &:active { + color: white; + } +} + +#MSearchResultsWindow { + background-color: white; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} diff --git a/doc/that_style/sass/that_style.scss b/doc/that_style/sass/that_style.scss new file mode 100644 index 0000000..f1ebf92 --- /dev/null +++ b/doc/that_style/sass/that_style.scss @@ -0,0 +1,1240 @@ +/* + * My own little style + */ + +@import "mixins"; + +// colors +$primary-color: #5f082b; +$primary-color-dark: #2c0414; +$primary-color-light: #820a32; +$secondary-color: #00549f; +$secondary-color-dark: #002546; +$background-color: #ffffff; +$background-color-dark: #414141; + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #555555; + color: black; + font-size: 200%; + font-weight: bold; + margin-top: 1.75em; + padding-top: 1em; + padding-bottom: 4px; + width: 100%; +} + +tr.heading h2 { + border-bottom: 1px solid #a5a5a5; + font-size: 150%; + margin-top: 6px; + margin-bottom: 6px; + padding-top: 3px; + padding-bottom: 7px; +} + +h2.groupheader a { + margin-left: 1%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + @include transition(none); + margin-right: 15px; + + &.glow { + text-shadow: none; + color: $primary-color; + } +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +#top { + border: none; + position: relative; + z-index: 100; + @include box-shadow(0 0 4px rgba(0,0,0,0.4), 0 0 8px rgba(0,0,0,0.3)); +} + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab { + background-color: $background-color; + border: none; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +a, a:visited { + color: $secondary-color; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; + text-transform: uppercase; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el, a.el:visited { + font-weight: normal; + color: $secondary-color; +} + +a.elRef, a.elRef:visited { + font-family: monospace; + color: #006bc8; +} + +@import "menu_bar"; + +dl.el { + margin-left: -1cm; +} + +div.ah, span.ah { + background: none; + color: black; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + + border: none; + @include border-radius(0); + @include box-shadow(none); + + font: 14pt monospace; + font-weight: bold; + text-transform: uppercase; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: $background-color; + color: black; + margin: 0; +} + +#doc-content { + background-color: #111; + color: $background-color; +} + +// this is for individual member pages +div.contents { + color: black; + background-color: $background-color; + padding: 0; + margin: 5pt; + + // the line after the member documentations + hr { + display: none; + visibility: hidden; + } +} + +// override for 'normal' mode +div.header + div.contents { + padding: 1ex; + margin: 0 5pt 5pt 5pt; +} + +div.textblock { + padding: 1ex 1ex 0 1ex; +} + +div.textblock + ul { + padding-bottom: 1%; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +@import "fragment_base"; +@import "fragment_color"; + +@import "search"; + +table.memberdecls { + width: 100%; + border-spacing: 0px; + padding: 0px; + margin-top: 7px; + background-color: $background-color; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} + +.memberdecls tbody { + background-color: $background-color; +} + +.memberdecls .odd { + background: #f6f6f6; +} + +/* all but last separator show a line */ +.memberdecls tr[class^="separator"]:not(:last-child) .memSeparator { + border-bottom: 1px solid #c5c5c5; + line-height: 1px; + margin: 0; + padding: 0; +} + +.memberdecls tr[class^="separator"]:last-child .memSeparator { + border-bottom: none; + line-height: 0; + margin: 0; + padding: 0; +} + +table.fieldtable { + @include border-radius(0); + @include box-shadow(none); +} + +.memberdecls td, .fieldtable tr { + background-color: inherit; +} + +.fieldtable th { + display: none; + height: 0; + visibility: hidden; +} + +td.fieldname { + color: $primary-color-light; + font-family: monospace; + font-weight: bold; +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, +th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: $background-color-dark; + color: white; +} + +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + font-family: monospace; + background-color: $background-color; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + background-color: $background-color; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border: none; + margin-bottom: -1px; + background-image: none; + background-color: #f6f6f6; + line-height: 1.25; + font-weight: bold; + color: black; + float: left; + z-index: 0; + position: relative; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} + +.permalink { + font-size: 100%; + display: inline-block; + vertical-align: middle; +} + +/* replace content of permalinks */ +.permalink a { + visibility: hidden; +} +.permalink a:after { + content: "§"; + visibility: visible; + display: block; + position: absolute; + color: black; + top: 20%; +} + +.permalink a:visited { + color: black; +} + +.memtemplate { + font-size: 100%; + color: black; + font-family: monospace; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + font-family: monospace; + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; + display: table !important; + width: 100%; + background-color: #f6f6f6; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} + +.memitem.glow { + @include box-shadow(none); +} + +.memname { + font-family: monospace; + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border: none; + padding: 6px 0px 6px 0px; + color: black; + font-weight: bold; + text-shadow: none; + background-color: #f6f6f6; + position: relative; + z-index: 1; + @include box-shadow(none); +} + + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border: none; + border-left: 4px solid $primary-color; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + -webkit-border-bottom-left-radius: 0px; + -webkit-border-bottom-right-radius: 0px; + -moz-border-bottom-left-radius: 0px; + -moz-border-bottom-right-radius: 0px; + padding: 2px 1% 2px 1%; + margin: 1%; + background-color: $background-color; + background-image: none; + @include box-shadow(none); + + /* allow movement of elements inside */ + display: flex; + flex-direction: column; +} + +/* overrides for docs on individual pages */ + +.memtitle:nth-child(2) { + width: 0; + height: 0; + display: none; + visibility: hidden; +} + +.memitem:nth-child(3) { + margin: 0; + margin-top: 0.5%; + background-color: $background-color; + @include box-shadow(none); +} + +.memitem:nth-child(3) .memproto { + padding: 10px; + background-color: $background-color; + margin-bottom: 10px; +} + +.memitem:nth-child(3) .memproto::after { + content: ""; + width: 99%; + height: 1px; + position: absolute; + bottom: -10px; + left: 0.5%; + background: #666; +} + +.memitem:nth-child(3) .memdoc { + border: none; + padding: 0; +} + +.memitem:nth-child(3) table.memname { + background-color: #f6f6f6; + border-collapse: collapse; + border-spacing: initial; + border: 1px solid #aaa; +} + +.memitem:nth-child(3) table.memname tr:not(:last-child) { + border-bottom: 1px dashed #aaa; +} + + +dl.reflist dt { + padding: 5px; + z-index: 0; /* cover the top shadow of dd */ + position: relative; + @include box-shadow(0 0 4px rgba(0,0,0,0.35), 0 0 8px rgba(0,0,0,0.2)); +} + +/* cover up the shadow at the bottom */ +dl.reflist dt::after { + content: " "; + width: 100%; + display: block; + height: 8px; + position: absolute; + background-color: #f6f6f6; + left: 0; + bottom: -8px; +} + +dl.reflist dd { + border-left: 4px solid $primary-color; + padding: 2px 1% 2px 1%; + margin: 8px 8px 24px 8px; + outline: 8px solid #f6f6f6; + @include box-shadow(0 0 4px 8px rgba(0,0,0,0.35), 0 0 8px 8px rgba(0,0,0,0.2)); +} + +dl.reflist dd p::before { + font-size: 85%; + content: "\25B6\00A0\00A0"; + display: inline-block; + width: 12pt; +} + +dl.reflist dd p { + margin-top: 4px; + margin-bottom: 4px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + font-family: monospace; + white-space: nowrap; + color:$secondary-color-dark; +} + +.paramname { + color: black; + font-family: monospace; + white-space: nowrap; +} +.paramname em { + color: $primary-color-light; + font-style: normal; +} +.paramname code { + color: #404040; + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0; + padding-left: 0; + margin-bottom: -0.25em; +} + +.params dt, .tparams dt { + margin-bottom: 0.5em; +} + +.params .paramname, .tparams .paramname, .retval .paramname, .exception .paramname { + color: $primary-color-light; + font-family: monospace; + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-family: monospace; + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +/* line over parameters docs */ +.params, .tparams { + border-collapse: collapse; +} + +.params tr, .tparams tr { + @include box-shadow(0 -2px 0 -1px #606060); +} + +.params .paramname, .tparams .paramname { + border-top: 2px solid $primary-color; + padding-right: 5pt; +} + +.params td, .tparams td { + padding-bottom: 1em; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #444444; + border: none; + border-radius: 3px; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 3px 5px; + font-size: 8pt; + white-space: nowrap; + vertical-align: middle; +} + +.memdoc .definition { + position: relative; + padding-top: 0.5em; + + /* move definition line to bottom of memdoc */ + order: 3; + + // border above + &::before { + content: ""; + width: 33%; + height: 1px; + border-top: 1px solid black; + position: absolute; + top: 0; + } +} + + + +// list of all members and class / file / ... lists +table.directory { + border-top: 1px solid #c5c5c5; + border-bottom: 1px solid #c5c5c5; + border-collapse:collapse; + width: 100%; + font: 400 14px Roboto,sans-serif; + + tr { + // overwrite doxygen weirdness + background-color: white !important; + + &.even { + background-color: #f6f6f6 !important; + } + + &:hover { + background-color: #e6e6e6 !important; + } + } + + td.entry { + padding: 1.5pt 3pt 1.5pt 3pt; + white-space: normal; + } +} + +// class / file / ... lists specific +div.directory { + border: none; + + table.directory { + tr { + // this makes all lines the same height + line-height: 17pt; + } + + td { + margin: 0; + padding: 0.5pt 6pt 0.5pt 0; + vertical-align: middle; + + &.entry { + white-space: nowrap; + } + + &.desc { + width: 100%; + padding-left: 6pt; + border-left: 1px solid rgba(0,0,0,0.05); + } + } + } +} + +// "detail level" at the top +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; + + span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: $secondary-color; + + &:hover { + text-decoration: underline; + } + } +} + +@import "nav_tree"; + +.icon { + font-family: monospace; + font-weight: bold; + font-size: 12px; + height: 15px; + width: 15px; + display: inline-block; + background-color: #444444; + color: white; + text-align: center; + border-radius: 3px; + margin: 0; + padding-top: 1px; + text-indent: -1px; +} + +.icona { + width: 0; + height: 0; + display: none; + visibility: hidden; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-position: 0; + background-repeat: no-repeat; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-position: 0; + background-repeat: no-repeat; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0; + background-repeat: no-repeat; + vertical-align:top; + display: inline-block; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse: collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #444444; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #444444; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +@import "navpath"; + +div.summary { + -webkit-order: 2; + order: 2; + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; + margin-right: 0.5%; +} + +div.summary a { + white-space: nowrap; +} + +table.classindex { + margin: 10px; + white-space: nowrap; + margin-left: 1%; + margin-right: 1%; + width: 98%; + border: none; + border-top: 1px solid black; + border-bottom: 1px solid black; + border-spacing: 0.5em; + padding: 0; +} + +div.ingroups { + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a { + white-space: nowrap; +} + +div.header { + display: -webkit-flex; + display: flex; + justify-content: space-between; + background-image: none; + background-color: $background-color; + color: black; + margin: 5pt 5pt 0 5pt; + padding: 0 1ex 0 1ex; + align-items: center; + justify-content: center; + border-bottom: none; + position: relative; +} + +div.header::after { + content: ""; + height: 2px; + width: 99%; + position: absolute; + bottom: -5px; + left: 0.5%; + background: #666; +} + +div.headertitle { + -webkit-order: 1; + order: 1; + margin-right: auto; + text-align: center; +} + +dl { + padding: 0; +} + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section > dt { + font-weight: bold; + font-family: sans-serif; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, +dl.deprecated, dl.todo, dl.test, dl.bug { + margin-left: -7px; + padding-left: 3px; +} + +dl.note { + padding-left: 7px; + border: none; +} + +dl.warning { + background-color: #ffe6ea; + border: 1px solid #ff0728; + border-left: 4px solid #ff0728; + padding-top: 4px; + padding-bottom: 3px; +} + +dl.attention { + border-left: 4px solid #ff0728; +} + +dl.pre, dl.post, dl.invariant { + background-color: #f0ffe6; + border: 1px solid #5eb82a; + border-left: 4px solid #5eb82a; +} + +dl.deprecated { + background-color: #f6f6f6; + border: 1px solid black; +} + +dl.todo { + border-left: 4px solid #e8d500; +} + +dl.test { + border-left: 4px solid #00549f; +} + +dl.bug { + background-color: #f6f6f6; + border: 1px solid #cc071e; + border-left: 4px solid #cc071e; +} + +dl.section dd { + margin-bottom: 6px; +} + +.memdoc dl dt a.el { + font-weight: bold; + color: black; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber { + font: 50% Roboto,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea { + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: none; + + // should only match if main menu is disabled (depends on javascripts in #top) + &:nth-last-child(2) { + border-bottom: 2px solid #444444; + } +} + +.image +{ + text-align: center; +} + +.dotgraph, .mscgraph, .diagraph { + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom: 5ex; + + dt { + color: black; + float: left; + font-weight: bold; + padding: 5px 0; + margin: 2px 10pt 2px 0; + } + + dd { + margin: 2px 0; + padding: 5px 0; + } + + .startdd { + margin-top: 0; + } +} + +div.toc { + background-color: transparent; + border: 1px solid $background-color-dark; + @include border-radius(0); + float: right; + height: auto; + margin: 0 8px 10px 10px; + padding: 10px 15px 5px 25px; + width: auto; + + li { + background: transparent; + font: 10pt Roboto,DejaVu Sans,sans-serif; + padding-left: 0; + padding-top: 0.5ex; + + .level1 { + margin-left: 10pt; + } + + .level2 { + margin-left: 10pt; + } + + .level3 { + margin-left: 10pt; + } + + .level4 { + margin-left: 10pt; + } + } + + h3 { + font: bold 12px/1.2 Roboto,DejaVu Sans,sans-serif; + color: black; + border-bottom: none; + margin: 0; + letter-spacing: 1px; + } + + ul { + list-style: disc; + border: none; + padding: 0; + } +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: $background-color; + border: 1px solid #323232; + border-radius: 0; + @include box-shadow(none); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em 1em; + position: absolute; + z-index: 2147483647; + + div.ttdoc { + color: grey; + font-style: italic; + } + + div.ttname a { + font-weight: bold; + } + + div.ttname { + font-weight: bold; + } + + div.ttdeci { + color: #006318; + } + + div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; + } + + &:before, &:after { + content: ""; + position: absolute; + margin: 0px; + } +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + background-color: white; + } +} diff --git a/doc/that_style/that_style.css b/doc/that_style/that_style.css new file mode 100644 index 0000000..34c3244 --- /dev/null +++ b/doc/that_style/that_style.css @@ -0,0 +1,1436 @@ +@charset "UTF-8"; +/* + * My own little style + */ +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; } + +h1.groupheader { + font-size: 150%; } + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; } + +h2.groupheader { + border-bottom: 1px solid #555555; + color: black; + font-size: 200%; + font-weight: bold; + margin-top: 1.75em; + padding-top: 1em; + padding-bottom: 4px; + width: 100%; } + +tr.heading h2 { + border-bottom: 1px solid #a5a5a5; + font-size: 150%; + margin-top: 6px; + margin-bottom: 6px; + padding-top: 3px; + padding-bottom: 7px; } + +h2.groupheader a { + margin-left: 1%; } + +h3.groupheader { + font-size: 100%; } + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + margin-right: 15px; } + h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: none; + color: #5f082b; } + +dt { + font-weight: bold; } + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; } + +p.startli, p.startdd { + margin-top: 2px; } + +p.starttd { + margin-top: 0px; } + +p.endli { + margin-bottom: 0px; } + +p.enddd { + margin-bottom: 4px; } + +p.endtd { + margin-bottom: 2px; } + +#top { + border: none; + position: relative; + z-index: 100; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.4), 0 0 8px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.4), 0 0 8px rgba(0, 0, 0, 0.3); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.4), 0 0 8px rgba(0, 0, 0, 0.3); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.4), 0 0 8px rgba(0, 0, 0, 0.3); } + +caption { + font-weight: bold; } + +span.legend { + font-size: 70%; + text-align: center; } + +h3.version { + font-size: 90%; + text-align: center; } + +div.qindex, div.navtab { + background-color: #ffffff; + border: none; + text-align: center; } + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; } + +div.navtab { + margin-right: 15px; } + +a, a:visited { + color: #00549f; + font-weight: normal; + text-decoration: none; } + +.contents a:visited { + color: #4665A2; } + +a:hover { + text-decoration: underline; } + +a.qindex { + font-weight: bold; + text-transform: uppercase; } + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; } + +.contents a.qindexHL:visited { + color: #ffffff; } + +a.el, a.el:visited { + font-weight: normal; + color: #00549f; } + +a.elRef, a.elRef:visited { + font-family: monospace; + color: #006bc8; } + +/* + * The main menu at the top + */ +#main-menu { + background-image: none; + background: #414141; + padding: 0; } + +.sm-dox > li:not(:last-child) > a { + background-image: none; + text-shadow: none; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; + text-transform: uppercase; } +.sm-dox > li:not(:last-child) > a:hover, .sm-dox > li:not(:last-child) > a.highlighted { + background-color: #5f082b; } +.sm-dox a span.sub-arrow { + border-color: white transparent transparent; } +.sm-dox ul { + border: none; + -moz-border-radius: 0 !important; + -webkit-border-radius: 0 !important; + border-radius: 0 !important; + padding: 0; + background: #414141; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + .sm-dox ul a { + background: inherit; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; } + .sm-dox ul a:hover { + background: #5f082b; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; } + .sm-dox ul a.highlighted { + background: #5f082b; + color: white; + font-weight: normal; + letter-spacing: 1px; + font-size: 11pt; } + .sm-dox ul a span.sub-arrow { + /* this sets the color of the arrow */ + border-color: white transparent transparent; } + +dl.el { + margin-left: -1cm; } + +div.ah, span.ah { + background: none; + color: black; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + font: 14pt monospace; + font-weight: bold; + text-transform: uppercase; } + +div.classindex ul { + list-style: none; + padding-left: 0; } + +div.classindex span.ai { + display: inline-block; } + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; } + +div.groupText { + margin-left: 16px; + font-style: italic; } + +body { + background-color: #ffffff; + color: black; + margin: 0; } + +#doc-content { + background-color: #111; + color: #ffffff; } + +div.contents { + color: black; + background-color: #ffffff; + padding: 0; + margin: 5pt; } + div.contents hr { + display: none; + visibility: hidden; } + +div.header + div.contents { + padding: 1ex; + margin: 0 5pt 5pt 5pt; } + +div.textblock { + padding: 1ex 1ex 0 1ex; } + +div.textblock + ul { + padding-bottom: 1%; } + +img.footer { + border: 0px; + vertical-align: middle; } + +/* + Basic styling for fragments shared by all themes. +*/ +div.fragment { + padding: 0; + margin: 4px 8px 4px 2px; + color: #bebebe; + background-color: #323232; + border: 3px solid #e8e8e8; + border-radius: 2px; + overflow-y: hidden; + overflow-x: auto; + position: relative; } + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-indent: -53px; + margin: 0px; + padding: 1px 0 1px 53px; + white-space: pre; + -webkit-transition: background-color; + -moz-transition: background-color; + -o-transition: background-color; + transition: background-color; + -webkit-duration: 0s; + -moz-duration: 0s; + -o-duration: 0s; + duration: 0s; } + div.line:hover { + background-color: #1a1a1a; } + div.line::after { + content: "\000A"; + white-space: pre; } + +span.lineno { + padding-right: 4px; + text-align: right; + color: black; + height: 100px; + white-space: pre; + border-right: 3px solid #1d7567; + background-color: #a0a0a0; } + +span.lineno a, span.lineno a:visited { + background-color: inherit; + color: #1e595a; } + +span.lineno a:hover { + background-color: #C8C8C8; + text-decoration: none; } + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +div.fragment { + color: #bebebe; + background-color: #323232; } + +div.fragment::before { + background-color: #1a1a1a; + border-right: 1px solid #3e3e3e; } + +div.line:hover { + background-color: #1a1a1a; } + +span.lineno { + color: #969696; + background-color: #1a1a1a; + border-right: 1px solid #3e3e3e; } + +span.lineno a, span.lineno a:visited { + background-color: inherit; + color: #dcdcdc; } + +span.lineno a:hover { + background-color: #323232; } + +a.code, a.code:visited { + color: #6cc7eb; } + +a.codeRef, a.codeRef:visited { + color: #3d95e6; } + +span.keyword { + color: #98f77a; + font-weight: bold; } + +span.keywordtype { + color: #ffa0a0; } + +span.keywordflow { + color: #98f77a; + font-weight: bold; } + +span.comment { + color: #999; + font-style: oblique; } + +span.preprocessor { + color: #cd5c57; } + +span.stringliteral { + color: #64b041; } + +span.charliteral { + color: #64b041; } + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; } + +/* + * The search box + */ +.sm-dox > li:last-child { + margin-right: 10pt; } + +#MSearchBox { + border: 2px inset black; + display: table; + width: 350px; + height: 26px; + background: white; + margin-top: 5px; } + #MSearchBox .left { + background-image: none; + display: table-cell; + width: 100%; + height: inherit; + left: 0; } + #MSearchBox .right { + background-image: none; + width: 0; + display: none; + visibility: hidden; } + +nav > #MSearchBox { + border: 2px solid #666666; + margin: 5px 10pt 0 0; + height: 22px; } + +#MSearchSelect, .left #MSearchSelect { + left: 0; + background-image: url("mag_glass.svg"); + width: 22px; + height: 22px; + padding: 22px 22px 0 0; + margin: 0 4px 0 4px; + box-sizing: border-box; } + +#MSearchField { + background-image: none; + display: table-cell; + margin: 0; + margin-left: 30px; + width: calc(100% - 34px); + height: 22px; + font: 11pt sans-serif; } + +#MSearchSelectWindow { + background-color: #414141; + padding: 0; + border: solid 1px black; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +a.SelectItem { + color: white; + padding: 3px 4px; + font: 10pt sans-serif; + letter-spacing: 1px; } + a.SelectItem:hover { + background-color: #5f082b; + color: white; } + a.SelectItem:focus, a.SelectItem:active { + color: white; } + +#MSearchResultsWindow { + background-color: white; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +table.memberdecls { + width: 100%; + border-spacing: 0px; + padding: 0px; + margin-top: 7px; + background-color: #ffffff; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +.memberdecls tbody { + background-color: #ffffff; } + +.memberdecls .odd { + background: #f6f6f6; } + +/* all but last separator show a line */ +.memberdecls tr[class^="separator"]:not(:last-child) .memSeparator { + border-bottom: 1px solid #c5c5c5; + line-height: 1px; + margin: 0; + padding: 0; } + +.memberdecls tr[class^="separator"]:last-child .memSeparator { + border-bottom: none; + line-height: 0; + margin: 0; + padding: 0; } + +table.fieldtable { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; } + +.memberdecls td, .fieldtable tr { + background-color: inherit; } + +.fieldtable th { + display: none; + height: 0; + visibility: hidden; } + +td.fieldname { + color: #820a32; + font-family: monospace; + font-weight: bold; } + +th.markdownTableHeadLeft, th.markdownTableHeadRight, +th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #414141; + color: white; } + +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + font-family: monospace; + background-color: #ffffff; + border: none; + margin: 4px; + padding: 1px 0 0 8px; } + +.mdescLeft, .mdescRight { + background-color: #ffffff; + border: none; + margin: 4px; + padding: 1px 0 0 8px; } + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; } + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; } + +.memItemRight { + width: 100%; } + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; } + +/* Styles for detailed member documentation */ +.memtitle { + padding: 8px; + border: none; + margin-bottom: -1px; + background-image: none; + background-color: #f6f6f6; + line-height: 1.25; + font-weight: bold; + color: black; + float: left; + z-index: 0; + position: relative; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +.permalink { + font-size: 100%; + display: inline-block; + vertical-align: middle; } + +/* replace content of permalinks */ +.permalink a { + visibility: hidden; } + +.permalink a:after { + content: "§"; + visibility: visible; + display: block; + position: absolute; + color: black; + top: 20%; } + +.permalink a:visited { + color: black; } + +.memtemplate { + font-size: 100%; + color: black; + font-family: monospace; + font-weight: normal; + margin-left: 9px; } + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; } + +.mempage { + width: 100%; } + +.memitem { + font-family: monospace; + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; + display: table !important; + width: 100%; + background-color: #f6f6f6; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +.memitem.glow { + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; } + +.memname { + font-family: monospace; + font-weight: 400; + margin-left: 6px; } + +.memname td { + vertical-align: bottom; } + +.memproto, dl.reflist dt { + border: none; + padding: 6px 0px 6px 0px; + color: black; + font-weight: bold; + text-shadow: none; + background-color: #f6f6f6; + position: relative; + z-index: 1; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; } + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; } + +.memdoc, dl.reflist dd { + border: none; + border-left: 4px solid #5f082b; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + -webkit-border-bottom-left-radius: 0px; + -webkit-border-bottom-right-radius: 0px; + -moz-border-bottom-left-radius: 0px; + -moz-border-bottom-right-radius: 0px; + padding: 2px 1% 2px 1%; + margin: 1%; + background-color: #ffffff; + background-image: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + /* allow movement of elements inside */ + display: flex; + flex-direction: column; } + +/* overrides for docs on individual pages */ +.memtitle:nth-child(2) { + width: 0; + height: 0; + display: none; + visibility: hidden; } + +.memitem:nth-child(3) { + margin: 0; + margin-top: 0.5%; + background-color: #ffffff; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; } + +.memitem:nth-child(3) .memproto { + padding: 10px; + background-color: #ffffff; + margin-bottom: 10px; } + +.memitem:nth-child(3) .memproto::after { + content: ""; + width: 99%; + height: 1px; + position: absolute; + bottom: -10px; + left: 0.5%; + background: #666; } + +.memitem:nth-child(3) .memdoc { + border: none; + padding: 0; } + +.memitem:nth-child(3) table.memname { + background-color: #f6f6f6; + border-collapse: collapse; + border-spacing: initial; + border: 1px solid #aaa; } + +.memitem:nth-child(3) table.memname tr:not(:last-child) { + border-bottom: 1px dashed #aaa; } + +dl.reflist dt { + padding: 5px; + z-index: 0; + /* cover the top shadow of dd */ + position: relative; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35), 0 0 8px rgba(0, 0, 0, 0.2); } + +/* cover up the shadow at the bottom */ +dl.reflist dt::after { + content: " "; + width: 100%; + display: block; + height: 8px; + position: absolute; + background-color: #f6f6f6; + left: 0; + bottom: -8px; } + +dl.reflist dd { + border-left: 4px solid #5f082b; + padding: 2px 1% 2px 1%; + margin: 8px 8px 24px 8px; + outline: 8px solid #f6f6f6; + -moz-box-shadow: 0 0 4px 8px rgba(0, 0, 0, 0.35), 0 0 8px 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 4px 8px rgba(0, 0, 0, 0.35), 0 0 8px 8px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 0 4px 8px rgba(0, 0, 0, 0.35), 0 0 8px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px 8px rgba(0, 0, 0, 0.35), 0 0 8px 8px rgba(0, 0, 0, 0.2); } + +dl.reflist dd p::before { + font-size: 85%; + content: "\25B6\00A0\00A0"; + display: inline-block; + width: 12pt; } + +dl.reflist dd p { + margin-top: 4px; + margin-bottom: 4px; } + +.paramkey { + text-align: right; } + +.paramtype { + font-family: monospace; + white-space: nowrap; + color: #002546; } + +.paramname { + color: black; + font-family: monospace; + white-space: nowrap; } + +.paramname em { + color: #820a32; + font-style: normal; } + +.paramname code { + color: #404040; + line-height: 14px; } + +.params, .retval, .exception, .tparams { + margin-left: 0; + padding-left: 0; + margin-bottom: -0.25em; } + +.params dt, .tparams dt { + margin-bottom: 0.5em; } + +.params .paramname, .tparams .paramname, .retval .paramname, .exception .paramname { + color: #820a32; + font-family: monospace; + font-weight: bold; + vertical-align: top; } + +.params .paramtype, .tparams .paramtype { + font-family: monospace; + font-style: italic; + vertical-align: top; } + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; } + +/* line over parameters docs */ +.params, .tparams { + border-collapse: collapse; } + +.params tr, .tparams tr { + -moz-box-shadow: 0 -2px 0 -1px #606060; + -webkit-box-shadow: 0 -2px 0 -1px #606060; + -o-box-shadow: 0 -2px 0 -1px #606060; + box-shadow: 0 -2px 0 -1px #606060; } + +.params .paramname, .tparams .paramname { + border-top: 2px solid #5f082b; + padding-right: 5pt; } + +.params td, .tparams td { + padding-bottom: 1em; } + +table.mlabels { + border-spacing: 0px; } + +td.mlabels-left { + width: 100%; + padding: 0px; } + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; } + +span.mlabels { + margin-left: 8px; } + +span.mlabel { + background-color: #444444; + border: none; + border-radius: 3px; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 3px 5px; + font-size: 8pt; + white-space: nowrap; + vertical-align: middle; } + +.memdoc .definition { + position: relative; + padding-top: 0.5em; + /* move definition line to bottom of memdoc */ + order: 3; } + .memdoc .definition::before { + content: ""; + width: 33%; + height: 1px; + border-top: 1px solid black; + position: absolute; + top: 0; } + +table.directory { + border-top: 1px solid #c5c5c5; + border-bottom: 1px solid #c5c5c5; + border-collapse: collapse; + width: 100%; + font: 400 14px Roboto,sans-serif; } + table.directory tr { + background-color: white !important; } + table.directory tr.even { + background-color: #f6f6f6 !important; } + table.directory tr:hover { + background-color: #e6e6e6 !important; } + table.directory td.entry { + padding: 1.5pt 3pt 1.5pt 3pt; + white-space: normal; } + +div.directory { + border: none; } + div.directory table.directory tr { + line-height: 17pt; } + div.directory table.directory td { + margin: 0; + padding: 0.5pt 6pt 0.5pt 0; + vertical-align: middle; } + div.directory table.directory td.entry { + white-space: nowrap; } + div.directory table.directory td.desc { + width: 100%; + padding-left: 6pt; + border-left: 1px solid rgba(0, 0, 0, 0.05); } + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; } + .directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #00549f; } + .directory .levels span:hover { + text-decoration: underline; } + +/* + * The tree view on the left + */ +.arrow { + color: black; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; + margin-left: 4px; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .arrow:hover { + color: black; } + +#selected .arrow { + color: white; } + #selected .arrow:hover { + color: #d2d2d2; } + +#nav-tree { + background-image: none; + background-color: white; } + #nav-tree .item { + margin: 0; } + #nav-tree .item:hover { + background-color: #d2d2d2; } + #nav-tree .selected { + background-image: none; + background-color: #5f082b; + color: white; + text-shadow: none; } + #nav-tree .selected:hover { + background-image: none; + background-color: #5f082b; + color: white; + text-shadow: none; } + #nav-tree a { + color: black; } + +.ui-resizable-e { + background: #808080 url("splitbar_handle.svg") no-repeat center; + border-right: solid 1px #c0c0c0; + border-left: solid 1px black; } + .ui-resizable-e:hover { + background-color: #606060; } + +.icon { + font-family: monospace; + font-weight: bold; + font-size: 12px; + height: 15px; + width: 15px; + display: inline-block; + background-color: #444444; + color: white; + text-align: center; + border-radius: 3px; + margin: 0; + padding-top: 1px; + text-indent: -1px; } + +.icona { + width: 0; + height: 0; + display: none; + visibility: hidden; } + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url("folderopen.svg"); + background-position: 0; + background-repeat: no-repeat; + vertical-align: top; + display: inline-block; } + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url("folderclosed.svg"); + background-position: 0; + background-repeat: no-repeat; + vertical-align: top; + display: inline-block; } + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url("doc.svg"); + background-position: 0; + background-repeat: no-repeat; + vertical-align: top; + display: inline-block; } + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +address { + font-style: normal; + color: #2A3D61; } + +table.doxtable caption { + caption-side: top; } + +table.doxtable { + border-collapse: collapse; + margin-top: 4px; + margin-bottom: 4px; } + +table.doxtable td, table.doxtable th { + border: 1px solid #444444; + padding: 3px 7px 2px; } + +table.doxtable th { + background-color: #444444; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; } + +/* + * The line at the bottom + */ +.navpath { + /* intermediate navelems */ + /* first navelem */ + /* last navelem */ } + .navpath ul { + font-size: 11px; + background-image: none; + height: 30px; + line-height: 30px; + color: black; + border: none; + border-top: 1px solid #808080; + overflow: hidden; + margin: 0px; + padding: 0px; } + .navpath li:not(:first-child) { + list-style-type: none; + float: left; + padding-left: 18px; + padding-right: 10px; + color: black; + background-color: white; + background-image: url("nav_edge_inter.svg"); + background-repeat: no-repeat; + background-position: left -1px; + background-size: auto 100%; } + .navpath li:first-child { + list-style-type: none; + float: left; + padding-left: 15px; + padding-right: 10px; + color: black; + background-color: white; + background-image: none; } + .navpath li:nth-last-child(2) { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + color: white; + background-color: #5f082b; + background-image: url("nav_edge_right.svg"); + background-repeat: no-repeat; + background-position: right -1px; + background-size: auto 100%; } + .navpath li:nth-last-child(2):not(:first-child) { + list-style-type: none; + float: left; + padding-left: 15px; + padding-right: 15px; + color: white; + background-color: #5f082b; + background-image: url("nav_edge_left.svg"), url("nav_edge_right.svg"); + background-repeat: no-repeat; + background-position: -1px -1px, right -1px; + background-size: auto 100%; } + .navpath li.navelem a, .navpath .navpath li.navelem b { + height: 32px; + display: block; + text-decoration: none; + outline: none; + color: inherit; + font-family: Roboto,sans-serif; + text-shadow: none; + text-decoration: none; + font-weight: normal; } + .navpath li.navelem a:hover { + color: inherit; + text-decoration: underline; } + .navpath li.footer { + list-style-type: none; + float: right; + padding-left: 0; + padding-right: 10px; + background-color: #d5d5d5; + background-image: none; + color: black; + font-size: 8pt; } + .navpath li.footer:before { + content: ""; + width: 13px; + height: 30px; + display: inline-block; + float: left; + background-image: url("nav_edge_right.svg"); + background-repeat: no-repeat; + background-position: right 0; + background-size: auto 100%; + /* flip the element horizontally */ + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + -webkit-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: "FlipH"; } + +div.summary { + -webkit-order: 2; + order: 2; + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; + margin-right: 0.5%; } + +div.summary a { + white-space: nowrap; } + +table.classindex { + margin: 10px; + white-space: nowrap; + margin-left: 1%; + margin-right: 1%; + width: 98%; + border: none; + border-top: 1px solid black; + border-bottom: 1px solid black; + border-spacing: 0.5em; + padding: 0; } + +div.ingroups { + font-size: 8pt; + width: 50%; + text-align: left; } + +div.ingroups a { + white-space: nowrap; } + +div.header { + display: -webkit-flex; + display: flex; + justify-content: space-between; + background-image: none; + background-color: #ffffff; + color: black; + margin: 5pt 5pt 0 5pt; + padding: 0 1ex 0 1ex; + align-items: center; + justify-content: center; + border-bottom: none; + position: relative; } + +div.header::after { + content: ""; + height: 2px; + width: 99%; + position: absolute; + bottom: -5px; + left: 0.5%; + background: #666; } + +div.headertitle { + -webkit-order: 1; + order: 1; + margin-right: auto; + text-align: center; } + +dl { + padding: 0; } + +dl.section { + margin-left: 0px; + padding-left: 0px; } + +dl.section > dt { + font-weight: bold; + font-family: sans-serif; } + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, +dl.deprecated, dl.todo, dl.test, dl.bug { + margin-left: -7px; + padding-left: 3px; } + +dl.note { + padding-left: 7px; + border: none; } + +dl.warning { + background-color: #ffe6ea; + border: 1px solid #ff0728; + border-left: 4px solid #ff0728; + padding-top: 4px; + padding-bottom: 3px; } + +dl.attention { + border-left: 4px solid #ff0728; } + +dl.pre, dl.post, dl.invariant { + background-color: #f0ffe6; + border: 1px solid #5eb82a; + border-left: 4px solid #5eb82a; } + +dl.deprecated { + background-color: #f6f6f6; + border: 1px solid black; } + +dl.todo { + border-left: 4px solid #e8d500; } + +dl.test { + border-left: 4px solid #00549f; } + +dl.bug { + background-color: #f6f6f6; + border: 1px solid #cc071e; + border-left: 4px solid #cc071e; } + +dl.section dd { + margin-bottom: 6px; } + +.memdoc dl dt a.el { + font-weight: bold; + color: black; } + +#projectlogo { + text-align: center; + vertical-align: bottom; + border-collapse: separate; } + +#projectlogo img { + border: 0px none; } + +#projectalign { + vertical-align: middle; } + +#projectname { + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; } + +#projectbrief { + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; } + +#projectnumber { + font: 50% Roboto,sans-serif; + margin: 0px; + padding: 0px; } + +#titlearea { + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: none; } + #titlearea:nth-last-child(2) { + border-bottom: 2px solid #444444; } + +.image { + text-align: center; } + +.dotgraph, .mscgraph, .diagraph { + text-align: center; } + +.caption { + font-weight: bold; } + +div.zoom { + border: 1px solid #90A5CE; } + +dl.citelist { + margin-bottom: 5ex; } + dl.citelist dt { + color: black; + float: left; + font-weight: bold; + padding: 5px 0; + margin: 2px 10pt 2px 0; } + dl.citelist dd { + margin: 2px 0; + padding: 5px 0; } + dl.citelist .startdd { + margin-top: 0; } + +div.toc { + background-color: transparent; + border: 1px solid #414141; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + float: right; + height: auto; + margin: 0 8px 10px 10px; + padding: 10px 15px 5px 25px; + width: auto; } + div.toc li { + background: transparent; + font: 10pt Roboto,DejaVu Sans,sans-serif; + padding-left: 0; + padding-top: 0.5ex; } + div.toc li .level1 { + margin-left: 10pt; } + div.toc li .level2 { + margin-left: 10pt; } + div.toc li .level3 { + margin-left: 10pt; } + div.toc li .level4 { + margin-left: 10pt; } + div.toc h3 { + font: bold 12px/1.2 Roboto,DejaVu Sans,sans-serif; + color: black; + border-bottom: none; + margin: 0; + letter-spacing: 1px; } + div.toc ul { + list-style: disc; + border: none; + padding: 0; } + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.inherit_header td { + padding: 6px 0px 2px 5px; } + +.inherit { + display: none; } + +/* tooltip related style info */ +.ttc { + position: absolute; + display: none; } + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: #ffffff; + border: 1px solid #323232; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em 1em; + position: absolute; + z-index: 2147483647; } + #powerTip div.ttdoc { + color: grey; + font-style: italic; } + #powerTip div.ttname a { + font-weight: bold; } + #powerTip div.ttname { + font-weight: bold; } + #powerTip div.ttdeci { + color: #006318; } + #powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; } + #powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; } + +@media print { + #top { + display: none; } + + #side-nav { + display: none; } + + #nav-path { + display: none; } + + body { + overflow: visible; } + + h1, h2, h3, h4, h5, h6 { + page-break-after: avoid; } + + .summary { + display: none; } + + .memitem { + page-break-inside: avoid; } + + #doc-content { + margin-left: 0 !important; + height: auto !important; + width: auto !important; + overflow: inherit; + display: inline; + background-color: white; } } + +/*# sourceMappingURL=that_style.css.map */ diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 4951733..b672092 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -137,4 +137,5 @@ endif (WIN32 OR CYGWIN OR MINGW) # TODO Execute "$CMAKE_LINKER --help" and check for --wrap if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)" AND NOT APPLE) add_subdirectory(chef_wrap) + add_subdirectory(uptime) endif() diff --git a/example/uptime/CMakeLists.txt b/example/uptime/CMakeLists.txt new file mode 100644 index 0000000..99924bd --- /dev/null +++ b/example/uptime/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMOCKA_PUBLIC_INCLUDE_DIRS} +) + +add_library(proc_uptime proc_uptime.c) + +add_executable(uptime uptime.c) +target_compile_options(uptime PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) +target_link_libraries(uptime proc_uptime) + +add_executable(test_uptime test_uptime.c) +target_compile_options(test_uptime PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) +target_link_libraries(test_uptime ${CMOCKA_SHARED_LIBRARY}) + +set_target_properties(test_uptime + PROPERTIES + LINK_FLAGS "-Wl,--wrap=uptime") + +add_test(test_uptime ${CMAKE_CURRENT_BINARY_DIR}/test_uptime) diff --git a/example/uptime/README.md b/example/uptime/README.md new file mode 100644 index 0000000..081ae51 --- /dev/null +++ b/example/uptime/README.md @@ -0,0 +1,56 @@ +The uptime mock example +======================= + +This is a very simple example to explain the mocking feature of cmocka. It +implement the 'uptime' unix command in a very simple way to demonstrate how to +test the time calculation. + +The problem with testing the uptime command is that /proc/uptime constantly +ticks. The result is random whenever you call the test. To actually test it +we need to make sure that we work with fixed values. The mocking features +of cmocka allows us to test it anyway! + +Source files +------------ + +* *proc_uptime.c*: This implements the `uptime()` function reading and parsing + the /proc/uptime file. +* *uptime.c*: This is the actual uptime implementation, it calls + `calc_uptime()` to get a human readable string representation of the uptime. + This function calls `uptime()` from proc_uptime.c. +* *test_uptime.c*: This is the test with the mocking function for uptime(). + +Linking magic +------------- + +The test is linked using: + + ld --wrap=uptime + +This replaces the orginal `uptime()` function which reads from `/proc/uptime` +with the mock function we implemented for testing `calc_uptime()`. + +The mock function we implemented has a special name. It is called +`__wrap_uptime()`. All the symbols you want to mock (or replace) need to start +with the prefix `__wrap_`. So `ld --wrap=uptime` will rename the orignal +`uptime()` function to `__real_uptime()`. This means you can still reach the +original function using that name and call it e.g. from the wrap function. +The symbol `uptime` will be bound to `__wrap_uptime`. + +You can find more details in the manpage: `man ld` + +The uptime test +--------------- + +The code should be easy to understand. If you have a hard time following, there +are two ways to understand how things work. + +You can find out details about symbol binding using: + + LD_DEBUG=symbols ./example/uptime/uptime + LD_DEBUG=symbols ./example/uptime/test_uptime + +You can also use a debugger to step through the code! + + +Have fun! diff --git a/example/uptime/proc_uptime.c b/example/uptime/proc_uptime.c new file mode 100644 index 0000000..a92c2ab --- /dev/null +++ b/example/uptime/proc_uptime.c @@ -0,0 +1,78 @@ +/* + * Copyright 2018 Andreas Scheider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <locale.h> +#include <unistd.h> + +#include "proc_uptime.h" + +#define UPTIME_FILE "/proc/uptime" + +int uptime(const char *uptime_path, double *uptime_secs, double *idle_secs) +{ + double up = 0; + double idle = 0; + char *savelocale = NULL; + char buf[1024] = {0}; + ssize_t nread; + int fd = -1; + int rc; + + if (uptime_path == NULL) { + uptime_path = UPTIME_FILE; + } + + fd = open(uptime_path, O_RDONLY); + if (fd < 0) { + return 0; + } + + nread = read(fd, buf, sizeof(buf)); + close(fd); + if (nread < 0) { + return 0; + } + + savelocale = strdup(setlocale(LC_NUMERIC, NULL)); + if (savelocale == NULL) { + return 0; + } + + setlocale(LC_NUMERIC, "C"); + rc = sscanf(buf, "%lf %lf", &up, &idle); + setlocale(LC_NUMERIC, savelocale); + free(savelocale); + if (rc < 2) { + errno = EFAULT; + return 0; + } + + if (uptime_secs != NULL) { + *uptime_secs = up; + } + if (idle_secs != NULL) { + *idle_secs = idle; + } + + return (int)up; +} diff --git a/example/uptime/proc_uptime.h b/example/uptime/proc_uptime.h new file mode 100644 index 0000000..222ece5 --- /dev/null +++ b/example/uptime/proc_uptime.h @@ -0,0 +1,22 @@ +/* + * Copyright 2018 Andreas Scheider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _PROC_UPTIME_H +#define _PROC_UPTIME_H + +int uptime(const char *uptime_path, double *uptime_secs, double *idle_secs); + +#endif /* _PROC_UPTIME_H */ diff --git a/example/uptime/test_uptime.c b/example/uptime/test_uptime.c new file mode 100644 index 0000000..32ec79e --- /dev/null +++ b/example/uptime/test_uptime.c @@ -0,0 +1,182 @@ +/* + * Copyright 2018 Andreas Scheider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#define UNIT_TESTING 1 +#include "uptime.c" + +#define UNUSED(x) (void)(x) + +/* + * This is a mocked object! + * + * It is a reimplementation of the uptime() function you can find in + * proc_uptime.c. + * + * This function can be instrumeted by the test. We can tell it what + * we expect or should return. + */ +int __wrap_uptime(const char *uptime_path, + double *uptime_secs, + double *idle_secs); +int __wrap_uptime(const char *uptime_path, + double *uptime_secs, + double *idle_secs) +{ + double up; + double idle; + + /* Verify the passed value of the argument is correct */ + check_expected(uptime_path); + + /* Assign the return values */ + up = mock_type(double); + idle = mock_type(double); + + if (uptime_secs != NULL) { + *uptime_secs = up; + } + if (idle_secs != NULL) { + *idle_secs = idle; + } + + return (int)up; +} + +static void test_calc_uptime_minutes(void **state) +{ + char *uptime_str = NULL; + + UNUSED(state); + + /* Make sure the passed 'in' argument is correct */ + expect_string(__wrap_uptime, uptime_path, "/proc/uptime"); + + /* We tell the uptime function what values it should return */ + will_return(__wrap_uptime, 508.16); + will_return(__wrap_uptime, 72.23); + + /* We call the function like we would do it normally */ + uptime_str = calc_uptime(); + + /* Now lets check if the result is what we expect it to be */ + assert_non_null(uptime_str); + assert_string_equal(uptime_str, "up 8 minutes"); + + free(uptime_str); +} + +static void test_calc_uptime_hour_minute(void **state) +{ + char *uptime_str = NULL; + + UNUSED(state); + + /* Make sure the passed 'in' argument is correct */ + expect_string(__wrap_uptime, uptime_path, "/proc/uptime"); + + /* We tell the uptime function what values it should return */ + will_return(__wrap_uptime, 3699.16); + will_return(__wrap_uptime, 4069.23); + + /* We call the function like we would do it normally */ + uptime_str = calc_uptime(); + + /* Now lets check if the result is what we expect it to be */ + assert_non_null(uptime_str); + assert_string_equal(uptime_str, "up 1 hour, 1 minute"); + + free(uptime_str); +} + +static void test_calc_uptime_days_minutes(void **state) +{ + char *uptime_str = NULL; + + UNUSED(state); + + /* Make sure the passed 'in' argument is correct */ + expect_string(__wrap_uptime, uptime_path, "/proc/uptime"); + + /* We tell the uptime function what values it should return */ + will_return(__wrap_uptime, 259415.14); + will_return(__wrap_uptime, 262446.29); + + /* We call the function like we would do it normally */ + uptime_str = calc_uptime(); + + /* Now lets check if the result is what we expect it to be */ + assert_non_null(uptime_str); + assert_string_equal(uptime_str, "up 3 days, 3 minutes"); + + free(uptime_str); +} + +static void test_calc_uptime_days_hours_minutes(void **state) +{ + char *uptime_str = NULL; + + UNUSED(state); + + /* Make sure the passed 'in' argument is correct */ + expect_string(__wrap_uptime, uptime_path, "/proc/uptime"); + + /* We tell the uptime function what values it should return */ + will_return(__wrap_uptime, 359415.14); + will_return(__wrap_uptime, 362446.29); + + /* We call the function like we would do it normally */ + uptime_str = calc_uptime(); + + /* Now lets check if the result is what we expect it to be */ + assert_non_null(uptime_str); + assert_string_equal(uptime_str, "up 4 days, 3 hours, 50 minutes"); + + free(uptime_str); +} + +static void test_calc_uptime_null(void **state) +{ + char *uptime_str = NULL; + + UNUSED(state); + + /* Make sure the passed 'in' argument is correct */ + expect_string(__wrap_uptime, uptime_path, "/proc/uptime"); + + will_return(__wrap_uptime, -0.0); + will_return(__wrap_uptime, 0.1); + + uptime_str = calc_uptime(); + assert_null(uptime_str); +} + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_calc_uptime_minutes), + cmocka_unit_test(test_calc_uptime_hour_minute), + cmocka_unit_test(test_calc_uptime_days_minutes), + cmocka_unit_test(test_calc_uptime_days_hours_minutes), + cmocka_unit_test(test_calc_uptime_null), + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/example/uptime/uptime.c b/example/uptime/uptime.c new file mode 100644 index 0000000..77776a7 --- /dev/null +++ b/example/uptime/uptime.c @@ -0,0 +1,115 @@ +/* + * Copyright 2018 Andreas Scheider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <time.h> +#include <sys/time.h> + +#include "proc_uptime.h" + +static char *calc_uptime(void) +{ + uint32_t up_minutes, up_hours, up_days, up_weeks, up_years; + ssize_t pos = 0; + size_t comma = 0; + double uptime_secs, idle_secs; + char buf[1024] = {0}; + int up; + + up = uptime("/proc/uptime", &uptime_secs, &idle_secs); + if (up == 0) { + return NULL; + } + + up_years = ((uint32_t)uptime_secs / (60 * 60 * 24 * 365)) % 10; + up_weeks = ((uint32_t)uptime_secs / (60 * 60 * 24 * 7)) % 52; + up_days = ((uint32_t)uptime_secs / (60 * 60 * 24)) % 7; + + pos += snprintf(buf + pos, sizeof(buf) - pos, "up "); + + up_minutes = (uint32_t)uptime_secs / 60; + up_hours = up_minutes / 60; + up_hours = up_hours % 24; + up_minutes = up_minutes % 60; + + if (up_years > 0) { + pos += snprintf(buf + pos, sizeof(buf) - pos, + "%u %s", + up_years, + up_years > 1 ? "years" : "year"); + comma++; + } + + if (up_weeks > 0) { + pos += snprintf(buf + pos, sizeof(buf) - pos, + "%s%u %s", + comma > 0 ? ", " : "", + up_weeks, + up_weeks > 1 ? "weeks" : "week"); + comma++; + } + + if (up_days > 0) { + pos += snprintf(buf + pos, sizeof(buf) - pos, + "%s%u %s", + comma > 0 ? ", " : "", + up_days, + up_days > 1 ? "days" : "day"); + comma++; + } + + if (up_hours > 0) { + pos += snprintf(buf + pos, sizeof(buf) - pos, + "%s%u %s", + comma > 0 ? ", " : "", + up_hours, + up_hours > 1 ? "hours" : "hour"); + comma++; + } + + if (up_minutes > 0 || (up_minutes == 0 && uptime_secs < 60)) { + pos += snprintf(buf + pos, sizeof(buf) - pos, + "%s%u %s", + comma > 0 ? ", " : "", + up_minutes, + up_minutes != 1 ? "minutes" : "minute"); + comma++; + } + + return strdup(buf); +} + +#ifndef UNIT_TESTING +int main(void) +{ + char *uptime_str = NULL; + + uptime_str = calc_uptime(); + if (uptime_str == NULL) { + fprintf(stderr, "Failed to read uptime\n"); + return 1; + } + + printf("%s\n", uptime_str); + + free(uptime_str); + + return 0; +} +#endif /* UNIT_TESTING */ diff --git a/include/cmocka.h b/include/cmocka.h index 72d6ae2..e6861c8 100644 --- a/include/cmocka.h +++ b/include/cmocka.h @@ -1,5 +1,6 @@ /* * Copyright 2008 Google Inc. + * Copyright 2014-2018 Andreas Schneider <asn@cryptomilk.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,7 +57,7 @@ int __stdcall IsDebuggerPresent(); /* If __WORDSIZE is not set, try to figure it out and default to 32 bit. */ #ifndef __WORDSIZE -# if defined(__x86_64__) && !defined(__ILP32__) +# if (defined(__x86_64__) && !defined(__ILP32__)) || defined(__sparc_v9__) || defined(__sparcv9) # define __WORDSIZE 64 # else # define __WORDSIZE 32 @@ -1107,7 +1108,7 @@ void assert_return_code(int rc, int error); * @brief Assert that the given pointer is non-NULL. * * The function prints an error message to standard error and terminates the - * test by calling fail() if the pointer is non-NULL. + * test by calling fail() if the pointer is NULL. * * @param[in] pointer The pointer to evaluate. * @@ -1698,8 +1699,8 @@ static inline void _unit_test_dummy(void **state) { */ #define cmocka_unit_test_prestate_setup_teardown(f, setup, teardown, state) { #f, f, setup, teardown, state } -#define run_tests(tests) _run_tests(tests, sizeof(tests) / sizeof(tests)[0]) -#define run_group_tests(tests) _run_group_tests(tests, sizeof(tests) / sizeof(tests)[0]) +#define run_tests(tests) _run_tests(tests, sizeof(tests) / sizeof((tests)[0])) +#define run_group_tests(tests) _run_group_tests(tests, sizeof(tests) / sizeof((tests)[0])) #ifdef DOXYGEN /** @@ -1763,7 +1764,7 @@ int cmocka_run_group_tests(const struct CMUnitTest group_tests[], CMFixtureFunction group_teardown); #else # define cmocka_run_group_tests(group_tests, group_setup, group_teardown) \ - _cmocka_run_group_tests(#group_tests, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown) + _cmocka_run_group_tests(#group_tests, group_tests, sizeof(group_tests) / sizeof((group_tests)[0]), group_setup, group_teardown) #endif #ifdef DOXYGEN @@ -1832,7 +1833,7 @@ int cmocka_run_group_tests_name(const char *group_name, CMFixtureFunction group_teardown); #else # define cmocka_run_group_tests_name(group_name, group_tests, group_setup, group_teardown) \ - _cmocka_run_group_tests(group_name, group_tests, sizeof(group_tests) / sizeof(group_tests)[0], group_setup, group_teardown) + _cmocka_run_group_tests(group_name, group_tests, sizeof(group_tests) / sizeof((group_tests)[0]), group_setup, group_teardown) #endif /** @} */ @@ -2279,6 +2280,19 @@ enum cm_message_output { */ void cmocka_set_message_output(enum cm_message_output output); + +/** + * @brief Set a pattern to only run the test matching the pattern. + * + * This allows to filter tests and only run the ones matching the pattern. Thep + * pattern can include two wildards. The first is '*', a wildcard that matches + * zero or more characters, or ‘?’, a wildcard that matches exactly one + * character. + * + * @param[in] pattern The pattern to match, e.g. "test_wurst*" + */ +void cmocka_set_test_filter(const char *pattern); + /** @} */ #endif /* CMOCKA_H_ */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b5a3c7d..5732232 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,13 +3,13 @@ project(cmocka-library C) set(CMOCKA_PLATFORM_INCLUDE CACHE PATH "Path to include directory for cmocka_platform.h") set(CMOCKA_PUBLIC_INCLUDE_DIRS - ${CMAKE_SOURCE_DIR}/include + ${cmocka_SOURCE_DIR}/include ${CMOCKA_PLATFORM_INCLUDE} CACHE INTERNAL "cmocka public include directories" ) set(CMOCKA_PRIVATE_INCLUDE_DIRS - ${CMAKE_BINARY_DIR} + ${cmocka_BINARY_DIR} ) set(CMOCKA_SHARED_LIBRARY @@ -51,7 +51,7 @@ if (CMOCKA_PLATFORM_INCLUDE) endif() add_library(${CMOCKA_SHARED_LIBRARY} SHARED ${cmocka_SRCS}) - +target_compile_options(${CMOCKA_SHARED_LIBRARY} PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) target_link_libraries(${CMOCKA_SHARED_LIBRARY} ${CMOCKA_LINK_LIBRARIES}) set_target_properties( ${CMOCKA_SHARED_LIBRARY} @@ -83,6 +83,7 @@ install( if (WITH_STATIC_LIB) add_library(${CMOCKA_STATIC_LIBRARY} STATIC ${cmocka_SRCS}) + target_compile_options(${CMOCKA_STATIC_LIBRARY} PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) set_target_properties( ${CMOCKA_STATIC_LIBRARY} @@ -95,6 +96,15 @@ if (WITH_STATIC_LIB) cmocka ) + if (NOT WIN32) + set_target_properties( + ${CMOCKA_STATIC_LIBRARY} + PROPERTIES + OUTPUT_NAME + cmocka + ) + endif() + install( TARGETS ${CMOCKA_STATIC_LIBRARY} DESTINATION ${LIB_INSTALL_DIR} @@ -102,17 +112,19 @@ if (WITH_STATIC_LIB) ) endif (WITH_STATIC_LIB) -if (POLICY CMP0026) - cmake_policy(SET CMP0026 OLD) -endif() +if (WIN32) + if (POLICY CMP0026) + cmake_policy(SET CMP0026 OLD) + endif() # # In order to run tests we will need to set the approriate environment # variable so that the test program can locate its dependent DLL's. First # we want to know what directory our dependent DLL was installed into: # -get_target_property(_cmocka_dir cmocka_shared LOCATION_${CMOCKA_BUILD_TYPE}) -get_filename_component(_cmocka_path "${_cmocka_dir}" PATH) -file(TO_NATIVE_PATH "${_cmocka_path}" _cmocka_path_native) + get_target_property(_cmocka_dir cmocka_shared LOCATION_${CMOCKA_BUILD_TYPE}) + get_filename_component(_cmocka_path "${_cmocka_dir}" PATH) + file(TO_NATIVE_PATH "${_cmocka_path}" _cmocka_path_native) -set(CMOCKA_DLL_PATH "${_cmocka_path_native}" PARENT_SCOPE) + set(CMOCKA_DLL_PATH "${_cmocka_path_native}" PARENT_SCOPE) +endif() diff --git a/src/cmocka.c b/src/cmocka.c index f02e412..7a68fd8 100644 --- a/src/cmocka.c +++ b/src/cmocka.c @@ -1,6 +1,6 @@ /* * Copyright 2008 Google Inc. - * Copyright 2014-2015 Andreas Schneider <asn@cryptomilk.org> + * Copyright 2014-2018 Andreas Schneider <asn@cryptomilk.org> * Copyright 2015 Jakub Hrozek <jakub.hrozek@posteo.se> * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -148,12 +148,17 @@ typedef struct ListNode { } ListNode; /* Debug information for malloc(). */ -typedef struct MallocBlockInfo { +struct MallocBlockInfoData { void* block; /* Address of the block returned by malloc(). */ size_t allocated_size; /* Total size of the allocated block. */ size_t size; /* Request block size. */ SourceLocation location; /* Where the block was allocated. */ ListNode node; /* Node within list of all allocated blocks. */ +}; + +typedef union { + struct MallocBlockInfoData *data; + char *ptr; } MallocBlockInfo; /* State of each test. */ @@ -244,10 +249,10 @@ static void free_symbol_map_value( static void remove_always_return_values(ListNode * const map_head, const size_t number_of_symbol_names); -static int check_for_leftover_values_list(const ListNode * head, - const char * const error_message); +static size_t check_for_leftover_values_list(const ListNode * head, + const char * const error_message); -static int check_for_leftover_values( +static size_t check_for_leftover_values( const ListNode * const map_head, const char * const error_message, const size_t number_of_symbol_names); @@ -305,6 +310,8 @@ static CMOCKA_THREAD ListNode global_allocated_blocks; static enum cm_message_output global_msg_output = CM_OUTPUT_STDOUT; +static const char *global_test_filter_pattern; + #ifndef _WIN32 /* Signals caught by exception_handler(). */ static const int exception_signals[] = { @@ -453,7 +460,7 @@ static int c_strreplace(char *src, memmove(src + of + rl, src + of + pl, l - of - pl + 1); } - strncpy(src + of, repl, rl); + memcpy(src + of, repl, rl); if (str_replaced != NULL) { *str_replaced = 1; @@ -464,6 +471,64 @@ static int c_strreplace(char *src, return 0; } +static int c_strmatch(const char *str, const char *pattern) +{ + int ok; + + if (str == NULL || pattern == NULL) { + return 0; + } + + for (;;) { + /* Check if pattern is done */ + if (*pattern == '\0') { + /* If string is at the end, we're good */ + if (*str == '\0') { + return 1; + } + + return 0; + } + + if (*pattern == '*') { + /* Move on */ + pattern++; + + /* If we are at the end, everything is fine */ + if (*pattern == '\0') { + return 1; + } + + /* Try to match each position */ + for (; *str != '\0'; str++) { + ok = c_strmatch(str, pattern); + if (ok) { + return 1; + } + } + + /* No match */ + return 0; + } + + /* If we are at the end, leave */ + if (*str == '\0') { + return 0; + } + + /* Check if we have a single wildcard or matching char */ + if (*pattern != '?' && *str != *pattern) { + return 0; + } + + /* Move string and pattern */ + str++; + pattern++; + } + + return 0; +} + /* Create function results and expected parameter lists. */ void initialize_testing(const char *test_name) { (void)test_name; @@ -489,7 +554,8 @@ static void fail_if_leftover_values(const char *test_name) { remove_always_return_values(&global_function_parameter_map_head, 2); if (check_for_leftover_values( &global_function_parameter_map_head, - "%s parameter still has values that haven't been checked.\n", 2)) { + "'%s' parameter still has values that haven't been checked.\n", + 2)) { error_occurred = 1; } @@ -811,11 +877,11 @@ static void remove_always_return_values(ListNode * const map_head, } } -static int check_for_leftover_values_list(const ListNode * head, - const char * const error_message) +static size_t check_for_leftover_values_list(const ListNode * head, + const char * const error_message) { ListNode *child_node; - int leftover_count = 0; + size_t leftover_count = 0; if (!list_empty(head)) { for (child_node = head->next; child_node != head; @@ -835,11 +901,11 @@ static int check_for_leftover_values_list(const ListNode * head, * Checks if there are any leftover values set up by the test that were never * retrieved through execution, and fail the test if that is the case. */ -static int check_for_leftover_values( +static size_t check_for_leftover_values( const ListNode * const map_head, const char * const error_message, const size_t number_of_symbol_names) { const ListNode *current; - int symbols_with_leftover_values = 0; + size_t symbols_with_leftover_values = 0; assert_non_null(map_head); assert_true(number_of_symbol_names); @@ -865,7 +931,7 @@ static int check_for_leftover_values( location->file, location->line); } } else { - cm_print_error("%s.", value->symbol_name); + cm_print_error("%s: ", value->symbol_name); check_for_leftover_values(child_list, error_message, number_of_symbol_names - 1); } @@ -1187,19 +1253,24 @@ static int string_not_equal_display_error( */ static int memory_equal_display_error(const char* const a, const char* const b, const size_t size) { - int differences = 0; + size_t differences = 0; size_t i; for (i = 0; i < size; i++) { const char l = a[i]; const char r = b[i]; if (l != r) { - cm_print_error("difference at offset %" PRIdS " 0x%02x 0x%02x\n", - i, l, r); + if (differences < 16) { + cm_print_error("difference at offset %" PRIdS " 0x%02x 0x%02x\n", + i, l, r); + } differences ++; } } - if (differences) { - cm_print_error("%d bytes of %p and %p differ\n", + if (differences > 0) { + if (differences >= 16) { + cm_print_error("...\n"); + } + cm_print_error("%"PRIdS " bytes of %p and %p differ\n", differences, (void *)a, (void *)b); return 0; } @@ -1819,16 +1890,22 @@ static void vcm_free_error(char *err_msg) /* Use the real malloc in this function. */ #undef malloc void* _test_malloc(const size_t size, const char* file, const int line) { - char* ptr; - MallocBlockInfo *block_info; + char *ptr = NULL; + MallocBlockInfo block_info; ListNode * const block_list = get_allocated_blocks_list(); - const size_t allocate_size = size + (MALLOC_GUARD_SIZE * 2) + - sizeof(*block_info) + MALLOC_ALIGNMENT; - char* const block = (char*)malloc(allocate_size); + size_t allocate_size; + char *block = NULL; + + allocate_size = size + (MALLOC_GUARD_SIZE * 2) + + sizeof(struct MallocBlockInfoData) + MALLOC_ALIGNMENT; + assert_true(allocate_size > size); + + block = (char *)malloc(allocate_size); assert_non_null(block); /* Calculate the returned address. */ - ptr = (char*)(((size_t)block + MALLOC_GUARD_SIZE + sizeof(*block_info) + + ptr = (char*)(((size_t)block + MALLOC_GUARD_SIZE + + sizeof(struct MallocBlockInfoData) + MALLOC_ALIGNMENT) & ~(MALLOC_ALIGNMENT - 1)); /* Initialize the guard blocks. */ @@ -1836,14 +1913,14 @@ void* _test_malloc(const size_t size, const char* file, const int line) { memset(ptr + size, MALLOC_GUARD_PATTERN, MALLOC_GUARD_SIZE); memset(ptr, MALLOC_ALLOC_PATTERN, size); - block_info = (MallocBlockInfo*)(ptr - (MALLOC_GUARD_SIZE + - sizeof(*block_info))); - set_source_location(&block_info->location, file, line); - block_info->allocated_size = allocate_size; - block_info->size = size; - block_info->block = block; - block_info->node.value = block_info; - list_add(block_list, &block_info->node); + block_info.ptr = ptr - (MALLOC_GUARD_SIZE + + sizeof(struct MallocBlockInfoData)); + set_source_location(&block_info.data->location, file, line); + block_info.data->allocated_size = allocate_size; + block_info.data->size = size; + block_info.data->block = block; + block_info.data->node.value = block_info.ptr; + list_add(block_list, &block_info.data->node); return ptr; } #define malloc test_malloc @@ -1864,19 +1941,19 @@ void* _test_calloc(const size_t number_of_elements, const size_t size, void _test_free(void* const ptr, const char* file, const int line) { unsigned int i; char *block = discard_const_p(char, ptr); - MallocBlockInfo *block_info; + MallocBlockInfo block_info; if (ptr == NULL) { return; } _assert_true(cast_ptr_to_largest_integral_type(ptr), "ptr", file, line); - block_info = (MallocBlockInfo*)(block - (MALLOC_GUARD_SIZE + - sizeof(*block_info))); + block_info.ptr = block - (MALLOC_GUARD_SIZE + + sizeof(struct MallocBlockInfoData)); /* Check the guard blocks. */ { char *guards[2] = {block - MALLOC_GUARD_SIZE, - block + block_info->size}; + block + block_info.data->size}; for (i = 0; i < ARRAY_SIZE(guards); i++) { unsigned int j; char * const guard = guards[i]; @@ -1886,19 +1963,22 @@ void _test_free(void* const ptr, const char* file, const int line) { cm_print_error(SOURCE_LOCATION_FORMAT ": error: Guard block of %p size=%lu is corrupt\n" SOURCE_LOCATION_FORMAT ": note: allocated here at %p\n", - file, line, - ptr, (unsigned long)block_info->size, - block_info->location.file, block_info->location.line, + file, + line, + ptr, + (unsigned long)block_info.data->size, + block_info.data->location.file, + block_info.data->location.line, (void *)&guard[j]); _fail(file, line); } } } } - list_remove(&block_info->node, NULL, NULL); + list_remove(&block_info.data->node, NULL, NULL); - block = discard_const_p(char, block_info->block); - memset(block, MALLOC_FREE_PATTERN, block_info->allocated_size); + block = discard_const_p(char, block_info.data->block); + memset(block, MALLOC_FREE_PATTERN, block_info.data->allocated_size); free(block); } #define free test_free @@ -1909,7 +1989,7 @@ void *_test_realloc(void *ptr, const char *file, const int line) { - MallocBlockInfo *block_info; + MallocBlockInfo block_info; char *block = ptr; size_t block_size = size; void *new_block; @@ -1923,16 +2003,16 @@ void *_test_realloc(void *ptr, return NULL; } - block_info = (MallocBlockInfo*)(block - (MALLOC_GUARD_SIZE + - sizeof(*block_info))); + block_info.ptr = block - (MALLOC_GUARD_SIZE + + sizeof(struct MallocBlockInfoData)); new_block = _test_malloc(size, file, line); if (new_block == NULL) { return NULL; } - if (block_info->size < size) { - block_size = block_info->size; + if (block_info.data->size < size) { + block_size = block_info.data->size; } memcpy(new_block, ptr, block_size); @@ -1952,26 +2032,27 @@ static const ListNode* check_point_allocated_blocks(void) { /* Display the blocks allocated after the specified check point. This * function returns the number of blocks displayed. */ -static int display_allocated_blocks(const ListNode * const check_point) { +static size_t display_allocated_blocks(const ListNode * const check_point) { const ListNode * const head = get_allocated_blocks_list(); const ListNode *node; - int allocated_blocks = 0; + size_t allocated_blocks = 0; assert_non_null(check_point); assert_non_null(check_point->next); for (node = check_point->next; node != head; node = node->next) { - const MallocBlockInfo * const block_info = - (const MallocBlockInfo*)node->value; - assert_non_null(block_info); + const MallocBlockInfo block_info = { + .ptr = discard_const(node->value), + }; + assert_non_null(block_info.ptr); - if (!allocated_blocks) { + if (allocated_blocks == 0) { cm_print_error("Blocks allocated...\n"); } cm_print_error(SOURCE_LOCATION_FORMAT ": note: block %p allocated here\n", - block_info->location.file, - block_info->location.line, - block_info->block); - allocated_blocks ++; + block_info.data->location.file, + block_info.data->location.line, + block_info.data->block); + allocated_blocks++; } return allocated_blocks; } @@ -1987,9 +2068,13 @@ static void free_allocated_blocks(const ListNode * const check_point) { assert_non_null(node); while (node != head) { - MallocBlockInfo * const block_info = (MallocBlockInfo*)node->value; + const MallocBlockInfo block_info = { + .ptr = discard_const(node->value), + }; node = node->next; - free(discard_const_p(char, block_info) + sizeof(*block_info) + MALLOC_GUARD_SIZE); + free(discard_const_p(char, block_info.data) + + sizeof(struct MallocBlockInfoData) + + MALLOC_GUARD_SIZE); } } @@ -1997,10 +2082,10 @@ static void free_allocated_blocks(const ListNode * const check_point) { /* Fail if any any blocks are allocated after the specified check point. */ static void fail_if_blocks_allocated(const ListNode * const check_point, const char * const test_name) { - const int allocated_blocks = display_allocated_blocks(check_point); - if (allocated_blocks) { + const size_t allocated_blocks = display_allocated_blocks(check_point); + if (allocated_blocks > 0) { free_allocated_blocks(check_point); - cm_print_error("ERROR: %s leaked %d block(s)\n", test_name, + cm_print_error("ERROR: %s leaked %zu block(s)\n", test_name, allocated_blocks); exit_test(1); } @@ -2515,6 +2600,11 @@ void cmocka_set_message_output(enum cm_message_output output) global_msg_output = output; } +void cmocka_set_test_filter(const char *pattern) +{ + global_test_filter_pattern = pattern; +} + /**************************************************************************** * TIME CALCULATIONS ****************************************************************************/ @@ -2800,7 +2890,15 @@ int _cmocka_run_group_tests(const char *group_name, (tests[i].test_func != NULL || tests[i].setup_func != NULL || tests[i].teardown_func != NULL)) { - cm_tests[i] = (struct CMUnitTestState) { + if (global_test_filter_pattern != NULL) { + int ok; + + ok = c_strmatch(tests[i].name, global_test_filter_pattern); + if (!ok) { + continue; + } + } + cm_tests[total_tests] = (struct CMUnitTestState) { .test = &tests[i], .status = CM_TEST_NOT_STARTED, .state = NULL, @@ -2871,10 +2969,16 @@ int _cmocka_run_group_tests(const char *group_name, break; } } else { + char err_msg[2048] = {0}; + + snprintf(err_msg, sizeof(err_msg), + "Could not run test: %s", + cmtest->error_message); + cmprintf(PRINTF_TEST_ERROR, test_number, cmtest->test->name, - "Could not run the test - check test fixtures"); + err_msg); total_errors++; } } @@ -3178,11 +3282,20 @@ int _run_group_tests(const UnitTest * const tests, const size_t number_of_tests) size_t total_failed = 0; /* Check point of the heap state. */ const ListNode * const check_point = check_point_allocated_blocks(); - const char** failed_names = (const char**)malloc(number_of_tests * - sizeof(*failed_names)); + const char **failed_names = NULL; void **current_state = NULL; TestState group_state; + if (number_of_tests == 0) { + return -1; + } + + failed_names = (const char **)malloc(number_of_tests * + sizeof(*failed_names)); + if (failed_names == NULL) { + return -2; + } + /* Find setup and teardown function */ for (i = 0; i < number_of_tests; i++) { const UnitTest * const test = &tests[i]; diff --git a/src/cmocka.def b/src/cmocka.def index 43228c4..393c6da 100644 --- a/src/cmocka.def +++ b/src/cmocka.def @@ -38,7 +38,9 @@ EXPORTS _test_malloc _test_realloc _will_return + cm_print_error cmocka_set_message_output + cmocka_set_test_filter global_expect_assert_env global_expecting_assert global_last_failed_assert diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b1380de..2833c9f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,7 +3,7 @@ project(tests C) include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/include + ${cmocka-headers_SOURCE_DIR} ) set(CMOCKA_TESTS @@ -18,14 +18,17 @@ set(CMOCKA_TESTS test_exception_handler test_basics test_skip + test_strmatch test_setup_fail test_ordering test_ordering_fail test_returns - test_returns_fail) + test_returns_fail + test_wildcard) foreach(_CMOCKA_TEST ${CMOCKA_TESTS}) add_cmocka_test(${_CMOCKA_TEST} ${_CMOCKA_TEST}.c ${CMOCKA_STATIC_LIBRARY}) + target_compile_options(${_CMOCKA_TEST} PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) endforeach() ### Special Cases @@ -33,6 +36,7 @@ if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)") set_source_files_properties(test_cmockery.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations") endif() add_cmocka_test(test_cmockery test_cmockery.c ${CMOCKA_STATIC_LIBRARY}) +target_compile_options(test_cmockery PRIVATE ${DEFAULT_C_COMPILE_FLAGS}) ### Exceptions @@ -80,7 +84,7 @@ else() test_exception_handler PROPERTIES PASS_REGULAR_EXPRESSION - "Test failed with exception: (Segmentation fault|Segmentation Fault|11)" + "Test failed with exception: (Segmentation fault|Segmentation Fault|11|Illegal instruction)" ) endif (WIN32) @@ -171,7 +175,7 @@ set(test_groups_tap_out set(test_skip_tap_out "not ok 1 # SKIP") set(test_setup_fail_tap_out - "not ok 1 - int_test_ignored Could not run the test - check test fixtures") + "not ok 1 - int_test_ignored Could not run test: Test setup failed") set(test_basics_subunit_out "^test: null_test_success" @@ -185,7 +189,7 @@ set(test_skip_subunit_out "^test: test_check_skip" "skip: test_check_skip") set(test_setup_fail_subunit_out - "error: int_test_ignored \\[ Could not run the test - check test fixtures \\]") + "error: int_test_ignored \\[ Could not run test: Test setup failed \\]") set(test_basics_xml_out "<testsuite name=\"tests\" time=\"[0-9.]+\" tests=\"2\" failures=\"0\" errors=\"0\" skipped=\"0\" >" diff --git a/tests/cmocka_test.cmake b/tests/cmocka_test.cmake new file mode 100644 index 0000000..53ffcca --- /dev/null +++ b/tests/cmocka_test.cmake @@ -0,0 +1,229 @@ +# +# CTEST SCRIPT FOR CMOCKA TESTING +# + +# +# Running this script: +# +# ctest -S tests/cmocka_test.cmake \ +# -DCTEST_MODEL="Nightly" +# -DCTEST_SITE="host.cmocka.org" \ +# -DCTEST_TARGET_SYSTEM="Linux-openSUSE_Tumbleweed-x86_64" +# +# The Target system describes the target OS, version, architecture, etc. This +# parameter allows the testing script to choose appropriate configuration for +# CMake and build tools. +# +# The set of supported targets is defined by the project. +# +# The generic format for the Target system is <KIND>[-<NAME>][-<ARCH>], where +# +# <KIND> is one of Linux, Windows, MacOS, Android. +# <NAME> is an optional OS name and version, for example Fedora-28, Win10. +# <ARCH> is an optional architecture description, for example x86_64, ARM, ARM-Tegra5. +# +# To enable coverage, set: +# -DCTEST_WITH_COVERAGE=TRUE +# +# To enable dynamic analysis, set: +# -DCTEST_WITH_DYNAMIC_ANALYSIS=TRUE +# + +# +# 0. Set defaults +# +set(PROJECT_NAME "cmocka") +set(PROJECT_GIT_URL "https://git.cryptomilk.org/projects/cmocka.git") + +# +# 1. Include CText Ext module +# +if(NOT CTEST_EXT_INCLUDED) + function(download_ctest_ext) + message("Download latest version of CTest Extension module") + + find_package(Git QUIET) + + set(repo_url "https://github.com/jet47/ctest-ext.git") + set(repo_dir "${CMAKE_CURRENT_LIST_DIR}/ctest-ext") + set(tmp_dir "${CMAKE_CURRENT_LIST_DIR}/ctest-ext-tmp") + + if(NOT EXISTS "${repo_dir}") + set(CTEST_CHECKOUT_COMMAND "${GIT_EXECUTABLE} clone ${repo_url} ${repo_dir}") + endif() + set(CTEST_UPDATE_COMMAND "${GIT_EXECUTABLE}") + + ctest_start("CTestExt" "${repo_dir}" "${tmp_dir}") + ctest_update(SOURCE "${repo_dir}") + + file(REMOVE_RECURSE "${tmp_dir}") + + set(CTEST_EXT_MODULE_PATH "${repo_dir}" PARENT_SCOPE) + endfunction() + + if(NOT DEFINED CTEST_EXT_MODULE_PATH) + if(DEFINED ENV{CTEST_EXT_MODULE_PATH} AND EXISTS "$ENV{CTEST_EXT_MODULE_PATH}/ctest_ext.cmake") + set(CTEST_EXT_MODULE_PATH "$ENV{CTEST_EXT_MODULE_PATH}") + elseif(EXISTS "${CMAKE_CURRENT_LIST_DIR}/ctest-ext/ctest_ext.cmake") + set(CTEST_EXT_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/ctest-ext") + else() + download_ctest_ext() + endif() + endif() + + include("${CTEST_EXT_MODULE_PATH}/ctest_ext.cmake") +endif() + +# +# 2. Initialize CTest Ext module +# +set_ifndef(CTEST_PROJECT_NAME ${PROJECT_NAME}) + +set_ifndef(CTEST_PROJECT_GIT_URL ${PROJECT_GIT_URL}) +set_ifndef(CTEST_WITH_UPDATE TRUE) + +ctest_ext_init() + +# +# 3. Configure project for testing +# + +# Check supported targets and models +check_if_matches(CTEST_TARGET_SYSTEM "^Linux" "^Windows") +check_if_matches(CTEST_MODEL "^Experimental$" "^Nightly$" "^Continuous$" "^Release$" "^Documentation$") + +# Checks for Continuous model +set(IS_CONTINUOUS FALSE) +if(CTEST_MODEL MATCHES "Continuous") + set(IS_CONTINUOUS TRUE) +endif() + +set(IS_BINARY_EMPTY FALSE) +if(NOT EXISTS "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt") + set(IS_BINARY_EMPTY TRUE) +endif() + +if(IS_CONTINUOUS AND NOT IS_BINARY_EMPTY AND NOT HAVE_UPDATES) + ctest_ext_info("Continuous model : no updates") + return() +endif() + +# Configure the testing model +set_ifndef(CTEST_WITH_SUBMIT TRUE) + +if(CTEST_MODEL MATCHES "Documentation") + set_ifndef(CTEST_WITH_TESTS FALSE) +else() + set_ifndef(CTEST_WITH_TESTS TRUE) +endif() + + +set_ifndef(CTEST_WITH_COVERAGE FALSE) +if (CTEST_WITH_COVERAGE) + set_ifndef(CTEST_COVERAGE_TOOL "CDASH") +endif() + +set_ifndef(CTEST_WITH_DYNAMIC_ANALYSIS FALSE) +if (CTEST_WITH_DYNAMIC_ANALYSIS) + set_ifndef(CTEST_DYNAMIC_ANALYSIS_TOOL "CDASH") +endif() + + +if(CTEST_MODEL MATCHES "Continuous") + set_ifndef(CTEST_EMPTY_BINARY_DIRECTORY FALSE) +else() + set_ifndef(CTEST_EMPTY_BINARY_DIRECTORY TRUE) +endif() + +# Set CMake options +if(CTEST_TARGET_SYSTEM MATCHES "Windows") + if(CTEST_TARGET_SYSTEM MATCHES "64") + set_ifndef(CTEST_CMAKE_GENERATOR "Visual Studio 13 Win64") + else() + set_ifndef(CTEST_CMAKE_GENERATOR "Visual Studio 13") + endif() +else() + set_ifndef(CTEST_CMAKE_GENERATOR "Unix Makefiles") +endif() + +if(CTEST_MODEL MATCHES "(Release|Continuous)") + set_ifndef(CTEST_CONFIGURATION_TYPE "Release") +else() + set_ifndef(CTEST_CONFIGURATION_TYPE "Debug") +endif() + +### Add project default build options here !!! + +add_cmake_cache_entry(UNIT_TESTING ON) +add_cmake_cache_entry(WITH_CMOCKERY_SUPPORT ON) + +### Add project default build options here ^^^ + +add_cmake_cache_entry("ENABLE_CTEST" TYPE "BOOL" "ON") + +if(CTEST_WITH_COVERAGE) + add_cmake_cache_entry("ENABLE_COVERAGE" TYPE "BOOL" "ON") +else() + add_cmake_cache_entry("ENABLE_COVERAGE" TYPE "BOOL" "OFF") +endif() + +if(CTEST_MODEL MATCHES "Documentation") + add_cmake_cache_entry("BUILD_DOCS" TYPE "BOOL" "ON") +endif() + +if(CTEST_MODEL MATCHES "Release") + if(CTEST_TARGET_SYSTEM MATCHES "Windows") + add_cmake_cache_entry("CPACK_GENERATOR" TYPE "STRING" "ZIP") + else() + add_cmake_cache_entry("CPACK_GENERATOR" TYPE "STRING" "TGZ") + endif() +endif() + +# +# 4. Start testing, configure and build project +# +ctest_ext_start() + +ctest_ext_configure() + +if(CTEST_MODEL MATCHES "Release") + ctest_ext_build(TARGETS "ALL" "package") +elseif(CTEST_MODEL MATCHES "Documentation") + ctest_ext_build(TARGET "docs") +else() + ctest_ext_build() +endif() + +# +# 5. Run tests +# +if(CTEST_MODEL MATCHES "Nightly") + ctest_ext_test(INCLUDE_LABEL "Full") +else() + ctest_ext_test(EXCLUDE_LABEL "Light") +endif() + +ctest_ext_coverage( + CDASH + LABELS "Module" +) + +ctest_ext_dynamic_analysis( + CDASH + INCLUDE_LABEL "Light" +) + +# +# 6. Submit results to remote server +# +if(CTEST_MODEL MATCHES "Release") + if(CTEST_TARGET_SYSTEM MATCHES "Windows") + file(GLOB packages "${CTEST_BINARY_DIRECTORY}/*.zip") + else() + file(GLOB packages "${CTEST_BINARY_DIRECTORY}/*.tar.gz") + endif() + + list(APPEND CTEST_UPLOAD_FILES ${packages}) +endif() + +ctest_ext_submit() diff --git a/tests/test_exception_handler.c b/tests/test_exception_handler.c index 3f7c181..5652095 100644 --- a/tests/test_exception_handler.c +++ b/tests/test_exception_handler.c @@ -19,11 +19,26 @@ static void test_segfault_recovery(void **state) s->x = 1; } +static void test_segfault_recovery1(void **state) +{ + test_segfault_recovery(state); +} + +static void test_segfault_recovery2(void **state) +{ + test_segfault_recovery(state); +} + +static void test_segfault_recovery3(void **state) +{ + test_segfault_recovery(state); +} + int main(void) { const struct CMUnitTest tests[] = { - cmocka_unit_test(test_segfault_recovery), - cmocka_unit_test(test_segfault_recovery), - cmocka_unit_test(test_segfault_recovery), + cmocka_unit_test(test_segfault_recovery1), + cmocka_unit_test(test_segfault_recovery2), + cmocka_unit_test(test_segfault_recovery3), }; return cmocka_run_group_tests(tests, NULL, NULL); diff --git a/tests/test_strmatch.c b/tests/test_strmatch.c new file mode 100644 index 0000000..f2d966b --- /dev/null +++ b/tests/test_strmatch.c @@ -0,0 +1,99 @@ +/* + * Copyright 2018 Andreas Schneider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "config.h" + +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#include "../src/cmocka.c" + +static void test_strmatch_null(void **state) +{ + int rc; + + (void)state; + + rc = c_strmatch(NULL, NULL); + assert_int_equal(rc, 0); + + rc = c_strmatch("", NULL); + assert_int_equal(rc, 0); + + rc = c_strmatch(NULL, ""); + assert_int_equal(rc, 0); +} + +static void test_strmatch_empty(void **state) +{ + int rc; + + (void)state; + + rc = c_strmatch("", ""); + assert_int_equal(rc, 1); + + rc = c_strmatch("wurst", ""); + assert_int_equal(rc, 0); + + rc = c_strmatch("", "wurst"); + assert_int_equal(rc, 0); +} + +static void test_strmatch_single(void **state) +{ + int rc; + + (void)state; + + rc = c_strmatch("wurst", "wurs?"); + assert_int_equal(rc, 1); + + rc = c_strmatch("wurst", "w?rs?"); + assert_int_equal(rc, 1); + + rc = c_strmatch("wurst", "wur?"); + assert_int_equal(rc, 0); +} + +static void test_strmatch_wildcard(void **state) +{ + int rc; + + (void)state; + + rc = c_strmatch("wurst", "wurst*"); + assert_int_equal(rc, 1); + + rc = c_strmatch("wurstbrot", "wurst*"); + assert_int_equal(rc, 1); + + rc = c_strmatch("wurstbrot", "w*t"); + assert_int_equal(rc, 1); +} + +int main(void) { + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_strmatch_null), + cmocka_unit_test(test_strmatch_empty), + cmocka_unit_test(test_strmatch_single), + cmocka_unit_test(test_strmatch_wildcard), + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/test_wildcard.c b/tests/test_wildcard.c new file mode 100644 index 0000000..10ee195 --- /dev/null +++ b/tests/test_wildcard.c @@ -0,0 +1,53 @@ +/* + * Copyright 2018 Andreas Schneider <asn@cryptomilk.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +static void test_ok1(void **state) +{ + (void)state; + + assert_true(1); +} + +static void test_ok2(void **state) +{ + (void)state; + + assert_true(1); +} + +static void test_fail(void **state) +{ + (void)state; + + assert_false(1); +} + +int main(void) { + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_ok1), + cmocka_unit_test(test_ok2), + cmocka_unit_test(test_fail), + }; + + cmocka_set_test_filter("test_ok*"); + + return cmocka_run_group_tests(tests, NULL, NULL); +} |