From 466caeab6379f540f816aefb0ff00fe71fceb895 Mon Sep 17 00:00:00 2001 From: pantor Date: Sun, 8 Sep 2019 17:06:09 +0200 Subject: [PATCH] improve documentation --- .github/workflows/documentation.yml | 2 +- doc/Doxyfile | 13 +++++++------ doc/logo-doxygen.jpg | Bin 0 -> 11950 bytes doc/support.md | 3 +++ include/inja/config.hpp | 6 ++++++ include/inja/environment.hpp | 3 +++ include/inja/function_storage.hpp | 3 +++ include/inja/lexer.hpp | 3 +++ include/inja/parser.hpp | 3 +++ include/inja/renderer.hpp | 3 +++ include/inja/template.hpp | 3 +++ include/inja/token.hpp | 3 +++ 12 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 doc/logo-doxygen.jpg create mode 100644 doc/support.md diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 25fc853..cddd438 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -7,7 +7,7 @@ on: jobs: build-deploy: - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@master diff --git a/doc/Doxyfile b/doc/Doxyfile index 1e26a59..9da5c41 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Inja" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2.0.0 +PROJECT_NUMBER = 2.1.0 # 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 @@ -51,7 +51,7 @@ PROJECT_BRIEF = "A Template Engine for Modern C++" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = "./logo.jpg" +PROJECT_LOGO = "./logo-doxygen.jpg" # 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 @@ -792,7 +792,8 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = ../include/inja \ - ../README.md + ../README.md \ + support.md # 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 @@ -908,7 +909,7 @@ EXCLUDE_SYMBOLS = stdinja # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = ./examples # 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 @@ -922,7 +923,7 @@ EXAMPLE_PATTERNS = * # irrespective of the value of the RECURSIVE tag. # The default value is: NO. -EXAMPLE_RECURSIVE = 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 @@ -1657,7 +1658,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # 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 diff --git a/doc/logo-doxygen.jpg b/doc/logo-doxygen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e318fbec6f3852ae711cb14e265539a880c385cc GIT binary patch literal 11950 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 using CallbackFunction = std::function; +/*! + * \brief Class for builtin functions and user-defined callbacks. + */ class FunctionStorage { public: void add_builtin(nonstd::string_view name, unsigned int num_args, Bytecode::Op op) { diff --git a/include/inja/lexer.hpp b/include/inja/lexer.hpp index ebad0f7..28d5b89 100644 --- a/include/inja/lexer.hpp +++ b/include/inja/lexer.hpp @@ -11,6 +11,9 @@ namespace inja { +/*! + * \brief Class for lexing an inja Template. + */ class Lexer { enum class State { Text, diff --git a/include/inja/parser.hpp b/include/inja/parser.hpp index 9992ea4..cc80535 100644 --- a/include/inja/parser.hpp +++ b/include/inja/parser.hpp @@ -58,6 +58,9 @@ class ParserStatic { FunctionStorage functions; }; +/*! + * \brief Class for parsing an inja Template. + */ class Parser { public: explicit Parser(const ParserConfig& parser_config, const LexerConfig& lexer_config, TemplateStorage& included_templates): m_config(parser_config), m_lexer(lexer_config), m_included_templates(included_templates), m_static(ParserStatic::get_instance()) { } diff --git a/include/inja/renderer.hpp b/include/inja/renderer.hpp index 2266c9a..4cd530d 100644 --- a/include/inja/renderer.hpp +++ b/include/inja/renderer.hpp @@ -24,6 +24,9 @@ inline nonstd::string_view convert_dot_to_json_pointer(nonstd::string_view dot, return nonstd::string_view(out.data(), out.size()); } +/*! + * \brief Class for rendering a Template with data. + */ class Renderer { std::vector& get_args(const Bytecode& bc) { m_tmp_args.clear(); diff --git a/include/inja/template.hpp b/include/inja/template.hpp index 2e171e1..b3c77db 100644 --- a/include/inja/template.hpp +++ b/include/inja/template.hpp @@ -9,6 +9,9 @@ namespace inja { +/*! + * \brief The main inja Template. + */ struct Template { std::vector bytecodes; std::string content; diff --git a/include/inja/token.hpp b/include/inja/token.hpp index f979e24..5755956 100644 --- a/include/inja/token.hpp +++ b/include/inja/token.hpp @@ -6,6 +6,9 @@ namespace inja { +/*! + * \brief Helper-class for the inja Parser. + */ struct Token { enum class Kind { Text,