1 /* -*- Mode: C; indent-tabs-mode:nil; c-basic-offset:8 -*- */
2
3 /**
4 *This is an example that shows how to use
5 *the CSSOM api of the libcroco CSS2 parsing library.
6 *It just parses the CSS document given in argument and
7 *it dumps it (serializes) it on the screen.
8 *
9 *To compile it using gcc, type
10 *
11 *gcc -g -Wall `croco-0.6-config --cflags` `croco-0.6-config --libs` -o cssom-example-1 cssom-example-1.c
12 *
13 *Prior to that, you must have compiled and installed libcroco, of course.
14 *
15 *@author Dodji Seketeli
16 */
17
18 #include <string.h>
19 #include <libcroco/libcroco.h>
20
21 /**
22 *Displays the usage of this program.
23 *@param prg_name the name of the program.
24 */
25 void
display_usage(char * prg_name)26 display_usage (char *prg_name)
27 {
28 printf ("\nusage: %s [options] <css file to parse>\n\n",
29 prg_name) ;
30 printf ("\twhere options are:\n") ;
31 printf ("\t--help|h\tdisplays this help\n") ;
32 printf ("\n") ;
33 }
34
35
36 /**
37 *Main entry point.
38 *This function illustrates a way to use libcroco.
39 *In this example, we will use a CSS Object Model parser
40 *to parse a cascading style sheet and dump what we have parsed on stdout.
41 *
42 *The goal of the object model parser is to parse a css and build
43 *an abstract tree out of it. One can then walk the tree to perform
44 *whatever action he wants. In our case, the function used to
45 *dump the tree on stdout will walk the tree and dump each one of its
46 *components (a.k.a. css statements).
47 */
48 int
main(int argc,char ** argv)49 main (int argc, char **argv)
50 {
51 short i = 0 ;
52 enum CRStatus status = CR_OK ;
53 CRStyleSheet *stylesheet = NULL ;
54
55 /*first parse command line arguments*/
56 for (i = 1 ; i < argc ; i++)
57 {
58 if (argv[i][0] != '-')
59 break ;
60 if (!strcmp (argv[i],"--help")
61 || !strcmp (argv[i], "-h"))
62 {
63 display_usage (argv[0]) ;
64 return 0 ;
65 }
66 else
67 {
68 display_usage (argv[0]) ;
69 return 0 ;
70 }
71 }
72 if (i >= argc)
73 {
74 display_usage (argv[0]) ;
75 return 0;
76 }
77
78 /*****************************************************
79 *Enough plumbering... now, the real libcroco stuffs.
80 ***************************************************/
81
82 /*
83 *What we want here is to simply parse
84 *a CSS document using the cssom api.
85 */
86 status = cr_om_parser_simply_parse_file ((const guchar*)argv[i] /*sheet*/,
87 CR_ASCII /*the encoding*/,
88 &stylesheet) ;
89 if (status == CR_OK && stylesheet)
90 {
91 /*
92 *everything went well,
93 *so dump the stylesheet on stdout.
94 */
95 cr_stylesheet_dump (stylesheet, stdout) ;
96 }
97
98 if (stylesheet)
99 {
100 /*
101 *free the the memory used to hold the css
102 *object model
103 */
104 cr_stylesheet_destroy (stylesheet) ;
105 stylesheet = NULL ;
106 }
107
108 return 0 ;
109 }
110