summaryrefslogtreecommitdiff
path: root/src/eggdbus/docbook.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eggdbus/docbook.c')
-rw-r--r--src/eggdbus/docbook.c202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/eggdbus/docbook.c b/src/eggdbus/docbook.c
index 888834d..37eafa5 100644
--- a/src/eggdbus/docbook.c
+++ b/src/eggdbus/docbook.c
@@ -799,3 +799,205 @@ interface_generate_docbook (const EggDBusInterfaceInfo *interface,
return ret;
}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+gboolean
+enum_generate_docbook (EnumData *enum_data,
+ GError **error)
+{
+ gboolean ret;
+ gchar *enum_summary_doc_string;
+ gchar *enum_doc_string;
+ const gchar *type_string;
+ guint n;
+ guint len;
+ guint max_len;
+ guint m;
+
+ ret = FALSE;
+
+ switch (enum_data->type)
+ {
+ case ENUM_DATA_TYPE_ERROR_DOMAIN:
+ type_string = "Error Domain";
+ break;
+
+ case ENUM_DATA_TYPE_FLAGS:
+ type_string = "Flags";
+ break;
+
+ case ENUM_DATA_TYPE_ENUM:
+ type_string = "Enumeration";
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ enum_summary_doc_string = get_summary_doc_string (enum_data->annotations, type_string);
+ enum_doc_string = get_doc_string (enum_data->annotations, type_string);
+
+ g_print ("<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2 //EN\"\n"
+ "\"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">\n");
+
+ g_print ("<refentry id=\"struct-%s\">\n", enum_data->name);
+ g_print (" <refmeta>\n");
+ g_print (" <refentrytitle role=\"top_of_page\">%s</refentrytitle>\n", enum_data->name);
+ g_print (" </refmeta>\n");
+ g_print (" <refnamediv>\n");
+ g_print (" <refname>%s</refname>\n", enum_data->name);
+ g_print (" <refpurpose>%s</refpurpose>\n", enum_summary_doc_string);
+ g_print (" </refnamediv>\n");
+
+ g_print (" <refsect1>\n");
+
+ g_print (" <refsect2>\n");
+ if (enum_data->type == ENUM_DATA_TYPE_ERROR_DOMAIN)
+ {
+ g_print (" <title><anchor role=\"enum\" id=\"%s\"/>The %s* Error Domain</title>\n",
+ enum_data->maximal_dbus_prefix,
+ enum_data->maximal_dbus_prefix);
+ }
+ else
+ {
+ g_print (" <title><anchor role=\"enum\" id=\"%s\"/>The %s %s</title>\n",
+ enum_data->name,
+ enum_data->name,
+ type_string);
+ }
+ g_print (" <para>\n");
+ g_print (" <programlisting>\n");
+ switch (enum_data->type)
+ {
+ case ENUM_DATA_TYPE_ERROR_DOMAIN:
+ g_print ("{\n");
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+
+ if (n != 0)
+ g_print (",\n");
+
+ g_print (" %s", elem->name);
+ }
+ g_print ("\n"
+ "}\n");
+ break;
+
+ case ENUM_DATA_TYPE_FLAGS:
+ max_len = 0;
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+ len = strlen (elem->name);
+ if (len > max_len)
+ max_len = len;
+ }
+
+ g_print ("{\n");
+ m = 1;
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+ if (n != 0)
+ g_print (",\n");
+
+ if (elem->value != -1)
+ m = elem->value;
+
+ len = strlen (elem->name);
+ g_print (" %s %*s= 0x%08x", elem->name, max_len - len, "", m);
+
+ m *= 2;
+ }
+ g_print ("\n"
+ "}\n");
+ break;
+
+ case ENUM_DATA_TYPE_ENUM:
+ max_len = 0;
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+ len = strlen (elem->name);
+ if (len > max_len)
+ max_len = len;
+ }
+
+ g_print ("{\n");
+ m = 0;
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+ if (n != 0)
+ g_print (",\n");
+
+ if (elem->value != -1)
+ m = elem->value;
+
+ len = strlen (elem->name);
+ g_print (" %s %*s= %d", elem->name, max_len - len, "", m);
+
+ m++;
+ }
+ g_print ("\n"
+ "}\n");
+ break;
+ }
+ g_print (" </programlisting>\n");
+ g_print (" <para>\n");
+ g_print ("%s\n", enum_doc_string);
+ g_print (" </para>\n");
+
+ g_print (" <variablelist role=\"constant\">\n");
+ for (n = 0; n < enum_data->num_elements; n++)
+ {
+ EnumElemData *elem = enum_data->elements[n];
+ gchar *enum_doc_string;
+
+ enum_doc_string = get_doc_string (elem->annotations, "Enum");
+
+ switch (enum_data->type)
+ {
+ case ENUM_DATA_TYPE_ERROR_DOMAIN:
+ g_print (" <varlistentry id=\"constant-%s\" role=\"constant\">\n", elem->name);
+ break;
+
+ case ENUM_DATA_TYPE_FLAGS:
+ g_print (" <varlistentry id=\"constant-%s.%s\" role=\"constant\">\n", enum_data->name, elem->name);
+ break;
+
+ case ENUM_DATA_TYPE_ENUM:
+ g_print (" <varlistentry id=\"constant-%s.%s\" role=\"constant\">\n", enum_data->name, elem->name);
+ break;
+ }
+ g_print (" <term><literal>%s</literal></term>\n", elem->name);
+ g_print (" <listitem>\n");
+ g_print (" <para>\n");
+ g_print ("%s\n", enum_doc_string);
+ g_print (" </para>\n");
+ g_print (" </listitem>\n");
+ g_print (" </varlistentry>\n");
+
+ g_free (enum_doc_string);
+ }
+ g_print (" </variablelist>\n");
+ g_print (" </para>\n");
+ g_print (" </refsect2>\n");
+
+ g_print (" </refsect1>\n");
+
+
+ g_print ("</refentry>\n");
+
+ ret = TRUE;
+
+ g_free (enum_doc_string);
+ g_free (enum_summary_doc_string);
+
+ return ret;
+}
+