#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlerror.h>
#include "assert.h"
#include "main.h"
#include "data.h"
#include "chromo.h"
#include "xmlsup.h"
#include "modsup.h"
#include "error.h"
#include "gettext.h"
Defines | |
#define | FAIL(msg, node) fatal(_(msg)) |
Convenience macro for XML parser. Same as fatal(). It automatically appends line number of the XML node with error. | |
#define | NOPROP(prop, node) fatal(_("Tag <%s> without required property '%s'"), node->name, prop) |
Convenience macro for XML parser. Use when a required XML node property is not defined. | |
#define | INVPROP(prop, node) fatal(_("Invalid value of property '%s' in tag <%s>"), prop, node->name) |
Convenience macro for XML parser. Use when a property has an invalid value (e.g. property is not an integer when it should be). | |
#define | XMLCHAR (xmlChar *) |
Cast to (xmlChar *). | |
#define | CHAR (char *) |
Cast to (char *). | |
Functions | |
static void | parser_fatal (const char *fmt, int no,...) |
Replacement for the fatal() function that adds line number to the message. | |
static void | parser_newprop_int (xmlNodePtr cur, const xmlChar *prop, int value) |
Add an integer property to a XML node. | |
static int | parser_getprop_int (xmlNodePtr cur, const xmlChar *prop) |
Get an integer property from a XML node. | |
static xmlChar * | parser_getprop_str (xmlNodePtr cur, const xmlChar *prop) |
Get a string property from a XML node. | |
static resource * | parser_event_get_res (xmlNodePtr cur, resourcetype *restype) |
Get a resource definition for an event from the XML tree. | |
static void | parser_event_add_res (xmlNodePtr cur, resource *res) |
Add a resource definition for an event to the XML tree. | |
static void | parser_info (xmlNodePtr cur) |
Parse miscellaneous information. | |
static moduleoption * | parser_options (xmlNodePtr cur, moduleoption *opt) |
Parse module options. | |
static void | parser_modules (xmlNodePtr cur) |
Parse modules. | |
static int | parser_event_restrictions (xmlNodePtr cur, int tupleid, int repeats) |
Parse restrictions for a single event and call proper restriction handlers. | |
static void | parser_events_restrictions (xmlNodePtr cur) |
Parse all event restrictions. | |
static void | parser_event (xmlNodePtr event, tupleinfo *tuple) |
Parse a single event. | |
static void | parser_events (xmlNodePtr cur) |
Parse all events. | |
static int | parser_resource_restrictions_one (xmlNodePtr cur, resource *res) |
Parse restrictions for a single resource and call proper handlers. | |
static void | parser_resource_restrictions (xmlNodePtr cur, resourcetype *restype) |
Parse all resource restrictions for a single resource type. | |
static void | parser_resources_restrictions (xmlNodePtr cur) |
Parse all resource restrictions. | |
static void | parser_resource (xmlNodePtr cur, resourcetype *restype) |
Parse all resources in a resource type. | |
static void | parser_restype (xmlNodePtr cur, int var) |
Define a new resource type. | |
static void | parser_resources (xmlNodePtr start) |
Parse all resource types. | |
void | parser_handler (void *ctx, const char *msg,...) |
Custom error handler for libxml. | |
static void | parser_libxml_init (char *filename) |
Parser initialization. | |
static void | parser_version_check (xmlNodePtr root) |
Check version of the configuration file. | |
int | parser_main (char *filename) |
Parses an XML configuration file. | |
static void | parser_clean (xmlNodePtr cur) |
Removes definitions of variable resources for an event in the XML tree. | |
static void | parser_remove_repeats (xmlNodePtr cur) |
Replaces event tags with repeats > 1 with multiple tags with repeats = 1. | |
void | parser_gettable (table *tab) |
Loads definitions of variable resources for all events in the XML tree to a table struct.tab Pointer to the table struct. | |
void | parser_addtable (table *tab) |
Saves definitions of variable resources for all events in the table struct to the XML tree.tab Pointer to the table struct. | |
void | parser_dump (FILE *f) |
Dumps XML tree into a file. | |
void | parser_exit () |
Free all memory allocated by the parser. | |
Variables | |
static xmlDocPtr | config |
XML Configuration file. |
#define CHAR (char *) |
Cast to (char *).
This macro should only be used when it is certain that the pointer contains a valid UTF-8 encoded NULL terminated string.
#define FAIL | ( | msg, | |||
node | ) | fatal(_(msg)) |
Convenience macro for XML parser. Same as fatal(). It automatically appends line number of the XML node with error.
msg | Error message. | |
node | Pointer to the XML node with error. |
#define INVPROP | ( | prop, | |||
node | ) | fatal(_("Invalid value of property '%s' in tag <%s>"), prop, node->name) |
Convenience macro for XML parser. Use when a property has an invalid value (e.g. property is not an integer when it should be).
prop | Name of the property | |
node | Pointer to the XML node with error. |
#define NOPROP | ( | prop, | |||
node | ) | fatal(_("Tag <%s> without required property '%s'"), node->name, prop) |
Convenience macro for XML parser. Use when a required XML node property is not defined.
prop | Name of the property. | |
node | Pointer to the XML node with error. |
#define XMLCHAR (xmlChar *) |
Cast to (xmlChar *).
This macro should only be used when it is certain that the pointer contains a valid UTF-8 encoded NULL terminated string.
void parser_addtable | ( | table * | tab | ) |
Saves definitions of variable resources for all events in the table struct to the XML tree.tab Pointer to the table struct.
Any previous definitions of variable resources are replaced.
static void parser_clean | ( | xmlNodePtr | cur | ) | [static] |
Removes definitions of variable resources for an event in the XML tree.
cur | Pointer to the <event> node in the XML tree. |
void parser_dump | ( | FILE * | f | ) |
Dumps XML tree into a file.
f | File to dump the XML tree to. |
static void parser_event | ( | xmlNodePtr | event, | |
tupleinfo * | tuple | |||
) | [static] |
Parse a single event.
event | Pointer to the <event> node. | |
tuple | Pointer to the tuple info struct for this event. |
static void parser_event_add_res | ( | xmlNodePtr | cur, | |
resource * | res | |||
) | [static] |
Add a resource definition for an event to the XML tree.
cur | Pointer to the <event> node. | |
res | Pointer to the resource to add. |
static resource* parser_event_get_res | ( | xmlNodePtr | cur, | |
resourcetype * | restype | |||
) | [static] |
Get a resource definition for an event from the XML tree.
cur | Pointer to the <event> node. | |
restype | Get a resource definition for this resource type. |
static int parser_event_restrictions | ( | xmlNodePtr | cur, | |
int | tupleid, | |||
int | repeats | |||
) | [static] |
Parse restrictions for a single event and call proper restriction handlers.
cur | Pointer to the <event> node. | |
tupleid | Tuple ID for this event. | |
repeats | Number of repeats of this event. |
static void parser_events | ( | xmlNodePtr | cur | ) | [static] |
Parse all events.
cur | Pointer to the <events> node. |
static void parser_events_restrictions | ( | xmlNodePtr | cur | ) | [static] |
Parse all event restrictions.
cur | Pointer to the <events> node. |
static void parser_fatal | ( | const char * | fmt, | |
int | no, | |||
... | ||||
) | [static] |
Replacement for the fatal() function that adds line number to the message.
fmt | Format string. | |
no | Line number. |
static int parser_getprop_int | ( | xmlNodePtr | cur, | |
const xmlChar * | prop | |||
) | [static] |
Get an integer property from a XML node.
Calls fatal() if property was not found or was not integer.
cur | Pointer to the XML node. | |
prop | Name of the property. |
static xmlChar* parser_getprop_str | ( | xmlNodePtr | cur, | |
const xmlChar * | prop | |||
) | [static] |
Get a string property from a XML node.
Calls fatal() if property was not found.
cur | Pointer to the XML node. | |
prop | Name of the property. |
static void parser_info | ( | xmlNodePtr | cur | ) | [static] |
Parse miscellaneous information.
cur | Pointer to the <info> node. |
static void parser_libxml_init | ( | char * | filename | ) | [static] |
Parser initialization.
filename | Name of the XML configuration file to open. |
int parser_main | ( | char * | filename | ) |
Parses an XML configuration file.
filename | Name of the configuration file. |
static void parser_modules | ( | xmlNodePtr | cur | ) | [static] |
Parse modules.
cur | Pointer to the <modules> node. |
static void parser_newprop_int | ( | xmlNodePtr | cur, | |
const xmlChar * | prop, | |||
int | value | |||
) | [static] |
Add an integer property to a XML node.
If a property with this name already exists it is overwritten.
cur | Pointer to the XML node. | |
prop | Name of the property. | |
value | Value of the property. |
static moduleoption* parser_options | ( | xmlNodePtr | cur, | |
moduleoption * | opt | |||
) | [static] |
Parse module options.
cur | Pointer to the <module> node. | |
opt | Pointer to the linked list of module options. |
static void parser_remove_repeats | ( | xmlNodePtr | cur | ) | [static] |
Replaces event tags with repeats > 1 with multiple tags with repeats = 1.
cur | Pointer to the <events> node in the XML tree. |
static void parser_resource | ( | xmlNodePtr | cur, | |
resourcetype * | restype | |||
) | [static] |
Parse all resources in a resource type.
cur | Pointer to the <resourcetype> node. | |
restype | Pointer to the resource type struct for this resource type. |
static void parser_resource_restrictions | ( | xmlNodePtr | cur, | |
resourcetype * | restype | |||
) | [static] |
Parse all resource restrictions for a single resource type.
cur | Pointer to the <resourcetype> node. | |
restype | Pointer to the resource type struct for this resource type. |
static int parser_resource_restrictions_one | ( | xmlNodePtr | cur, | |
resource * | res | |||
) | [static] |
Parse restrictions for a single resource and call proper handlers.
cur | Pointer to the <resource> node. | |
res | Pointer to the resource struct for this resource. |
static void parser_resources | ( | xmlNodePtr | start | ) | [static] |
Parse all resource types.
start | Pointer to the <resources> node. |
static void parser_resources_restrictions | ( | xmlNodePtr | cur | ) | [static] |
Parse all resource restrictions.
cur | Pointer to the <resources> node. |
static void parser_restype | ( | xmlNodePtr | cur, | |
int | var | |||
) | [static] |
Define a new resource type.
cur | pointer to the <resourcetype> node. | |
var | Set to 1 if this node is under <variable> node. |
static void parser_version_check | ( | xmlNodePtr | root | ) | [static] |
Check version of the configuration file.
root | Pointer to the root node of the XML tree. |