summaryrefslogtreecommitdiffstats
path: root/guththila/include/guththila.h
diff options
context:
space:
mode:
Diffstat (limited to 'guththila/include/guththila.h')
-rw-r--r--guththila/include/guththila.h353
1 files changed, 353 insertions, 0 deletions
diff --git a/guththila/include/guththila.h b/guththila/include/guththila.h
new file mode 100644
index 0000000..663883d
--- /dev/null
+++ b/guththila/include/guththila.h
@@ -0,0 +1,353 @@
+
+/*
+ * 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
+