« Return to Thread: Splitting dot graphs

Splitting dot graphs

by A. S. Budden :: Rate this Message:

| View in Thread

Dear all,

I'd like to include some state machine graphs in my source code.  To
avoid long large comments and to keep the comments near the relevant
code, I'd like to split the @dot section into multiple comment blocks,
but this doesn't seem to work.  Is there any way around this
limitation?

An example is pasted below, or alternatively the one that works is at:

http://gataki.co.uk/doxy/module.html

and the one I'd like to work is at:

http://gataki.co.uk/doxy/module_alternate.html

The error message I'm getting is as follows:

c:/testdoxy/module.c:22: Warning: found */ without matching /* while
inside a \dot block! Perhaps a missing \enddot?

Is this at all possible?

Al


I'd like to replace this:

=========================================
/**
 * Run the state machine.
 *
 * @return Status.
 *
 * @dot
 * digraph {
 *     Module_RunStateMachine [label="Module_RunStateMachine()"];
 *     MODULE_InitialSTATE [label="Initial"];
 *     MODULE_DoSomethingSTATE [label="Do Something"];
 *     MODULE_DoneSomethingSTATE [label="Done Something"];
 *     MODULE_CompleteSTATE [label="Complete"];
 *     PortIsHigh [label="Port Risen?" shape="diamond"];
 *     PortIsZero [label="Port Zero?" shape="diamond"];
 *
 *     Module_RunStateMachine:s -> MODULE_InitialSTATE:n
 *     MODULE_InitialSTATE:s -> MODULE_DoSomethingSTATE:n;
 *     MODULE_DoSomethingSTATE:s -> PortIsHigh:n;
 *     PortIsHigh:e -> MODULE_DoSomethingSTATE:e [label="No"];
 *     PortIsHigh:s -> MODULE_DoneSomethingSTATE:n [label="Yes"];
 *     MODULE_DoneSomethingSTATE:s -> PortIsZero:n;
 *     PortIsZero:e -> MODULE_DoneSomethingSTATE:e [label="No"];
 *     PortIsZero:s -> MODULE_CompleteSTATE:n [label="Yes"];
 * }
 * @enddot
 */
Module_OperationTYPE Module_RunStateMachine(void)
{
        static Module_StateTYPE seState = MODULE_InitialSTATE;
        u8 u8PortRead = Module_ReadValueFromSomewhere();

        switch (MODULE_InitialSTATE)
        {
                case MODULE_InitialSTATE:
                        seState = MODULE_DoSomethingSTATE;
                        break;

                case MODULE_DoSomethingSTATE:
                        if (u8PortRead > MODULE_u8Value)
                        {
                                seState = MODULE_DoneSomethingSTATE;
                        }
                        break;

                case MODULE_DoneSomethingSTATE:
                        if (u8PortRead == 0)
                        {
                                seState = MODULE_CompleteSTATE;
                                return MODULE_Success;
                        }
                        break;

                case MODULE_CompleteSTATE:
                default:
                        seState = MODULE_InitialSTATE;
        }

        return MODULE_Pending;
}
=========================================

with this:

=========================================
/**
 * Run the state machine.
 *
 * @return Status.
 */
Module_OperationTYPE Module_RunStateMachine(void)
{
        static Module_StateTYPE seState = MODULE_InitialSTATE;
        u8 u8PortRead = Module_ReadValueFromSomewhere();

        /**
         * @dot
         * digraph {
         *     Module_RunStateMachine [label="Module_RunStateMachine()"];
         *     Module_RunStateMachine:s -> MODULE_InitialSTATE:n
         */
        switch (MODULE_InitialSTATE)
        {
                case MODULE_InitialSTATE:
                        /**
                         * MODULE_InitialSTATE [label="Initial"];
                         * MODULE_InitialSTATE:s -> MODULE_DoSomethingSTATE:n;
                         */
                        seState = MODULE_DoSomethingSTATE;
                        break;

                case MODULE_DoSomethingSTATE:
                        /**
                         * MODULE_DoSomethingSTATE [label="Do Something"];
                         * MODULE_DoSomethingSTATE:s -> PortIsHigh:n;
                         * PortIsHigh [label="Port Risen?" shape="diamond"];
                         * PortIsHigh:e -> MODULE_DoSomethingSTATE:e [label="No"];
                         * PortIsHigh:s -> MODULE_DoneSomethingSTATE:n [label="Yes"];
                         */
                        if (u8PortRead > MODULE_u8Value)
                        {
                                seState = MODULE_DoneSomethingSTATE;
                        }
                        break;

                case MODULE_DoneSomethingSTATE:
                        /**
                         * MODULE_DoneSomethingSTATE [label="Done Something"];
                         * PortIsZero [label="Port Zero?" shape="diamond"];
                         * MODULE_DoneSomethingSTATE:s -> PortIsZero:n;
                         * PortIsZero:e -> MODULE_DoneSomethingSTATE:e [label="No"];
                         * PortIsZero:s -> MODULE_CompleteSTATE:n [label="Yes"];
                         */
                        if (u8PortRead == 0)
                        {
                                seState = MODULE_CompleteSTATE;
                                return MODULE_Success;
                        }
                        break;

                case MODULE_CompleteSTATE:
                        /** MODULE_CompleteSTATE [label="Complete"]; */
                default:
                        seState = MODULE_InitialSTATE;
        }
        /**
         * }
         * @enddot
         */

        return MODULE_Pending;
}
=========================================

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Doxygen-users mailing list
Doxygen-users@...
https://lists.sourceforge.net/lists/listinfo/doxygen-users

 « Return to Thread: Splitting dot graphs