# t00050 - Test case for generating notes from comments using jinja templates ## Config ```yaml 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 ```cpp 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 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](./t00050_class.svg "Test case for generating notes from comments using jinja templates")