summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2023-02-27 00:58:49 +0100
committerCarlos Garnacho <carlosg@gnome.org>2023-02-27 09:18:57 +0100
commitd22e4940fa050518f1b3ddde718bd8f498f4a27c (patch)
tree5e93b17215adc3c7ab9ae55563300af52f432068 /docs
parent12c21b71e5c5db0ebfd336d9678ccfbee1ae1168 (diff)
downloadtracker-d22e4940fa050518f1b3ddde718bd8f498f4a27c.tar.gz
docs: Drop docbook XML documentation generation
This is bitrotting already, and we will not want to go back to that. Presumably noone else would, so we can simply drop this.
Diffstat (limited to 'docs')
-rw-r--r--docs/tools/meson.build1
-rw-r--r--docs/tools/tracker-docgen-xml.c662
-rw-r--r--docs/tools/tracker-docgen-xml.h36
-rw-r--r--docs/tools/tracker-main.c19
-rw-r--r--docs/tools/tracker-utils.c371
5 files changed, 3 insertions, 1086 deletions
diff --git a/docs/tools/meson.build b/docs/tools/meson.build
index 5bb96c1da..3281db4d4 100644
--- a/docs/tools/meson.build
+++ b/docs/tools/meson.build
@@ -4,7 +4,6 @@ doctool_gresources = gnome.compile_resources('tracker_doctool_gresources', 'dsc-
doctool_files = [
'tracker-docgen-md.c',
- 'tracker-docgen-xml.c',
'tracker-main.c',
'tracker-ontology-model.c',
'tracker-utils.c',
diff --git a/docs/tools/tracker-docgen-xml.c b/docs/tools/tracker-docgen-xml.c
deleted file mode 100644
index d39f8a86d..000000000
--- a/docs/tools/tracker-docgen-xml.c
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * Copyright (C) 2009, Nokia <ivan.frade@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include <glib/gprintf.h>
-#include <gio/gio.h>
-
-#include "tracker-docgen-xml.h"
-#include "tracker-utils.h"
-
-typedef struct {
- TrackerOntologyModel *model;
- TrackerOntologyDescription *description;
- FILE *output;
-} CallbackInfo;
-
-static void
-print_predefined_instances (FILE *f,
- TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- const gchar *id;
- GList *l;
-
- if (!klass->instances)
- return;
-
- id = klass->shortname;
-
- g_fprintf (f, "<refsect3 id='%s.predefined-instances'>", id);
- g_fprintf (f, "<title>Predefined instances</title><para>");
- g_fprintf (f, "%s has the following predefined instances: ", klass->shortname);
- g_fprintf (f, "<itemizedlist>\n");
-
- for (l = klass->instances; l; l = l->next) {
- g_fprintf (f, "<listitem><para>");
- g_fprintf (f, "<literal>%s</literal>", (gchar*) l->data);
- g_fprintf (f, "</para></listitem>\n");
- }
-
- g_fprintf (f, "</itemizedlist></para></refsect3>\n");
-}
-
-static void
-print_class_hierarchy (FILE *f,
- TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- GPtrArray *strings;
- const gchar *id;
- guint i;
-
- strings = class_get_parent_hierarchy_strings (klass, model);
-
- if (!strings)
- return;
-
- id = klass->shortname;
-
- g_fprintf (f, "<refsect3 id='%s.hierarchy'>", id);
- g_fprintf (f, "<title>Class hierarchy</title>");
- g_fprintf (f, "<screen>");
-
- for (i = 0; i < strings->len; i++) {
- HierarchyString *str = g_ptr_array_index (strings, i);
-
- if (str->class == klass) {
- g_fprintf (f, " %s<emphasis><link linkend=\"%s\">%s</link></emphasis>%s\n",
- str->before->str,
- str->class->shortname,
- str->link_label->str,
- str->after->str);
- } else {
- g_fprintf (f, " %s<link linkend=\"%s\">%s</link>%s\n",
- str->before->str,
- str->class->shortname,
- str->link_label->str,
- str->after->str);
- }
- }
-
- g_fprintf (f, "</screen></refsect3>\n");
- g_ptr_array_unref (strings);
-}
-
-static void
-print_flag (FILE *f,
- const gchar *flag_property_link,
- const gchar *icon_name,
- const gchar *flag_description)
-{
- /* This must not contain any linebreaks, or gtkdoc-fixxrefs will not
- * resolve the link. See https://gitlab.gnome.org/GNOME/gtk-doc/-/issues/122
- */
- g_fprintf (f, "<link linkend=\"%s\">", flag_property_link);
- g_fprintf (f, "<inlinemediaobject>");
- g_fprintf (f, "<imageobject><imagedata fileref=\"%s\" /></imageobject>", icon_name);
- g_fprintf (f, "<alt>%s</alt>", flag_description);
- g_fprintf (f, "</inlinemediaobject>");
- g_fprintf (f, "</link>");
-}
-
-static void
-print_property_table (FILE *f,
- TrackerOntologyModel *model,
- const char *id,
- GList *properties)
-{
- GList *l, *m;
- g_autoptr(GList) properties_sorted = NULL;
-
- if (!properties)
- return;
-
- properties_sorted = g_list_sort (g_list_copy (properties), (GCompareFunc) strcmp);
-
- /* We (ab)use the "struct_members" role to ensure devhelp2 <keyword> entries are
- * generated by gtkdoc-mkhtml2. This is needed for xrefs to work between the
- * libtracker-sparql and nepomuk ontology docs.
- */
- g_fprintf (f, "<refsect3 role=\"struct_members\" id=\"%s.properties\">", id);
- g_fprintf (f, "<title>Properties</title>");
-
- g_fprintf (f, "<informaltable frame=\"none\"><tgroup cols=\"4\">");
- g_fprintf (f, "<thead><row><entry>Name</entry><entry>Type</entry><entry>Notes</entry><entry>Description</entry></row></thead>");
-
- g_fprintf (f, "<tbody>");
- for (l = properties_sorted; l; l = l->next) {
- TrackerOntologyProperty *prop;
- TrackerOntologyClass *range;
- const gchar *shortname = NULL, *basename = NULL, *type_name = NULL, *type_class_id = NULL, *prop_id = NULL;
-
- prop = tracker_ontology_model_get_property (model, l->data);
- range = tracker_ontology_model_get_class (model, prop->range->data);
-
- prop_id = shortname = prop->shortname;
- basename = prop->basename;
- type_name = range->basename;
- type_class_id = range->shortname;
-
- g_fprintf (f, "<row role=\"member\">");
-
- /* Property name column */
- g_fprintf (f, "<entry role=\"struct_member_name\">");
- /* This id is globally unique and can be used for internal links.
- * We abuse <structfield> so that gtkdoc-mkhtml2 creates a usable link. */
- g_fprintf (f, "<para><structfield id=\"%s\">%s</structfield></para>", prop_id, basename);
- /* This anchor is unique within the refentry and can be used for external links */
- g_fprintf (f, "<anchor id='%s' />", basename);
- g_fprintf (f, "<indexterm zone='%s'><primary sortas='%s'>%s</primary></indexterm>",
- prop_id, shortname, shortname);
- g_fprintf (f, "</entry>");
-
- /* Type column */
- g_fprintf (f, "<entry>");
- g_fprintf (f, "<link linkend=\"%s\">%s</link>", type_class_id, type_name);
- g_fprintf (f, "</entry>");
-
- /* Flags column */
- g_fprintf (f, "<entry>");
-
- if (prop->deprecated) {
- print_flag (f, "nrl-deprecated", "icon-deprecated.svg",
- "This property is deprecated.");
- }
-
- if (prop->superproperties) {
- for (m = prop->superproperties; m; m = m->next) {
- const gchar *shortname = NULL, *superprop_id = NULL;
- g_autofree gchar *message = NULL;
- TrackerOntologyProperty *superprop;
-
- superprop = tracker_ontology_model_get_property (model, m->data);
- shortname = superprop_id = superprop->shortname;
-
- message = g_strdup_printf ("This property extends %s", shortname);
-
- print_flag (f, superprop_id, "icon-superproperty.svg", message);
- }
- }
-
- if (prop->max_cardinality != NULL && atoi (prop->max_cardinality) == 1) {
- /* Single valued properties are most common, so we don't display this. */
- } else {
- g_autofree gchar *message = NULL;
-
- if (prop->max_cardinality != NULL && atoi (prop->max_cardinality) > 0) {
- message = g_strdup_printf ("This property can have a maximum of %i values", *prop->max_cardinality);
- } else {
- message = g_strdup_printf ("This property can have multiple values.");
- }
- print_flag (f, "nrl-maxCardinality", "icon-multivalue.svg", message);
- }
-
- if (prop->fulltextIndexed) {
- print_flag (f, "nrl-fulltextIndexed", "icon-fulltextindexed.svg",
- "This property is full-text-indexed, and can be looked up through <literal>fts:match</literal>");
- }
-
- g_fprintf (f, "</entry>");
-
- /* Description column */
- g_fprintf (f, "<entry>");
- if (prop->description) {
- g_fprintf (f, "<para>%s</para>", prop->description);
- }
- g_fprintf (f, "</entry>");
- g_fprintf (f, "</row>");
- }
-
- g_fprintf (f, "</tbody></tgroup>");
- g_fprintf (f, "</informaltable>");
-
- g_fprintf (f, "</refsect3>");
-}
-
-static void
-print_ontology_class (TrackerOntologyModel *model,
- TrackerOntologyClass *klass,
- FILE *f)
-{
- const gchar *name = NULL, *id = NULL;
-
- g_return_if_fail (f != NULL);
-
- name = klass->basename;
- id = klass->shortname;
-
- /* Anchor for external links. */
- g_fprintf (f, "<anchor id='%s' />\n", name);
-
- g_fprintf (f, "<refsect2 role='rdf-class' id='%s'>\n", id);
- g_fprintf (f, "<title>%s</title>\n", name);
-
- if (klass->description || klass->deprecated || klass->notify) {
- g_fprintf (f, "<refsect3 id='%s.description'>\n", id);
- g_fprintf (f, " <title>Description</title>\n");
-
- if (klass->description) {
- g_fprintf (f, " %s", klass->description);
- }
-
- if (klass->deprecated) {
- g_fprintf (f, "<para>");
- print_flag (f, "nrl-deprecated", "icon-deprecated.svg", "Deprecated icon");
- g_fprintf (f, "This class is deprecated.");
- g_fprintf (f, "</para>");
- }
-
- if (klass->notify) {
- g_fprintf (f, "<para>");
- print_flag (f, "nrl-notify", "icon-notify.svg", "Notify icon");
- g_fprintf (f, "This class emits notifications about changes, and can "
- "be monitored using <link linkend=\"TrackerNotifier\">TrackerNotifier</link>.");
- g_fprintf (f, "</para>");
- }
- g_fprintf (f, "</refsect3>\n");
- }
-
- if (klass->specification) {
- g_fprintf (f, "<refsect3 id='%s.specification'>\n", id);
- g_fprintf (f, " <title>Specification</title>\n");
- g_fprintf (f, " <ulink url=\"%s\" />", klass->specification);
- g_fprintf (f, "</refsect3>\n");
- }
-
- print_class_hierarchy (f, klass, model);
- print_predefined_instances (f, klass, model);
-
- print_property_table (f, model, id, klass->in_domain_of);
-
- g_fprintf (f, "</refsect2>\n");
-}
-
-static void
-print_ontology_extra_properties (TrackerOntologyModel *model,
- const char *ontology_prefix,
- const char *classname,
- GList *properties_for_class,
- FILE *f)
-{
- TrackerOntologyClass *klass;
- const gchar *short_classname = NULL, *class_id = NULL;
- gchar *section_id = NULL;
-
- g_return_if_fail (f != NULL);
-
- klass = tracker_ontology_model_get_class (model, classname);
- short_classname = class_id = klass->shortname;
- section_id = g_strconcat (ontology_prefix, ".", class_id, NULL);
-
- g_fprintf (f, "<refsect2 role='rdf-property-list' id='%s'>\n", section_id);
- g_fprintf (f, "<title>Additional properties for %s</title>\n", short_classname);
-
- g_fprintf (f, "<refsect3>\n");
- g_fprintf (f, " <title>Description</title>\n");
- g_fprintf (f, " <para>Properties this ontology defines which can describe %s resources.</para>",
- short_classname);
- g_fprintf (f, "</refsect3>\n");
-
- print_property_table (f, model, section_id, properties_for_class);
- g_fprintf (f, "</refsect2>\n");
-
- g_free (section_id);
-}
-
-static void
-print_itemized_list (FILE *f, GList *list)
-{
- GList *it;
-
- g_fprintf (f, "<itemizedlist>\n");
- for (it = list; it != NULL; it = it->next) {
- g_fprintf (f, "<listitem>%s</listitem>\n", (gchar *)it->data);
- }
- g_fprintf (f, "</itemizedlist>\n");
-}
-
-static void
-print_people_list (FILE *f,
- const gchar *role,
- GList *list)
-{
- if (!list) {
- return;
- }
-
- g_fprintf (f, "<varlistentry>\n");
- g_fprintf (f, " <term>%s</term>\n", role);
- g_fprintf (f, " <listitem>\n");
- print_itemized_list (f, list);
- g_fprintf (f, " </listitem>\n");
- g_fprintf (f, "</varlistentry>\n");
-}
-
-static void
-print_link_as_varlistentry (FILE *f,
- const gchar *term,
- const gchar *link_text,
- const gchar *link)
-{
- g_fprintf (f, " <varlistentry>\n");
- g_fprintf (f," <term>%s</term>\n", term);
- if (link) {
- g_fprintf (f,
- " <listitem><para><ulink url=\"%s\">%s</ulink></para></listitem>\n",
- link, link_text);
- } else {
- g_fprintf (f, " <listitem><para>Not available</para></listitem>\n");
- }
- g_fprintf (f, " </varlistentry>\n");
-}
-
-#if 0
-static void
-print_deprecated_message (FILE *f)
-{
- g_fprintf (f, "<note>\n");
- g_fprintf (f, "<title>Note:</title>\n");
- g_fprintf (f, "<para>This item is deprecated</para>\n");
- g_fprintf (f, "</note>\n");
-}
-#endif
-
-static void
-print_xml_header (FILE *f, TrackerOntologyDescription *desc)
-{
- g_fprintf (f, "<?xml version='1.0' encoding='UTF-8'?>\n");
- g_fprintf (f, "<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.5//EN\"\n"
- " \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\" [\n");
- g_fprintf (f, "<!ENTITY %% local.common.attrib \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'\">\n");
- g_fprintf (f, "]>");
-
- g_fprintf (f, "<refentry id='%s' xmlns:xi=\"http://www.w3.org/2003/XInclude\">\n", desc->localPrefix);
- g_fprintf (f, "<refmeta>\n");
- g_fprintf (f, " <refentrytitle>%s</refentrytitle>\n", desc->title);
- g_fprintf (f, "</refmeta>\n");
- g_fprintf (f, "<refnamediv>\n");
- g_fprintf (f, "<refname>%s</refname>", desc->title);
- g_fprintf (f, "<refpurpose>%s</refpurpose>", desc->description);
- g_fprintf (f, "</refnamediv>\n");
-}
-
-static void
-print_xml_footer (FILE *f, TrackerOntologyDescription *desc)
-{
- g_fprintf (f, "<refsect1>\n");
- g_fprintf (f, "<title>Credits and Copyright</title>\n");
- print_people_list (f, "Authors:", desc->authors);
- print_people_list (f, "Editors:", desc->editors);
- print_people_list (f, "Contributors:", desc->contributors);
-
- print_link_as_varlistentry (f, "Upstream:", "Upstream version", desc->upstream);
- print_link_as_varlistentry (f, "ChangeLog:", "Tracker changes", desc->gitlog);
-
- if (desc->copyright) {
- g_fprintf (f, "<varlistentry>\n");
- g_fprintf (f, " <term>Copyright:</term>\n");
- g_fprintf (f, " <listitem>\n");
- g_fprintf (f, "<para>%s</para>\n", desc->copyright);
- g_fprintf (f, " </listitem>\n");
- g_fprintf (f, "</varlistentry>\n");
- }
-
- g_fprintf (f, "</refsect1>\n");
- g_fprintf (f, "</refentry>\n");
-}
-
-/* By default we list properties under their respective class.
- *
- * Ontologies can contain properties whose class is in a different
- * ontology, and we treat these specially as 'extra properties'.
- *
- * This functions returns a hash table mapping class name to the
- * extra properties provided for that class.
- */
-static GHashTable *
-get_extra_properties (TrackerOntologyModel *model,
- GList *classes,
- GList *properties)
-{
- GList *l, *c;
- GHashTable *extra_properties;
- GHashTableIter iter;
- gchar *classname;
- GList *properties_for_class;
-
- extra_properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
- for (l = properties; l; l = l->next) {
- TrackerOntologyProperty *prop;
- gboolean has_domain_in_this_ontology = FALSE;
-
- prop = tracker_ontology_model_get_property (model, l->data);
-
- for (c = prop->domain; c; c = c->next) {
- TrackerOntologyDescription *desc = NULL;
- TrackerOntologyClass *klass;
- gchar *prefix;
- const gchar *sep;
-
- klass = tracker_ontology_model_get_class (model, c->data);
- sep = strstr (klass->shortname, ":");
-
- if (sep) {
- prefix = g_strndup (klass->shortname, sep - klass->shortname);
- desc = tracker_ontology_model_get_description (model, prefix);
- g_free (prefix);
- }
-
- has_domain_in_this_ontology = desc != NULL;
- }
-
- if (!has_domain_in_this_ontology) {
- for (c = prop->domain; c; c = c->next) {
- const gchar *classname;
- GList *list;
-
- classname = c->data;
- list = g_hash_table_lookup (extra_properties, classname);
- list = g_list_append (list, prop->propertyname);
- g_hash_table_insert (extra_properties, g_strdup (classname), list);
- }
- }
- }
-
- g_hash_table_iter_init (&iter, extra_properties);
- while (g_hash_table_iter_next (&iter, (gpointer *)&classname, (gpointer *)&properties_for_class)) {
- properties_for_class = g_list_sort (properties_for_class, (GCompareFunc) strcmp);
- g_hash_table_iter_replace (&iter, properties_for_class);
- }
-
- return extra_properties;
-}
-
-static void
-print_synopsis (FILE *f,
- TrackerOntologyDescription *desc)
-{
- g_fprintf (f, "<refsynopsisdiv>\n");
- g_fprintf (f, "<synopsis>\n");
- g_fprintf (f, "@prefix %s: &lt;%s&gt;\n", desc->localPrefix, desc->baseUrl);
- g_fprintf (f, "</synopsis>\n");
- g_fprintf (f, "</refsynopsisdiv>\n");
-}
-
-static void
-print_toc_classes (FILE *f,
- TrackerOntologyModel *model,
- const char *id,
- GList *classes)
-{
- GList *l;
-
- if (!classes)
- return;
-
- g_fprintf (f, "<refsect1 id=\"%s.classes\">", id);
- g_fprintf (f, "<title>Classes</title>");
-
- for (l = classes; l; l = l->next) {
- TrackerOntologyClass *klass;
- const char *basename = NULL, *id = NULL;
-
- klass = tracker_ontology_model_get_class (model, l->data);
- basename = klass->basename;
- id = klass->shortname;
-
- if (l != classes) {
- g_fprintf (f, ", ");
- }
- g_fprintf (f, "<link linkend=\"%s\">%s</link>", id, basename);
- }
-
- g_fprintf (f, "</refsect1>");
-}
-
-static void
-print_toc_extra_properties (FILE *f,
- TrackerOntologyModel *model,
- const char *id,
- GHashTable *extra_properties)
-{
- GList *props_for_class, *c, *l;
- g_autoptr(GList) classes = NULL;
- gboolean print_comma = FALSE;
-
- if (g_hash_table_size (extra_properties) == 0)
- return;
-
- g_fprintf (f, "<refsect1 id=\"%s.extra_properties\">", id);
- g_fprintf (f, "<title>Additional Properties</title>");
-
- classes = g_hash_table_get_keys (extra_properties);
- classes = g_list_sort (classes, (GCompareFunc)strcmp);
- for (c = classes; c; c = c->next) {
- gchar *classname;
-
- classname = c->data;
- props_for_class = g_hash_table_lookup (extra_properties, classname);
- for (l = props_for_class; l; l = l->next) {
- TrackerOntologyProperty *prop;
- const char *basename = NULL, *prop_id = NULL;
-
- prop = tracker_ontology_model_get_property (model, l->data);
- basename = prop->basename;
- prop_id = prop->shortname;
-
- if (print_comma) {
- g_fprintf (f, ", ");
- } else {
- print_comma = TRUE;
- }
-
- g_fprintf (f, "<link linkend=\"%s\">%s</link>", prop_id, basename);
- }
- }
-
- g_fprintf (f, "</refsect1>");
-}
-
-/* Generate docbook XML document for one ontology. */
-void
-ttl_xml_print (TrackerOntologyDescription *description,
- TrackerOntologyModel *model,
- const gchar *prefix,
- GFile *output_location,
- const gchar *description_dir)
-{
- gchar *upper_name, *path, *introduction, *basename, *filename;
- g_autoptr(GList) classes = NULL, properties = NULL, extra_classes = NULL;
- g_autoptr(GHashTable) extra_properties = NULL;
- GFile *file;
- GList *l;
- FILE *f;
-
- filename = g_strdup_printf ("%s-ontology.xml", description->localPrefix);
- file = g_file_get_child (output_location, filename);
- g_free (filename);
-
- path = g_file_get_path (file);
- f = fopen (path, "w");
- g_assert (f != NULL);
- g_free (path);
-
- upper_name = g_ascii_strup (description->localPrefix, -1);
- classes = tracker_ontology_model_list_classes (model, prefix);
- properties = tracker_ontology_model_list_properties (model, prefix);
- extra_properties = get_extra_properties (model, classes, properties);
-
- print_xml_header (f, description);
-
- print_synopsis (f, description);
- print_toc_classes (f, model, description->localPrefix, classes);
- print_toc_extra_properties (f, model, description->localPrefix, extra_properties);
-
- basename = g_strdup_printf ("%s-introduction.xml", description->localPrefix);
- introduction = g_build_filename (description_dir, basename, NULL);
- g_free (basename);
-
- if (g_file_test (introduction, G_FILE_TEST_EXISTS)) {
- g_fprintf (f, "<xi:include href='%s'><xi:fallback/></xi:include>",
- introduction);
- }
-
- if (classes != NULL) {
- g_fprintf (f, "<refsect1 id='%s-classes'>\n", description->localPrefix);
- g_fprintf (f, "<title>Class Details</title>\n");
-
- for (l = classes; l; l = l->next) {
- TrackerOntologyClass *klass;
-
- klass = tracker_ontology_model_get_class (model, l->data);
- print_ontology_class (model, klass, f);
- }
-
- g_fprintf (f, "</refsect1>\n");
- }
-
- if (g_hash_table_size (extra_properties) > 0) {
- g_fprintf (f, "<refsect1 id='%s-extra-properties'>\n", description->localPrefix);
- g_fprintf (f, "<title>Property Details</title>\n");
-
- extra_classes = g_hash_table_get_keys (extra_properties);
- extra_classes = g_list_sort (extra_classes, (GCompareFunc)strcmp);
- for (l = extra_classes; l; l = l->next) {
- gchar *classname;
- GList *properties_for_class;
-
- classname = l->data;
-
- properties_for_class = g_hash_table_lookup (extra_properties, classname);
- if (properties_for_class) {
- print_ontology_extra_properties (model, description->localPrefix, classname, properties_for_class, f);
- }
- }
-
- g_fprintf (f, "</refsect1>\n");
- }
-
- print_xml_footer (f, description);
-
- g_free (upper_name);
- g_free (introduction);
- g_object_unref (file);
- fclose (f);
-}
diff --git a/docs/tools/tracker-docgen-xml.h b/docs/tools/tracker-docgen-xml.h
deleted file mode 100644
index 840182bb8..000000000
--- a/docs/tools/tracker-docgen-xml.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2009, Nokia <ivan.frade@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __TTL_XML_H__
-#define __TTL_XML_H__
-
-#include <gio/gio.h>
-#include "tracker-ontology-model.h"
-
-G_BEGIN_DECLS
-
-void ttl_xml_print (TrackerOntologyDescription *description,
- TrackerOntologyModel *model,
- const gchar *prefix,
- GFile *output_location,
- const gchar *description_dir);
-
-G_END_DECLS
-
-#endif
diff --git a/docs/tools/tracker-main.c b/docs/tools/tracker-main.c
index 9584ec4ea..f695610a1 100644
--- a/docs/tools/tracker-main.c
+++ b/docs/tools/tracker-main.c
@@ -23,15 +23,14 @@
#include <stdio.h>
#include "tracker-docgen-md.h"
-#include "tracker-docgen-xml.h"
#include "tracker-ontology-model.h"
+#include "tracker-utils.h"
static gchar *ontology_dir = NULL;
static gchar *ontology_desc_dir = NULL;
static gchar *output_dir = NULL;
static gchar *introduction_dir = NULL;
-static gboolean xml = FALSE;
-static gboolean markdown = FALSE;
+static gboolean markdown = TRUE;
static GOptionEntry entries[] = {
{ "ontology-dir", 'd', 0, G_OPTION_ARG_FILENAME, &ontology_dir,
@@ -50,10 +49,6 @@ static GOptionEntry entries[] = {
"Directory to find ontology introduction",
NULL
},
- { "xml", 'x', 0, G_OPTION_ARG_NONE, &xml,
- "Whether to produce docbook XML for gtk-doc",
- NULL
- },
{ "md", 'm', 0, G_OPTION_ARG_NONE, &markdown,
"Whether to produce markdown",
NULL
@@ -86,12 +81,6 @@ main (gint argc, gchar **argv)
return -1;
}
- if (!!xml == !!markdown) {
- g_printerr ("%s\n",
- "One of --xml or --md must be provided");
- return -1;
- }
-
if (!ontology_dir || !output_dir) {
gchar *help;
@@ -131,9 +120,7 @@ main (gint argc, gchar **argv)
if (!description)
continue;
- if (xml)
- ttl_xml_print (description, model, prefixes[i], output_file, introduction_dir);
- else if (markdown)
+ if (markdown)
ttl_md_print (description, model, prefixes[i], output_file, introduction_dir);
ttl_generate_dot_files (description, model, prefixes[i], output_file);
diff --git a/docs/tools/tracker-utils.c b/docs/tools/tracker-utils.c
index 5b7f7e686..7a70f3331 100644
--- a/docs/tools/tracker-utils.c
+++ b/docs/tools/tracker-utils.c
@@ -26,377 +26,6 @@
#include "tracker-utils.h"
-enum {
- INSERT_BEFORE,
- INSERT_AFTER
-};
-
-static void
-class_get_parent_hierarchy (TrackerOntologyModel *model,
- const gchar *class_name,
- GList **list)
-{
- TrackerOntologyClass *klass;
- GList *l, *elem;
-
- /* Ensure we only got the same class there once */
- elem = g_list_find_custom (*list, class_name,
- (GCompareFunc) g_strcmp0);
- if (elem)
- *list = g_list_delete_link (*list, elem);
- *list = g_list_prepend (*list, (gpointer) class_name);
-
- klass = tracker_ontology_model_get_class (model, class_name);
- if (!klass)
- return;
-
-
- for (l = klass->superclasses; l; l = l->next) {
- class_get_parent_hierarchy (model, l->data, list);
- }
-}
-
-static GList *
-class_get_hierarchy (TrackerOntologyModel *model,
- TrackerOntologyClass *klass)
-{
- GList *hierarchy = NULL, *l;
-
- /* Order is: parents, this class, and children. Guaranteed
- * to be in an order where all parents are before a child.
- * We first prepend all children, and then find out the
- * upwards hierarchy recursively.
- */
- for (l = klass->subclasses; l; l = l->next) {
- hierarchy = g_list_prepend (hierarchy, l->data);
- }
-
- class_get_parent_hierarchy (model, klass->classname, &hierarchy);
-
- return hierarchy;
-}
-
-typedef struct {
- TrackerOntologyClass *class;
- GList *hierarchy;
- GHashTable *resolved_children;
- GHashTable *resolved_parents;
- GHashTable *placed;
- GPtrArray *strings;
-} HierarchyContext;
-
-static HierarchyString *
-hierarchy_string_new (void)
-{
- HierarchyString *str;
-
- str = g_new0 (HierarchyString, 1);
- str->before = g_string_new ("");
- str->after = g_string_new ("");
- str->link_label = g_string_new ("");
-
- return str;
-}
-
-static void
-hierarchy_string_free (HierarchyString *str)
-{
- g_string_free (str->before, TRUE);
- g_string_free (str->after, TRUE);
- g_string_free (str->link_label, TRUE);
- g_free (str);
-}
-
-static void
-hierarchy_string_append (HierarchyString *str,
- int pos,
- const gchar *substr)
-{
- if (pos == INSERT_BEFORE)
- g_string_append (str->before, substr);
- else
- g_string_append (str->after, substr);
-
- str->visible_len += g_utf8_strlen (substr, -1);
-}
-
-static void
-hierarchy_string_append_link (HierarchyString *str,
- TrackerOntologyClass *klass)
-{
- g_string_append (str->link_label, klass->shortname);
- str->class = klass;
- str->visible_len += g_utf8_strlen (klass->shortname, -1);
-}
-
-static GList *
-list_filter (GList *original,
- GList *valid)
-{
- GList *l, *filtered = NULL;
-
- for (l = original; l; l = l->next) {
- if (!g_list_find_custom (valid, l->data,
- (GCompareFunc) g_strcmp0))
- continue;
-
- filtered = g_list_prepend (filtered, l->data);
- }
-
- return filtered;
-}
-
-static HierarchyContext *
-hierarchy_context_new (TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- HierarchyContext *context;
- GList *l;
-
- context = g_new0 (HierarchyContext, 1);
- context->class = klass;
- context->hierarchy = class_get_hierarchy (model, klass);
- context->placed = g_hash_table_new (g_str_hash, g_str_equal);
- context->resolved_parents = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- NULL,
- (GDestroyNotify) g_list_free);
- context->resolved_children = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- NULL,
- (GDestroyNotify) g_list_free);
- context->strings = g_ptr_array_new_with_free_func ((GDestroyNotify) hierarchy_string_free);
-
- for (l = context->hierarchy; l; l = l->next) {
- TrackerOntologyClass *cl = tracker_ontology_model_get_class (model, l->data);
-
- g_hash_table_insert (context->resolved_parents,
- cl->classname,
- list_filter (cl->superclasses,
- context->hierarchy));
- g_hash_table_insert (context->resolved_children,
- cl->classname,
- list_filter (cl->subclasses,
- context->hierarchy));
-
- g_ptr_array_add (context->strings, hierarchy_string_new ());
- }
-
- return context;
-}
-
-static void
-hierarchy_context_free (HierarchyContext *context)
-{
- g_list_free (context->hierarchy);
- g_ptr_array_unref (context->strings);
- g_hash_table_unref (context->placed);
- g_hash_table_unref (context->resolved_parents);
- g_hash_table_unref (context->resolved_children);
- g_free (context);
-}
-
-static GList *
-hierarchy_context_get_single_parented_children (HierarchyContext *context,
- TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- GList *filtered = NULL, *children, *l;
-
- children = g_hash_table_lookup (context->resolved_children,
- klass->classname);
-
- for (l = children; l; l = l->next) {
- GList *parents;
-
- parents = g_hash_table_lookup (context->resolved_parents, l->data);
-
- if (g_list_length (parents) == 1)
- filtered = g_list_prepend (filtered, l->data);
- }
-
- return filtered;
-}
-
-static void
-fill_padding (HierarchyString *str,
- gint pos,
- gint max_len,
- gchar *substr)
-{
- gint padding = max_len - str->visible_len;
-
- if (padding <= 0)
- return;
-
- while (padding > 0) {
- hierarchy_string_append (str, pos, substr);
- padding--;
- }
-}
-
-static gboolean
-check_parents_placed (GList *parents,
- GHashTable *ht)
-{
- GList *l;
-
- for (l = parents; l; l = l->next) {
- if (!g_hash_table_lookup (ht, l->data))
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-hierarchy_context_resolve_class (HierarchyContext *context,
- TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- GList *l = g_list_find_custom (context->hierarchy, klass->classname,
- (GCompareFunc) g_strcmp0);
- gint pos = g_list_position (context->hierarchy, l);
- GList *children, *parents;
- HierarchyString *str;
- gboolean is_child;
-
- if (pos < 0)
- return;
-
- parents = g_hash_table_lookup (context->resolved_parents,
- klass->classname);
-
- if (g_list_length (parents) > 1) {
- gboolean first_pending = TRUE;
- gint i, max_len = 0;
-
- /* This class has more than one parent in the current graph,
- * those paint the lines on the right side.
- */
-
- /* Step 1: Find the longest string */
- first_pending = TRUE;
- for (i = 0, l = context->hierarchy; i < pos && l; i++, l = l->next) {
- is_child = g_list_find_custom (klass->superclasses, l->data,
- (GCompareFunc) g_strcmp0) != NULL;
- if (!is_child && first_pending)
- continue;
-
- str = g_ptr_array_index (context->strings, i);
- max_len = MAX (max_len, str->visible_len);
- }
-
- /* Step 2: append the line art, we must fill in some padding if
- * necessary.
- */
- first_pending = TRUE;
- for (i = 0, l = context->hierarchy; i < pos && l; i++, l = l->next) {
- is_child = g_list_find_custom (klass->superclasses, l->data,
- (GCompareFunc) g_strcmp0) != NULL;
-
- if (!is_child && first_pending)
- continue;
-
- str = g_ptr_array_index (context->strings, i);
-
- fill_padding (str, INSERT_AFTER, max_len, is_child ? "─" : " ");
-
- if (first_pending) {
- hierarchy_string_append (str, INSERT_AFTER, "──┐");
- first_pending = FALSE;
- } else if (is_child) {
- hierarchy_string_append (str, INSERT_AFTER, "──┤");
- } else {
- hierarchy_string_append (str, INSERT_AFTER, " │");
- }
- }
-
- /* Step 3: Finally, print the current class */
- str = g_ptr_array_index (context->strings, pos);
- fill_padding (str, INSERT_BEFORE, max_len - 1, " ");
-
- hierarchy_string_append (str, INSERT_BEFORE, " └── ");
- hierarchy_string_append_link (str, klass);
- hierarchy_string_append (str, INSERT_AFTER, " ");
- } else {
- /* The current class has only 1 parent, lineart for those is
- * displayed on the left side.
- */
-
- /* Step 1: Print the current class */
- str = g_ptr_array_index (context->strings, pos);
- hierarchy_string_append_link (str, klass);
- hierarchy_string_append (str, INSERT_AFTER, " ");
-
- /* Step 2: Modify all strings downwards, adding the lineart
- * necessary for all children of this class.
- */
- children = hierarchy_context_get_single_parented_children (context, klass, model);
- l = l->next;
- pos++;
-
- for (; l; l = l->next, pos++) {
- guint len = g_list_length (children);
- GList *cur;
-
- str = g_ptr_array_index (context->strings, pos);
- cur = g_list_find_custom (children, l->data,
- (GCompareFunc) g_strcmp0);
- is_child = (cur != NULL);
-
- if (is_child) {
- if (len > 1)
- hierarchy_string_append (str, INSERT_BEFORE, "├── ");
- else if (len == 1)
- hierarchy_string_append (str, INSERT_BEFORE, "╰── ");
-
- children = g_list_delete_link (children, cur);
- g_hash_table_insert (context->placed,
- l->data, GINT_TO_POINTER (TRUE));
- } else {
- if (len > 0)
- hierarchy_string_append (str, INSERT_BEFORE, "│ ");
- else if (len == 0 &&
- !g_hash_table_lookup (context->placed, l->data)) {
- GList *cl_parents;
-
- cl_parents = g_hash_table_lookup (context->resolved_parents, l->data);
-
- if (g_list_length (cl_parents) == 1 ||
- !check_parents_placed (cl_parents, context->placed)) {
- hierarchy_string_append (str, INSERT_BEFORE, " ");
- }
- }
- }
- }
- }
-}
-
-GPtrArray *
-class_get_parent_hierarchy_strings (TrackerOntologyClass *klass,
- TrackerOntologyModel *model)
-{
- HierarchyContext *context;
- GList *c;
- GPtrArray *strings = NULL;
-
- context = hierarchy_context_new (klass, model);
-
- /* Proceed from parent to child classes, populating the
- * context->strings array.
- */
- for (c = context->hierarchy; c; c = c->next) {
- TrackerOntologyClass *cl = tracker_ontology_model_get_class (model, c->data);
- hierarchy_context_resolve_class (context, cl, model);
- }
-
- strings = g_ptr_array_ref (context->strings);
- hierarchy_context_free (context);
-
- return strings;
-}
-
static gchar *
link_from_shortname (const gchar *shortname)
{