Finished base XML generation code

This commit is contained in:
Gergely Polonkai 2013-09-18 22:31:14 +02:00
parent e4033f0702
commit cda22746ff

View File

@ -661,14 +661,20 @@ ag_chart_create_svg(AgChart *chart)
ascmcs_node = NULL,
houses_node = NULL,
bodies_node = NULL,
aspects_node = NULL,
antiscia_node = NULL,
node = NULL;
gchar *value;
GList *houses,
*house,
*planets,
*planet;
GError *err = NULL;
*planet,
*aspect,
*antiscion;
const GswePlanetData *planet_data;
const GsweAspectData *aspect_data;
GEnumClass *planets_class,
*aspects_class,
*antiscia_class;
root_node = xmlDocGetRootElement(doc);
@ -724,12 +730,11 @@ ag_chart_create_svg(AgChart *chart)
// Begin <bodies> node
bodies_node = xmlNewChild(root_node, NULL, BAD_CAST "bodies", NULL);
planets = gswe_moment_get_all_planets(GSWE_MOMENT(chart));
planets_class = g_type_class_ref(GSWE_TYPE_PLANET);
for (planet = planets; planet; planet = g_list_next(planet)) {
for (planet = gswe_moment_get_all_planets(GSWE_MOMENT(chart)); planet; planet = g_list_next(planet)) {
planet_data = planet->data;
// TODO: HACK HACK HACK! SWE-GLib has a HUGE mistake here!
planet_data = gswe_moment_get_planet(GSWE_MOMENT(chart), planet_data->planet_id, &err);
GEnumValue *enum_value;
if (
(planet_data->planet_id == GSWE_PLANET_ASCENDENT)
@ -741,7 +746,8 @@ ag_chart_create_svg(AgChart *chart)
node = xmlNewChild(bodies_node, NULL, BAD_CAST "body", NULL);
xmlNewProp(node, BAD_CAST "name", BAD_CAST planet_data->planet_info->name);
enum_value = g_enum_get_value(G_ENUM_CLASS(planets_class), planet_data->planet_id);
xmlNewProp(node, BAD_CAST "name", BAD_CAST enum_value->value_name);
value = g_malloc0(12);
g_ascii_dtostr(value, 12, planet_data->position);
@ -749,6 +755,62 @@ ag_chart_create_svg(AgChart *chart)
g_free(value);
}
g_debug("Generating aspects table");
// Begin <aspects> node
aspects_node = xmlNewChild(root_node, NULL, BAD_CAST "aspects", NULL);
aspects_class = g_type_class_ref(GSWE_TYPE_ASPECT);
for (aspect = gswe_moment_get_all_aspects(GSWE_MOMENT(chart)); aspect; aspect = g_list_next(aspect)) {
GEnumValue *enum_value;
aspect_data = aspect->data;
if (aspect_data->aspect == GSWE_ASPECT_NONE) {
continue;
}
node = xmlNewChild(aspects_node, NULL, BAD_CAST "aspect", NULL);
enum_value = g_enum_get_value(G_ENUM_CLASS(planets_class), aspect_data->planet1->planet_id);
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_name);
enum_value = g_enum_get_value(G_ENUM_CLASS(planets_class), aspect_data->planet2->planet_id);
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_name);
enum_value = g_enum_get_value(G_ENUM_CLASS(aspects_class), aspect_data->aspect);
xmlNewProp(node, BAD_CAST "type", BAD_CAST enum_value->value_name);
}
g_type_class_unref(aspects_class);
g_debug("Generating antiscia table");
// Begin <antiscia> node
antiscia_node = xmlNewChild(root_node, NULL, BAD_CAST "antiscia", NULL);
antiscia_class = g_type_class_ref(GSWE_TYPE_ANTISCION_AXIS);
for (antiscion = gswe_moment_get_all_antiscia(GSWE_MOMENT(chart)); antiscion; antiscion = g_list_next(antiscion)) {
GsweAntiscionData *antiscion_data = antiscion->data;
GEnumValue *enum_value;
if (antiscion_data->axis == GSWE_ANTISCION_AXIS_NONE) {
continue;
}
node = xmlNewChild(antiscia_node, NULL, BAD_CAST "antiscia", NULL);
enum_value = g_enum_get_value(G_ENUM_CLASS(planets_class), antiscion_data->planet1->planet_id);
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_name);
enum_value = g_enum_get_value(G_ENUM_CLASS(planets_class), antiscion_data->planet2->planet_id);
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_name);
enum_value = g_enum_get_value(G_ENUM_CLASS(antiscia_class), antiscion_data->axis);
xmlNewProp(node, BAD_CAST "axis", BAD_CAST enum_value->value_name);
}
g_type_class_unref(planets_class);
xmlSaveFormatFileEnc("-", doc, "UTF-8", 1);
xmlFreeDoc(doc);
}