[PATCH] scanner: add --no-documentation flag

Felipe Ferreira da Silva ferreiradaselvadev at gmail.com
Mon Dec 4 23:08:53 UTC 2017


The --no-documentation flag sets a static global variable print_doc to
`false`. When activated, the flag prevents wayland-scanner to print the
documentation comments. The copyright notice is not affected by this
flag.

Signed-off-by: Felipe Ferreira da Silva <ferreiradaselva at protonmail.com>
---
 src/scanner.c | 218 +++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 123 insertions(+), 95 deletions(-)

diff --git a/src/scanner.c b/src/scanner.c
index c345ed6..a23e371 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -52,6 +52,8 @@ extern int DTD_DATA_len;
 
 #define PROGRAM_NAME "wayland-scanner"
 
+static bool print_doc = true;
+
 enum side {
 	CLIENT,
 	SERVER,
@@ -72,7 +74,8 @@ usage(int ret)
 			"                                 the scanner was built against.\n"
 			"    -c,  --include-core-only     include the core version of the headers,\n"
 			"                                 that is e.g. wayland-client-core.h instead\n"
-			"                                 of wayland-client.h.\n");
+			"                                 of wayland-client.h.\n"
+			"    --no-documentation           don't include the documentation.\n");
 	exit(ret);
 }
 
@@ -1004,7 +1007,8 @@ emit_opcode_versions(struct wl_list *message_list, struct interface *interface)
 	struct message *m;
 
 	wl_list_for_each(m, message_list, link) {
-		printf("/**\n * @ingroup iface_%s\n */\n", interface->name);
+		if (print_doc)
+			printf("/**\n * @ingroup iface_%s\n */\n", interface->name);
 		printf("#define %s_%s_SINCE_VERSION %d\n",
 		       interface->uppercase_name, m->uppercase_name, m->since);
 	}
@@ -1047,7 +1051,8 @@ emit_stubs(struct wl_list *message_list, struct interface *interface)
 	struct arg *a, *ret;
 	int has_destructor, has_destroy;
 
-	printf("/** @ingroup iface_%s */\n", interface->name);
+	if (print_doc)
+		printf("/** @ingroup iface_%s */\n", interface->name);
 	printf("static inline void\n"
 	       "%s_set_user_data(struct %s *%s, void *user_data)\n"
 	       "{\n"
@@ -1056,7 +1061,8 @@ emit_stubs(struct wl_list *message_list, struct interface *interface)
 	       interface->name, interface->name, interface->name,
 	       interface->name);
 
-	printf("/** @ingroup iface_%s */\n", interface->name);
+	if (print_doc)
+		printf("/** @ingroup iface_%s */\n", interface->name);
 	printf("static inline void *\n"
 	       "%s_get_user_data(struct %s *%s)\n"
 	       "{\n"
@@ -1091,7 +1097,8 @@ emit_stubs(struct wl_list *message_list, struct interface *interface)
 	}
 
 	if (!has_destroy && strcmp(interface->name, "wl_display") != 0) {
-		printf("/** @ingroup iface_%s */\n", interface->name);
+		if (print_doc)
+			printf("/** @ingroup iface_%s */\n", interface->name);
 		printf("static inline void\n"
 		       "%s_destroy(struct %s *%s)\n"
 		       "{\n"
@@ -1120,11 +1127,13 @@ emit_stubs(struct wl_list *message_list, struct interface *interface)
 				ret = a;
 		}
 
-		printf("/**\n"
-		       " * @ingroup iface_%s\n", interface->name);
-		if (m->description && m->description->text)
-			format_text_to_comment(m->description->text, false);
-		printf(" */\n");
+		if (print_doc) {
+			printf("/**\n"
+			       " * @ingroup iface_%s\n", interface->name);
+			if (m->description && m->description->text)
+				format_text_to_comment(m->description->text, false);
+			printf(" */\n");
+		}
 		if (ret && ret->interface_name == NULL)
 			printf("static inline void *\n");
 		else if (ret)
@@ -1220,17 +1229,19 @@ emit_event_wrappers(struct wl_list *message_list, struct interface *interface)
 		return;
 
 	wl_list_for_each(m, message_list, link) {
-		printf("/**\n"
-		       " * @ingroup iface_%s\n"
-		       " * Sends an %s event to the client owning the resource.\n",
-		       interface->name,
-		       m->name);
-		printf(" * @param resource_ The client's resource\n");
-		wl_list_for_each(a, &m->arg_list, link) {
-			if (a->summary)
-				printf(" * @param %s %s\n", a->name, a->summary);
+		if (print_doc) {
+			printf("/**\n"
+			       " * @ingroup iface_%s\n"
+			       " * Sends an %s event to the client owning the resource.\n",
+			       interface->name,
+			       m->name);
+			printf(" * @param resource_ The client's resource\n");
+			wl_list_for_each(a, &m->arg_list, link) {
+				if (a->summary)
+					printf(" * @param %s %s\n", a->name, a->summary);
+			}
+			printf(" */\n");
 		}
-		printf(" */\n");
 		printf("static inline void\n"
 		       "%s_send_%s(struct wl_resource *resource_",
 		       interface->name, m->name);
@@ -1275,7 +1286,7 @@ emit_enumerations(struct interface *interface)
 		printf("#define %s_%s_ENUM\n",
 		       interface->uppercase_name, e->uppercase_name);
 
-		if (desc) {
+		if (desc && print_doc) {
 			printf("/**\n");
 			printf(" * @ingroup iface_%s\n", interface->name);
 			format_text_to_comment(desc->summary, false);
@@ -1285,7 +1296,7 @@ emit_enumerations(struct interface *interface)
 		}
 		printf("enum %s_%s {\n", interface->name, e->name);
 		wl_list_for_each(entry, &e->entry_list, link) {
-			if (entry->summary || entry->since > 1) {
+			if (print_doc && (entry->summary || entry->since > 1)) {
 				printf("\t/**\n");
 				if (entry->summary)
 					printf("\t * %s\n", entry->summary);
@@ -1304,7 +1315,8 @@ emit_enumerations(struct interface *interface)
 			if (entry->since == 1)
                             continue;
 
-                        printf("/**\n * @ingroup iface_%s\n */\n", interface->name);
+			if (print_doc)
+				printf("/**\n * @ingroup iface_%s\n */\n", interface->name);
                         printf("#define %s_%s_%s_SINCE_VERSION %d\n",
                                interface->uppercase_name,
                                e->uppercase_name, entry->uppercase_name,
@@ -1327,38 +1339,42 @@ emit_structs(struct wl_list *message_list, struct interface *interface, enum sid
 	if (wl_list_empty(message_list))
 		return;
 
-	printf("/**\n");
-	printf(" * @ingroup iface_%s\n", interface->name);
-	printf(" * @struct %s_%s\n", interface->name,
-	       (side == SERVER) ? "interface" : "listener");
-	printf(" */\n");
+	if (print_doc) {
+		printf("/**\n");
+		printf(" * @ingroup iface_%s\n", interface->name);
+		printf(" * @struct %s_%s\n", interface->name,
+		       (side == SERVER) ? "interface" : "listener");
+		printf(" */\n");
+	}
 	printf("struct %s_%s {\n", interface->name,
 	       (side == SERVER) ? "interface" : "listener");
 
 	wl_list_for_each(m, message_list, link) {
 		struct description *mdesc = m->description;
 
-		printf("\t/**\n");
-		if (mdesc) {
-			if (mdesc->summary)
-				printf("\t * %s\n", mdesc->summary);
-			printf("\t *\n");
-			desc_dump(mdesc->text, "\t * ");
-		}
-		wl_list_for_each(a, &m->arg_list, link) {
-			if (side == SERVER && a->type == NEW_ID &&
-			    a->interface_name == NULL)
-				printf("\t * @param interface name of the objects interface\n"
-				       "\t * @param version version of the objects interface\n");
-
-			if (a->summary)
-				printf("\t * @param %s %s\n", a->name,
-				       a->summary);
-		}
-		if (m->since > 1) {
-			printf("\t * @since %d\n", m->since);
+		if (print_doc) {
+			printf("\t/**\n");
+			if (mdesc) {
+				if (mdesc->summary)
+					printf("\t * %s\n", mdesc->summary);
+				printf("\t *\n");
+				desc_dump(mdesc->text, "\t * ");
+			}
+			wl_list_for_each(a, &m->arg_list, link) {
+				if (side == SERVER && a->type == NEW_ID &&
+				    a->interface_name == NULL)
+					printf("\t * @param interface name of the objects interface\n"
+					       "\t * @param version version of the objects interface\n");
+
+				if (a->summary)
+					printf("\t * @param %s %s\n", a->name,
+					       a->summary);
+			}
+			if (m->since > 1) {
+				printf("\t * @since %d\n", m->since);
+			}
+			printf("\t */\n");
 		}
-		printf("\t */\n");
 		printf("\tvoid (*%s)(", m->name);
 
 		n = strlen(m->name) + 17;
@@ -1396,9 +1412,11 @@ emit_structs(struct wl_list *message_list, struct interface *interface, enum sid
 	printf("};\n\n");
 
 	if (side == CLIENT) {
-	    printf("/**\n"
-		   " * @ingroup iface_%s\n"
-		   " */\n", interface->name);
+		if (print_doc) {
+			printf("/**\n"
+			       " * @ingroup iface_%s\n"
+			       " */\n", interface->name);
+		}
 	    printf("static inline int\n"
 		   "%s_add_listener(struct %s *%s,\n"
 		   "%sconst struct %s_listener *listener, void *data)\n"
@@ -1471,39 +1489,43 @@ emit_mainpage_blurb(const struct protocol *protocol, enum side side)
 {
 	struct interface *i;
 
-	printf("/**\n"
-	       " * @page page_%s The %s protocol\n",
-	       protocol->name, protocol->name);
+	if (print_doc) {
+		printf("/**\n"
+		       " * @page page_%s The %s protocol\n",
+		       protocol->name, protocol->name);
+
+		if (protocol->description) {
+			if (protocol->description->summary) {
+				printf(" * %s\n"
+				       " *\n", protocol->description->summary);
+			}
 
-	if (protocol->description) {
-		if (protocol->description->summary) {
-			printf(" * %s\n"
-			       " *\n", protocol->description->summary);
+			if (protocol->description->text) {
+				printf(" * @section page_desc_%s Description\n", protocol->name);
+				format_text_to_comment(protocol->description->text, false);
+				printf(" *\n");
+			}
 		}
 
-		if (protocol->description->text) {
-			printf(" * @section page_desc_%s Description\n", protocol->name);
-			format_text_to_comment(protocol->description->text, false);
-			printf(" *\n");
+		printf(" * @section page_ifaces_%s Interfaces\n", protocol->name);
+		wl_list_for_each(i, &protocol->interface_list, link) {
+			printf(" * - @subpage page_iface_%s - %s\n",
+			       i->name,
+			       i->description && i->description->summary ?  i->description->summary : "");
 		}
-	}
 
-	printf(" * @section page_ifaces_%s Interfaces\n", protocol->name);
-	wl_list_for_each(i, &protocol->interface_list, link) {
-		printf(" * - @subpage page_iface_%s - %s\n",
-		       i->name,
-		       i->description && i->description->summary ?  i->description->summary : "");
-	}
+		if (protocol->copyright) {
+			printf(" * @section page_copyright_%s Copyright\n",
+			       protocol->name);
+			printf(" * <pre>\n");
+			format_text_to_comment(protocol->copyright, false);
+			printf(" * </pre>\n");
+		}
 
-	if (protocol->copyright) {
-		printf(" * @section page_copyright_%s Copyright\n",
-		       protocol->name);
-		printf(" * <pre>\n");
-		format_text_to_comment(protocol->copyright, false);
-		printf(" * </pre>\n");
+		printf(" */\n");
+	} else if (protocol->copyright) {
+			format_text_to_comment(protocol->copyright, true);
 	}
-
-	printf(" */\n");
 }
 
 static void
@@ -1557,24 +1579,26 @@ emit_header(struct protocol *protocol, enum side side)
 	printf("\n");
 
 	wl_list_for_each(i, &protocol->interface_list, link) {
-		printf("/**\n"
-		       " * @page page_iface_%s %s\n",
-		       i->name, i->name);
-		if (i->description && i->description->text) {
-			printf(" * @section page_iface_%s_desc Description\n",
-			       i->name);
-			format_text_to_comment(i->description->text, false);
+		if (print_doc) {
+			printf("/**\n"
+			       " * @page page_iface_%s %s\n",
+			       i->name, i->name);
+			if (i->description && i->description->text) {
+				printf(" * @section page_iface_%s_desc Description\n",
+				       i->name);
+				format_text_to_comment(i->description->text, false);
+			}
+			printf(" * @section page_iface_%s_api API\n"
+			       " * See @ref iface_%s.\n"
+			       " */\n",
+			       i->name, i->name);
+			printf("/**\n"
+			       " * @defgroup iface_%s The %s interface\n",
+			       i->name, i->name);
+			if (i->description && i->description->text)
+				format_text_to_comment(i->description->text, false);
+			printf(" */\n");
 		}
-		printf(" * @section page_iface_%s_api API\n"
-		       " * See @ref iface_%s.\n"
-		       " */\n",
-		       i->name, i->name);
-		printf("/**\n"
-		       " * @defgroup iface_%s The %s interface\n",
-		       i->name, i->name);
-		if (i->description && i->description->text)
-			format_text_to_comment(i->description->text, false);
-		printf(" */\n");
 		printf("extern const struct wl_interface "
 		       "%s_interface;\n", i->name);
 	}
@@ -1813,11 +1837,12 @@ int main(int argc, char *argv[])
 		{ "help",              no_argument, NULL, 'h' },
 		{ "version",           no_argument, NULL, 'v' },
 		{ "include-core-only", no_argument, NULL, 'c' },
+		{ "no-documentation",  no_argument, NULL, 'n' },
 		{ 0,                   0,           NULL, 0 }
 	};
 
 	while (1) {
-		opt = getopt_long(argc, argv, "hvc", options, NULL);
+		opt = getopt_long(argc, argv, "hvcn", options, NULL);
 
 		if (opt == -1)
 			break;
@@ -1832,6 +1857,9 @@ int main(int argc, char *argv[])
 		case 'c':
 			core_headers = true;
 			break;
+		case 'n':
+			print_doc = false;
+			break;
 		default:
 			fail = true;
 			break;
-- 
2.15.1



More information about the wayland-devel mailing list