From 36fc2a366d768fde153b883e7f19f0b7e230d710 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sat, 1 May 2004 22:45:34 +0000 Subject: [PATCH] List private, protected, and public members of the class separately. --- mxmldoc.c | 141 ++++++++++++++++++++++++++----------------------- test/class.cxx | 29 ++++++++-- 2 files changed, 102 insertions(+), 68 deletions(-) diff --git a/mxmldoc.c b/mxmldoc.c index 4189107..e58fd34 100644 --- a/mxmldoc.c +++ b/mxmldoc.c @@ -1,5 +1,5 @@ /* - * "$Id: mxmldoc.c,v 1.33 2004/05/01 15:20:05 mike Exp $" + * "$Id: mxmldoc.c,v 1.34 2004/05/01 22:45:34 mike Exp $" * * Documentation generator using mini-XML, a small XML-like file parsing * library. @@ -1717,6 +1717,7 @@ update_comment(mxml_node_t *parent, /* I - Parent node */ static void write_documentation(mxml_node_t *doc) /* I - XML documentation */ { + int i; /* Looping var */ mxml_node_t *function, /* Current function */ *scut, /* Struct/class/union/typedef */ *arg, /* Current argument */ @@ -1725,9 +1726,15 @@ write_documentation(mxml_node_t *doc) /* I - XML documentation */ const char *name, /* Name of function/type */ *cname, /* Class name */ *defval, /* Default value */ - *parent, /* Parent class */ - *scope; /* Variable/method scope */ + *parent; /* Parent class */ + int inscope; /* Variable/method scope */ char prefix; /* Prefix character */ + static const char * const scopes[] = /* Scope strings */ + { + "private", + "protected", + "public" + }; /* @@ -1820,83 +1827,87 @@ write_documentation(mxml_node_t *doc) /* I - XML documentation */ if ((parent = mxmlElementGetAttr(scut, "parent")) != NULL) printf(" %s", parent); puts("\n{"); - scope = ""; - for (arg = mxmlFindElement(scut, scut, "variable", NULL, NULL, - MXML_DESCEND_FIRST); - arg; - arg = mxmlFindElement(arg, scut, "variable", NULL, NULL, - MXML_NO_DESCEND)) + for (i = 0; i < 3; i ++) { - if (strcmp(scope, mxmlElementGetAttr(arg, "scope"))) - { - scope = mxmlElementGetAttr(arg, "scope"); - printf(" %s:\n", scope); - } + inscope = 0; - printf(" "); - write_element(doc, mxmlFindElement(arg, arg, "type", NULL, - NULL, MXML_DESCEND_FIRST)); - printf(" %s;\n", mxmlElementGetAttr(arg, "name")); - } - - for (function = mxmlFindElement(scut, scut, "function", NULL, NULL, - MXML_DESCEND_FIRST); - function; - function = mxmlFindElement(function, scut, "function", NULL, NULL, - MXML_NO_DESCEND)) - { - if (strcmp(scope, mxmlElementGetAttr(function, "scope"))) + for (arg = mxmlFindElement(scut, scut, "variable", "scope", scopes[i], + MXML_DESCEND_FIRST); + arg; + arg = mxmlFindElement(arg, scut, "variable", "scope", scopes[i], + MXML_NO_DESCEND)) { - scope = mxmlElementGetAttr(function, "scope"); - printf(" %s:\n", scope); - } - - name = mxmlElementGetAttr(function, "name"); - - printf(" "); - - arg = mxmlFindElement(function, function, "returnvalue", NULL, - NULL, MXML_DESCEND_FIRST); + if (!inscope) + { + inscope = 1; + printf(" %s:\n", scopes[i]); + } - if (arg) - { + printf(" "); write_element(doc, mxmlFindElement(arg, arg, "type", NULL, NULL, MXML_DESCEND_FIRST)); - putchar(' '); + printf(" %s;\n", mxmlElementGetAttr(arg, "name")); } - else if (strcmp(cname, name) && strcmp(cname, name + 1)) - fputs("void ", stdout); - - printf("%s", cname, name, name); - for (arg = mxmlFindElement(function, function, "argument", NULL, NULL, - MXML_DESCEND_FIRST), prefix = '('; - arg; - arg = mxmlFindElement(arg, function, "argument", NULL, NULL, - MXML_NO_DESCEND), prefix = ',') + for (function = mxmlFindElement(scut, scut, "function", "scope", scopes[i], + MXML_DESCEND_FIRST); + function; + function = mxmlFindElement(function, scut, "function", "scope", scopes[i], + MXML_NO_DESCEND)) { - type = mxmlFindElement(arg, arg, "type", NULL, NULL, - MXML_DESCEND_FIRST); + if (!inscope) + { + inscope = 1; + printf(" %s:\n", scopes[i]); + } - putchar(prefix); - if (prefix == ',') - putchar(' '); + name = mxmlElementGetAttr(function, "name"); - if (type->child) + printf(" "); + + arg = mxmlFindElement(function, function, "returnvalue", NULL, + NULL, MXML_DESCEND_FIRST); + + if (arg) { - write_element(doc, type); + write_element(doc, mxmlFindElement(arg, arg, "type", NULL, + NULL, MXML_DESCEND_FIRST)); putchar(' '); } - fputs(mxmlElementGetAttr(arg, "name"), stdout); - if ((defval = mxmlElementGetAttr(arg, "default")) != NULL) - printf(" %s", defval); - } + else if (strcmp(cname, name) && strcmp(cname, name + 1)) + fputs("void ", stdout); - if (prefix == '(') - puts("(void);"); - else - puts(");"); + printf("%s", cname, name, name); + + for (arg = mxmlFindElement(function, function, "argument", NULL, NULL, + MXML_DESCEND_FIRST), prefix = '('; + arg; + arg = mxmlFindElement(arg, function, "argument", NULL, NULL, + MXML_NO_DESCEND), prefix = ',') + { + type = mxmlFindElement(arg, arg, "type", NULL, NULL, + MXML_DESCEND_FIRST); + + putchar(prefix); + if (prefix == ',') + putchar(' '); + + if (type->child) + { + write_element(doc, type); + putchar(' '); + } + fputs(mxmlElementGetAttr(arg, "name"), stdout); + if ((defval = mxmlElementGetAttr(arg, "default")) != NULL) + printf(" %s", defval); + } + + if (prefix == '(') + puts("(void);"); + else + puts(");"); + } } puts("};\n"); @@ -2697,5 +2708,5 @@ ws_cb(mxml_node_t *node, /* I - Element node */ /* - * End of "$Id: mxmldoc.c,v 1.33 2004/05/01 15:20:05 mike Exp $". + * End of "$Id: mxmldoc.c,v 1.34 2004/05/01 22:45:34 mike Exp $". */ diff --git a/test/class.cxx b/test/class.cxx index 69d7a93..e686a87 100644 --- a/test/class.cxx +++ b/test/class.cxx @@ -3,8 +3,6 @@ class foo_c : public bar_c // Foo class derived from bar float foo; /* Real number */ int bar; /* Integer */ - static int global; /* Global integer */ - public: foo_c(float f, int b); @@ -40,11 +38,36 @@ class foo_c : public bar_c // Foo class derived from bar // 'set_foobar()' - Set foo and optionally bar (should show default args). void - set_foobar(float f, int b = 0) + set_foobar(float f, // I - Value of foo + int b = 0) // I - Value of bar { foo = f; bar = b; } + + protected: + + static int global; /* Global integer */ + + // 'get_global()' - Get the global integer. + int // O - Integer + get_global() + { + return (global); + } + + private: + + int barfoo; // Another private integer + + public: + + // 'get_barfoo()' - Get the barfoo value. + int // O - Barfoo value + get_barfoo() + { + return (barfoo); + } } // 'foo_c::foo_c()' - Create a foo_c class.