blob: 663883d7bdbd4a7f715052db67ab10b5c88a156b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef GUTHTHILA_H
#define GUTHTHILA_H
#include <guththila_defines.h>
#include <guththila_token.h>
#include <guththila_reader.h>
#include <guththila_xml_writer.h>
#include <guththila_attribute.h>
#include <guththila_namespace.h>
#include <guththila_buffer.h>
#include <guththila_stack.h>
#include <guththila_error.h>
#include <axutil_utils.h>
/*
All the functions in this library does not check weather the given arguments are NULL.
It is the responsblity of the user to check weather the arguments contain NULL values.
*/
EXTERN_C_START()
enum guththila_status
{
S_0 = 0,
S_1,
S_2,
S_3
};
enum guththila_UTF16_endianess
{
None = 1,
LE,
BE
};
typedef enum guththila_type
{
type_file_name = 0,
type_memory_buffer,
type_reader,
type_io
} guththila_type_t;
enum guththila_event_types
{
GUTHTHILA_START_DOCUMENT =0,
GUTHTHILA_END_ELEMENT,
GUTHTHILA_CHARACTER,
GUTHTHILA_ENTITY_REFERANCE,
GUTHTHILA_COMMENT,
GUTHTHILA_SPACE,
GUTHTHILA_START_ELEMENT,
GUTHTHILA_EMPTY_ELEMENT
};
typedef struct guththila_s
{
guththila_tok_list_t tokens; /* Token cache */
guththila_buffer_t buffer; /* Holding incoming xml string */
guththila_reader_t *reader; /* Reading the data */
guththila_token_t *prefix; /* Prefix of the xml element */
guththila_token_t *name; /* xml element local name */
guththila_token_t *value; /* text of a xml element */
guththila_stack_t elem; /* elements are put in a stack */
guththila_stack_t attrib; /* Attributes are put in a stack */
guththila_stack_t namesp; /* namespaces are put in a stack */
int status;
int guththila_event; /* Current event */
size_t next; /* Keep track of the position in the xml string */
int last_start; /* Keep track of the starting position of the last token */
guththila_token_t *temp_prefix; /* Temporery location for prefixes */
guththila_token_t *temp_name; /* Temporery location for names */
guththila_token_t *temp_tok; /* We don't know this until we close it */
} guththila_t;
/*
* An element will contain one of these things if it has namespaces
* */
typedef struct guththila_elem_namesp_s
{
guththila_namespace_t *namesp; /* Array of namespaces */
int no; /*Number of namespace in the element */
int size; /* Allocated size */
} guththila_elem_namesp_t;
/*
* Element.
*/
typedef struct guththila_element_s
{
guththila_token_t *name; /* local name */
guththila_token_t *prefix; /* prefix */
int is_namesp; /* Positive if a namespace is present */
} guththila_element_t;
/* Initialize the parser */
GUTHTHILA_EXPORT int GUTHTHILA_CALL
guththila_init(guththila_t * m, void *reader,
const axutil_env_t * env);
/* Uninitialize the parser */
GUTHTHILA_EXPORT int GUTHTHILA_CALL
guththila_un_init(guththila_t * m, const axutil_env_t * env);
/* Still not used */
typedef void(GUTHTHILA_CALL * guththila_error_func)(void *arg,
const guththila_char_t *msg,
guththila_error_level level,
void *locator);
/*
* Parse the xml and return an event. If something went wrong it will return -1.
* The events are of the type guththila_event_types. According to the event
* user can get the required information using the appriate functions.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT int GUTHTHILA_CALL
guththila_next(guththila_t * g, const axutil_env_t * env);
/*
* Return the number of attributes in the current element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT int GUTHTHILA_CALL
guththila_get_attribute_count(guththila_t * g, const axutil_env_t * env);
/*
* Return the attribute name.
* @param g pointer to a guththila_t structure
* @param att pointer to a attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL
guththila_get_attribute_name(guththila_t * g, guththila_attr_t * att,
const axutil_env_t * env);
/*
* Return the attribute value.
* @param g pointer to a guththila_t structure
* @param att pointer to a attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL
guththila_get_attribute_value(guththila_t * g,
guththila_attr_t * att,
const axutil_env_t * env);
/*
* Return the attribute prefix.
* @param g pointer to a guththila_t structure
* @param att pointer to a attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_attribute_prefix(guththila_t * g,
guththila_attr_t * att,
const axutil_env_t * env);
/*
* Return the attribute
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_attr_t *GUTHTHILA_CALL
guththila_get_attribute(guththila_t * g, const axutil_env_t * env);
/*
* Return the name of the attribute by the attribute bumber.
* First attribute will be 1.
* @param g pointer to a guththila_t structure
* @param index position of the attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_attribute_name_by_number(guththila_t * g, int index,
const axutil_env_t *env);
/*
* Return the attribute value by number.
* First attribute will be 1.
* @param g pointer to a guththila_t structure
* @param index position of the attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_attribute_value_by_number(guththila_t * g, int index,
const axutil_env_t *env);
/*
* Return the prefix of the attribute.
* First attribute will be 1.
* @param g pointer to a guththila_t structure
* @param index position of the attribute
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_attribute_prefix_by_number(guththila_t * g, int index,
const axutil_env_t *env);
/*
* Return the name of the element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_name(guththila_t * g, const axutil_env_t * env);
/*
* Return the prefix of the element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_prefix(guththila_t * g, const axutil_env_t * env);
/*
* Return the text of the element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_value(guththila_t * g, const axutil_env_t * env);
/*
* Return the namespace of the element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_namespace_t *GUTHTHILA_CALL
guththila_get_namespace(guththila_t * g, const axutil_env_t * env);
/*
* Return the number of namespaces in the element.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT int GUTHTHILA_CALL
guththila_get_namespace_count(guththila_t * g, const axutil_env_t * env);
/*
* Return the namespace uri of the given namespace.
* @param g pointer to a guththila_t structure
* @param ns pointer to a namespace
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL
guththila_get_namespace_uri(guththila_t * g, guththila_namespace_t * ns,
const axutil_env_t * env);
/*
* Return the prefix of the namespace.
* @param g pointer to a guththila_t structure
* @param ns pointer to a namespace
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_namespace_prefix(guththila_t * p, guththila_namespace_t * ns,
const axutil_env_t * env);
/*
* Return the prefix of the namespace at the given position.
* First namespace will have the value 1.
* @param g pointer to a guththila_t structure
* @param index position of the namespace
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_namespace_prefix_by_number(guththila_t * g, int index,
const axutil_env_t *env);
/*
* Get the uri of the namespace at the given position.
* First namespace will have the value 1.
* @param g pointer to a guththila_t structure
* @param index position of the namespace
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_namespace_uri_by_number(guththila_t * g, int index,
const axutil_env_t *env);
/*
* Get the attribute namespace of the attribute at the given position.
* @param g pointer to a guththila_t structure
* @param index position of the namespace
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_attribute_namespace_by_number(guththila_t *g, int index,
const axutil_env_t *env);
/*
* Get the encoding. at the moment we don't support UNICODE
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_encoding(guththila_t * p, const axutil_env_t * env);
/*
* To do. Implement a proper error handling mechanism.
* @param g pointer to a guththila_t structure
* @param env the environment
*/
GUTHTHILA_EXPORT void GUTHTHILA_CALL
guththila_set_error_handler(guththila_t * m, guththila_error_func,
const axutil_env_t * env);
GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL
guththila_get_current_buffer(
guththila_t * m,
const axutil_env_t * env);
EXTERN_C_END()
#endif