From 6f61b537d2b207aedeb8c0cd230522a532550d17 Mon Sep 17 00:00:00 2001 From: Dodji Date: Tue, 16 Mar 2004 21:12:08 +0000 Subject: Merged with libcroco--mainline--0.1--patch-22 2004-03-16 Dodji Merged with libcroco--mainline--0.1--patch-22 --- docs/examples/cssom-example-1.c | 10 +- docs/examples/sac-example-1.c | 5 +- docs/examples/sac-example-2.c | 16 +-- docs/examples/selection-example-1.c | 267 ++++++++++++++++++++---------------- 4 files changed, 162 insertions(+), 136 deletions(-) (limited to 'docs') diff --git a/docs/examples/cssom-example-1.c b/docs/examples/cssom-example-1.c index 663f86f..a41165e 100644 --- a/docs/examples/cssom-example-1.c +++ b/docs/examples/cssom-example-1.c @@ -8,19 +8,15 @@ * *To compile it using gcc, type * - *gcc -g `croco-config --cflags` `croco-config --libs` -o cssom-example-1 cssom-example-1.c + *gcc -g -Wall `croco-config --cflags` `croco-config --libs` -o cssom-example-1 cssom-example-1.c * *Prior to that, you must have compiled and installed libcroco, of course. * - *@author Dodji Seketeli - */ - -/* - *$Id$ + *@author Dodji Seketeli */ #include -#include +#include /** *Displays the usage of this program. diff --git a/docs/examples/sac-example-1.c b/docs/examples/sac-example-1.c index c7fd410..6e30eaa 100644 --- a/docs/examples/sac-example-1.c +++ b/docs/examples/sac-example-1.c @@ -9,7 +9,7 @@ * *To compile this file, type: * - *gcc -g -o sac-example-1 `croco-config --cflags` `croco-config --libs` sac-example-1.c + *gcc -g -Wall -o sac-example-1 `croco-config --cflags` `croco-config --libs` sac-example-1.c * *Make sure you have compiled and installed libcroco prior to trying to *compile this file :) @@ -23,7 +23,8 @@ *Initial Author: Dodji Seketeli */ -#include +#include +#include /** *This is a callback function that will diff --git a/docs/examples/sac-example-2.c b/docs/examples/sac-example-2.c index f8a0e9b..a9aa9e4 100644 --- a/docs/examples/sac-example-2.c +++ b/docs/examples/sac-example-2.c @@ -20,7 +20,7 @@ * *To compile this file, type: * - *gcc -g -o sac-example-2 `croco-config --cflags` `croco-config --libs` sac-example-2.c + *gcc -g -Wall -o sac-example-2 `croco-config --cflags` `croco-config --libs` sac-example-2.c * *Make sure you have compiled and installed libcroco prior to trying to *compile this file :) @@ -33,8 +33,9 @@ * *Initial Author: Dodji Seketeli */ +#include #include -#include +#include /** *A Context that will hold the @@ -45,10 +46,10 @@ struct MyFooContext { /**the total number of rulesets in the stylesheet.*/ - unsigned long nb_rulesets ; + int nb_rulesets ; /**the number of property per ruleset.*/ - unsigned long nb_props_per_ruleset ; + int nb_props_per_ruleset ; } ; /** @@ -131,7 +132,8 @@ start_selector_cb (CRDocHandler *a_handler, static void property_cb (CRDocHandler *a_handler, GString *a_name, - CRTerm *a_value) + CRTerm *a_value, + gboolean a_important) { struct MyFooContext *context = NULL ; @@ -241,7 +243,7 @@ main (int argc, char **argv) *available now, so this is *a bit redundant... */ - display_usage ((unsigned char*)argv[0]) ; + /*display_usage ((unsigned char*)argv[0]) ;*/ } } @@ -343,7 +345,5 @@ main (int argc, char **argv) */ cr_parser_destroy (parser) ; - cr_doc_handler_unref (sac_handler) ; - return 0 ; } diff --git a/docs/examples/selection-example-1.c b/docs/examples/selection-example-1.c index 4932a86..3fb9dfe 100644 --- a/docs/examples/selection-example-1.c +++ b/docs/examples/selection-example-1.c @@ -5,156 +5,185 @@ * * To compile it using gcc, type * - * gcc -g `croco-config --cflags` `croco-config --libs` -o selection-example-1 selection-example-1.c + * gcc -g -Wall `croco-config --cflags` `croco-config --libs` -o selection-example-1 selection-example-1.c * - * @author Stefan Seefeld + * Initial author: Stefan Seefeld. */ -#include +#include #include #include -void usage_and_exit(char *progname) +void +usage_and_exit (char *progname) { - fprintf(stderr, "Usage: %s \n", progname); - exit(-1); + fprintf (stderr, + "Usage: %s \n", + progname); + exit(-1); } struct workspace { - xmlDoc *document; - xmlXPathContext *xpath; - xmlXPathObject *result; - CRStyleSheet *stylesheet; - CRCascade *cascade; - CRSelEng *selector; + xmlDoc *document; + xmlXPathContext *xpath; + xmlXPathObject *result; + CRStyleSheet *stylesheet; + CRCascade *cascade; + CRSelEng *selector; }; /** *construct workspace members in order... * return 0 on success and -1 on error */ -int init(struct workspace *ws, char **args) +int +init (struct workspace *ws, char **args) { - short i = 0; - enum CRStatus status = CR_OK; - - ws->document = 0; - ws->xpath = 0; - ws->result = 0; - ws->stylesheet = 0; - ws->cascade = 0; - ws->selector = 0; - - - ws->document = xmlParseFile(args[0]); - if (!ws->document) - { - fprintf(stderr, "could not parse the document %s", args[0]); - return -1; - } - ws->xpath = xmlXPathNewContext(ws->document); - if (!ws->xpath) - { - fprintf(stderr, "Error: unable to create new XPath context\n"); - return -1; - } - ws->result = xmlXPathEvalExpression((xmlChar *)args[2], ws->xpath); - if (!ws->result) - { - fprintf(stderr, "Error: unable to evaluate xpath expression\n"); - return -1; - } - if (ws->result->type != XPATH_NODESET || !ws->result->nodesetval) - { - fprintf(stderr, "Error: xpath does not evaluate to a node set\n"); - return -1; - } - - status = cr_om_parser_simply_parse_file((const guchar*)args[1] /*sheet*/, - CR_ASCII /*the encoding*/, - &ws->stylesheet); - if (status != CR_OK || !ws->stylesheet) - { - fprintf(stderr, "could not parse the stylesheet %s", args[1]); - return -1; - } - ws->cascade = cr_cascade_new(ws->stylesheet, 0, 0); - ws->selector = cr_sel_eng_new(); + enum CRStatus status = CR_OK; + + ws->document = 0; + ws->xpath = 0; + ws->result = 0; + ws->stylesheet = 0; + ws->cascade = 0; + ws->selector = 0; + + + ws->document = xmlParseFile(args[0]); + if (!ws->document) + { + fprintf(stderr, "could not parse the document %s", args[0]); + return -1; + } + ws->xpath = xmlXPathNewContext(ws->document); + if (!ws->xpath) + { + fprintf(stderr, "Error: unable to create new XPath context\n"); + return -1; + } + ws->result = xmlXPathEvalExpression((xmlChar *)args[2], ws->xpath); + if (!ws->result) + { + fprintf(stderr, "Error: unable to evaluate xpath expression\n"); + return -1; + } + if (ws->result->type != XPATH_NODESET || !ws->result->nodesetval) + { + fprintf(stderr, "Error: xpath does not evaluate to a node set\n"); + return -1; + } + + status = cr_om_parser_simply_parse_file((const guchar*)args[1] /*sheet*/, + CR_ASCII /*the encoding*/, + &ws->stylesheet); + if (status != CR_OK || !ws->stylesheet) + { + fprintf(stderr, "could not parse the stylesheet %s", args[1]); + return -1; + } + ws->cascade = cr_cascade_new(ws->stylesheet, 0, 0); + ws->selector = cr_sel_eng_new(); + return 1 ; } /* ...and destruct in reverse order*/ -void fini(struct workspace *ws) +void +fini(struct workspace *ws) { - if (ws->selector) - { - cr_sel_eng_destroy(ws->selector); - ws->selector = NULL ; - } - if (ws->cascade) - { - cr_cascade_destroy(ws->cascade); - ws->cascade = NULL ; - } - - if (ws->result) - { - xmlXPathFreeObject(ws->result); - ws->result = NULL ; - } - if (ws->xpath) - { - xmlXPathFreeContext(ws->xpath); - ws->xpath = NULL ; - } - if (ws->document) - { - xmlFreeDoc(ws->document); - ws->document = NULL ; - } + if (ws->selector) + { + cr_sel_eng_destroy(ws->selector); + ws->selector = NULL ; + } + if (ws->cascade) + { + cr_cascade_destroy(ws->cascade); + ws->cascade = NULL ; + } + + if (ws->result) + { + xmlXPathFreeObject(ws->result); + ws->result = NULL ; + } + if (ws->xpath) + { + xmlXPathFreeContext(ws->xpath); + ws->xpath = NULL ; + } + if (ws->document) + { + xmlFreeDoc(ws->document); + ws->document = NULL ; + } + xmlCleanupParser () ; } -void print_property(gpointer name, gpointer decl, gpointer data) +void +print_properties_real (CRPropList *proplist) { - CRDeclaration *declaration = (CRDeclaration *)decl; - printf("%s\n", (char *)cr_declaration_to_string(declaration, 0)); + CRDeclaration *decl = NULL ; + CRPropList *cur_pair = NULL ; + + for (cur_pair = proplist ; cur_pair ; + cur_pair= cr_prop_list_get_next (cur_pair)) { + decl = NULL ; + gchar *str = NULL ; + cr_prop_list_get_decl (cur_pair, &decl) ; + if (decl) { + str = cr_declaration_to_string (decl, 0) ; + if (str) { + printf ("%s\n", str) ; + g_free (str); + str = NULL ; + } + } + } } -void print_properties(struct workspace *ws) +void +print_properties (struct workspace *ws) { - enum CRStatus status; - GHashTable *table = g_hash_table_new(g_str_hash, g_str_equal); - xmlNode *node = ws->result->nodesetval->nodeTab[0]; - if (!table) - { - fprintf(stderr, "unable to allocate a hash table\n"); - return; - } - status = cr_sel_eng_get_matched_properties_from_cascade(ws->selector, - ws->cascade, - node, - &table); - if (status != CR_OK) - fprintf(stderr, "Error retrieving properties\n"); - else - { - printf("properties for node %s :\n", (char *)xmlGetNodePath(node)); - g_hash_table_foreach(table, print_property, 0); - } - g_hash_table_destroy(table); + enum CRStatus status; + CRPropList *prop_list = NULL; + xmlNode *node = ws->result->nodesetval->nodeTab[0]; + + status = cr_sel_eng_get_matched_properties_from_cascade + (ws->selector, ws->cascade, + node, &prop_list); + + if (status != CR_OK) + fprintf(stderr, "Error retrieving properties\n"); + else + { + xmlChar *prop = NULL ; + prop = xmlGetNodePath(node) ; + if (prop) { + printf("properties for node %s :\n", prop); + xmlFree (prop) ; + prop = NULL ; + } + print_properties_real (prop_list) ; + } + cr_prop_list_destroy (prop_list) ; } -int main(int argc, char **argv) +int +main(int argc, char **argv) { - struct workspace ws; - if (argc != 4) usage_and_exit(argv[0]); - if (!init(&ws, argv + 1)) fini(&ws); + struct workspace ws; + if (argc != 4) usage_and_exit(argv[0]); + if (!init(&ws, argv + 1)) { + fini(&ws); + return -1 ; + } - if (ws.result->nodesetval->nodeNr == 0) - printf("no matching nodes found\n"); - else - print_properties(&ws); + if (ws.result->nodesetval->nodeNr == 0) + printf("no matching nodes found\n"); + else + print_properties(&ws); - fini(&ws); - return 0; + fini(&ws); + return 0; } -- cgit v1.2.1