Files
clang-uml/docs/test_cases/t00050.md
2023-03-05 11:41:16 +01:00

6.0 KiB

t00050 - Test case for generating notes from comments using jinja templates

Config

compilation_database_dir: ..
output_directory: puml
diagrams:
  t00050_class:
    type: class
    glob:
      - ../../tests/t00050/t00050.cc
    comment_parser: clang
    include:
      namespaces:
        - clanguml::t00050
    using_namespace: clanguml::t00050
    plantuml:
      after:
        - >
          note left of {{ alias("NoSuchClass") }}
             {{ comment("NoSuchClass").formatted }}
          end note
        - >
          note left of {{ alias("A") }}
             {{ comment("clanguml::t00050::A").formatted }}
          end note
        - >
          note right of {{ element("clanguml::t00050::A").alias }}
             {% set e=element("clanguml::t00050::A") %} {{ e.comment.formatted }}          
          end note
        - >
          note left of {{ alias("C") }} #AABBCC                 
             {{ trim(comment("clanguml::t00050::C").text) }}          
          end note
        - >
          {% set cmt=comment("clanguml::t00050::G").paragraph %}
          note top of {{ alias("G") }}
             {{ trim(cmt.0) }}
          end note

          note right of {{ alias("G") }}
             {{ trim(cmt.1) }}
          end note

          note bottom of {{ alias("G") }}
             {{ trim(cmt.2) }}
          end note
        - >
          {# Render brief comments and todos, if any were written for an element #}
          {% for e in diagram.elements %}
          {% if existsIn(e, "comment") and existsIn(e.comment, "brief") %}
  
          note top of {{ e.alias }} {% if e.type == "class" %} #22AA22 {% else %} #2222AA {% endif %}
             {% set c=e.comment %} {{ c.brief.0 }}
          end note
          
          {% endif %}
          {% if existsIn(e, "comment") and existsIn(e.comment, "todo") %}
          {% set c=e.comment %} 
          {% for t in c.todo %}
          note top of {{ e.alias }} #882222           
             **TODO**
             {{ t }}
          end note
          
          {% endfor %}

          {% endif %}
          {# Render template paramete if any #}
          {% if existsIn(e, "comment") and existsIn(e.comment, "tparam") %}
          {% set c=e.comment %} 

          note top of {{ e.alias }} #AAAAFF           
             **Template parameters**
             {% for tp in c.tparam %}
             //{{ tp.name }}// {{ trim(tp.description) }}        
             {% endfor %}
          end note

          {% endif %}
          {% endfor %}

Source code

File t00050.cc

namespace clanguml {

/// Vivamus integer non suscipit taciti mus
class A { };

namespace t00050 {

/// Lorem ipsum dolor sit
class A { };

/**
 * \brief Lorem ipsum
 *
 * Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis
 * vehicula class ultricies mollis dictumst, aenean non a in donec nulla.
 * Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam,
 * integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora
 * tellus ligula porttitor metus.
 *
 * \todo 1. Write meaningful comment
 * \todo 2. Write tests
 * \todo 3. Implement
 */
class B { };

/// \brief Long comment example
///
/// Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis
/// vehicula class ultricies mollis dictumst, aenean non a in donec nulla.
/// Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam,
/// integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora
/// tellus ligula porttitor metus.
///
/// Vivamus integer non suscipit taciti mus etiam at primis tempor sagittis sit,
/// euismod libero facilisi aptent elementum felis blandit cursus gravida sociis
/// erat ante, eleifend lectus nullam dapibus netus feugiat curae curabitur est
/// ad. Massa curae fringilla porttitor quam sollicitudin iaculis aptent leo
/// ligula euismod dictumst, orci penatibus mauris eros etiam praesent erat
/// volutpat posuere hac. Metus fringilla nec ullamcorper odio aliquam lacinia
/// conubia mauris tempor, etiam ultricies proin quisque lectus sociis id
/// tristique, integer phasellus taciti pretium adipiscing tortor sagittis
/// ligula.
///
/// Mollis pretium lorem primis senectus habitasse lectus scelerisque
/// donec, ultricies tortor suspendisse adipiscing fusce morbi volutpat
/// pellentesque, consectetur mi risus molestie curae malesuada cum. Dignissim
/// lacus convallis massa mauris enim ad mattis magnis senectus montes, mollis
/// taciti phasellus accumsan bibendum semper blandit suspendisse faucibus nibh
/// est, metus lobortis morbi cras magna vivamus per risus fermentum. Dapibus
/// imperdiet praesent magnis ridiculus congue gravida curabitur dictum
/// sagittis, enim et magna sit inceptos sodales parturient pharetra mollis,
/// aenean vel nostra tellus commodo pretium sapien sociosqu.
class C { };

/// Mollis pretium lorem primis
namespace utils {

/// Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis
/// vehicula class ultricies mollis dictumst, aenean non a in donec nulla.
/// Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam,
/// integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora
/// tellus ligula porttitor metus.
///
/// \todo Implement...
class D { };

} // namespace utils

/// Mollis pretium lorem primis
enum class E { E1, E2, E3 };

/// \brief Simple array wrapper.
///
/// This class is just for testing tparam parsing, it serves no other
/// purpose.
///
/// \tparam T Type of array elements.
/// \tparam V Type of regular element.
/// \tparam N Size of T array.
///
template <typename T, typename V, int N> class F {
    T t[N];
    V v;
};

/// This is a short description of class G.
///
/// This is an intermediate description of class G.
///
/// This is a long description of class G.
class G { };

class NoComment { };

} // namespace t00050
} // namespace clanguml

Generated UML diagrams

t00050_class