From: Enlightenment C. <no...@cv...> - 2006-12-28 18:23:03
|
Enlightenment CVS committal Author : leviathan Project : e17 Module : libs/engrave Dir : e17/libs/engrave/src/lib Modified Files: Engrave.h Makefile.am engrave.l engrave.y engrave_file.c engrave_file.h engrave_out.c engrave_parse.c engrave_parse.h Added Files: engrave_spectrum.c engrave_spectrum.h Log Message: Adding spectrum parsing and API =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/Engrave.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- Engrave.h 6 Sep 2006 07:31:31 -0000 1.14 +++ Engrave.h 28 Dec 2006 18:22:56 -0000 1.15 @@ -101,6 +101,7 @@ #include <engrave_data.h> #include <engrave_image.h> #include <engrave_font.h> +#include <engrave_spectrum.h> #include <engrave_program.h> #include <engrave_part_state.h> #include <engrave_part.h> =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/Makefile.am,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- Makefile.am 8 Feb 2006 04:38:47 -0000 1.12 +++ Makefile.am 28 Dec 2006 18:22:56 -0000 1.13 @@ -23,6 +23,7 @@ engrave_enums.h \ engrave_file.h \ engrave_font.h \ + engrave_spectrum.h \ engrave_style.h \ engrave_group.h \ engrave_image.h \ @@ -42,6 +43,7 @@ engrave_data.c \ engrave_file.c \ engrave_font.c \ + engrave_spectrum.c \ engrave_style.c \ engrave_group.c \ engrave_image.c \ =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave.l,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- engrave.l 8 Feb 2006 04:38:47 -0000 1.9 +++ engrave.l 28 Dec 2006 18:22:56 -0000 1.10 @@ -116,6 +116,8 @@ fit { KEYWORD_RETURN(FIT); } font { KEYWORD_RETURN(FONT); } fonts { KEYWORD_RETURN(FONTS); } +spectra { KEYWORD_RETURN(SPECTRA); } +spectrum { KEYWORD_RETURN(SPECTRUM); } styles { KEYWORD_RETURN(STYLES); } style { KEYWORD_RETURN(STYLE); } base { KEYWORD_RETURN(SBASE); } =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave.y,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- engrave.y 8 Feb 2006 04:38:47 -0000 1.15 +++ engrave.y 28 Dec 2006 18:22:56 -0000 1.16 @@ -46,6 +46,7 @@ %token SINUSOIDAL ACCELERATE DECELERATE IMAGE RECT SWALLOW %token NONE PLAIN OUTLINE SOFT_OUTLINE SHADOW SOFT_SHADOW %token OUTLINE_SHADOW OUTLINE_SOFT_SHADOW VERTICAL HORIZONTAL BOTH +%token SPECTRA SPECTRUM %left MINUS PLUS %left TIMES DIVIDE %left NEG /* negation--unary minus */ @@ -70,6 +71,7 @@ edjes: /* blank */ | images edjes | fonts edjes + | spectra edjes | collections edjes | data edjes | error { @@ -81,6 +83,30 @@ collections: COLLECTIONS OPEN_BRACE {section = GROUPS; } collection_statement CLOSE_BRACE semicolon_maybe { section = BASE; } ; + +spectra: SPECTRA OPEN_BRACE { section = SPECTRA; } spectra_statement CLOSE_BRACE semicolon_maybe { section = BASE; } + ; + +spectra_statement: /* empty */ + | spectra_statement spectrum + ; + +spectrum: SPECTRUM OPEN_BRACE { section = SPECTRUM; } spectrum_statement CLOSE_BRACE semicolon_maybe { section = SPECTRA; } + ; + +spectrum_statement: /* blank */ + | spectrum_name spectrum_statement + | spectrum_color spectrum_statement + ; + +spectrum_name: NAME COLON STRING SEMICOLON { + engrave_parse_spectrum_name($3); + } + ; + +spectrum_color: COLOR COLON exp exp exp exp exp SEMICOLON { + engrave_parse_spectrum_color((int)$3, (int)$4, (int)$5, (int)$6, (int)$7); + } fonts: FONTS OPEN_BRACE { section = FONTS; } font_statement CLOSE_BRACE semicolon_maybe { section = BASE; } ; =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_file.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- engrave_file.c 6 Sep 2006 07:31:31 -0000 1.20 +++ engrave_file.c 28 Dec 2006 18:22:56 -0000 1.21 @@ -128,6 +128,22 @@ } /** + * engrave_file_spectrum_add - add the spectrum to the engrave file. + * @param e: The Engrave_File to add the font too. + * @param es: The Engrave_Spectrum to add to the file. + * + * @return Returns no value. + */ +EAPI void +engrave_file_spectrum_add(Engrave_File *e, Engrave_Spectrum *es) +{ + if (!e || !es) return; + e->spectra = evas_list_append(e->spectra, es); + engrave_spectrum_parent_set(es, e); +} + + +/** * engrave_file_style_add - add the style to the engrave file. * @param e: The Engrave_File to add the style too. * @param ef: The Engrave_Style to add to the file. @@ -188,6 +204,20 @@ } /** + * engrave_file_spectrum_last_get - returns the last spectrum in the file + * @param ef: The Engrave_File from which to retrieve the group + * + * @return Returns the last Engrave_Spectrum in the engrave file @a ef or NULL + */ +EAPI Engrave_Spectrum * +engrave_file_spectrum_last_get(Engrave_File *ef) +{ + if (!ef) return NULL; + return evas_list_data(evas_list_last(ef->spectra)); +} + + +/** * engrave_file_style_last_get - returns the last style in the file * @param ef: The Engrave_File from which to retrieve the group * @@ -323,6 +353,19 @@ } /** + * engrave_file_spectra_count - count the spectra in the file + * @param ef: The Engrave_File to check for spectra + * + * @return Returns the number of spectra in the file, 0 otherwise + */ +EAPI int +engrave_file_spectra_count(Engrave_File *ef) +{ + if (!ef) return 0; + return evas_list_count(ef->spectra); +} + +/** * engrave_file_image_foreach - call the given function for each image object * @param ef: The Engrave_File for which the images should be iterated over * @param func: The function to call for each image @@ -410,7 +453,6 @@ } } - /** * engrave_file_font_foreach - call the given function for each font object * @param ef: The Engrave_File for which the fonts should be iterated over @@ -430,6 +472,29 @@ for (l = ef->fonts; l; l = l->next) { Engrave_Font *font = l->data; if (font) func(font, data); + } +} + +/** + * engrave_file_spectrum_foreach - call the given function for each spectrum object + * @param ef: The Engrave_File for which the spectra should be iterated over + * @param func: The function to call for each spectrum + * @param data: Any user data to pass to the given function. + * + * @return Returns no value. + */ +EAPI void +engrave_file_spectrum_foreach(Engrave_File *ef, + void (*func)(Engrave_Spectrum *, void *data), + void *data) +{ + Evas_List *l; + + if (!engrave_file_spectra_count(ef)) return; + + for (l = ef->spectra; l; l = l->next) { + Engrave_Spectrum *es = l->data; + if (es) func(es, data); } } =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_file.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- engrave_file.h 6 Sep 2006 07:31:31 -0000 1.13 +++ engrave_file.h 28 Dec 2006 18:22:56 -0000 1.14 @@ -27,6 +27,7 @@ Evas_List *images; /**< The list of images in the file */ Evas_List *fonts; /**< The list of fonts in the file */ + Evas_List *spectra; /**< The list of spectra in the file */ Evas_List *styles; /**< The list of styles in the file */ Evas_List *data; /**< The list of data items in the file */ Evas_List *groups; /**< The list of groups in the file */ @@ -42,12 +43,14 @@ EAPI const char *engrave_file_font_dir_get(Engrave_File *ef); EAPI void engrave_file_font_add(Engrave_File *e, Engrave_Font *ef); +EAPI void engrave_file_spectrum_add(Engrave_File *e, Engrave_Spectrum *es); EAPI void engrave_file_style_add(Engrave_File *e, Engrave_Style *es); EAPI void engrave_file_image_add(Engrave_File *ef, Engrave_Image *ei); EAPI void engrave_file_data_add(Engrave_File *ef, Engrave_Data *ed); EAPI void engrave_file_group_add(Engrave_File *ef, Engrave_Group *eg); EAPI Engrave_Style *engrave_file_style_last_get(Engrave_File *ef); +EAPI Engrave_Spectrum *engrave_file_spectrum_last_get(Engrave_File *ef); EAPI Engrave_Group *engrave_file_group_last_get(Engrave_File *ef); EAPI Engrave_Group *engrave_file_group_by_name_find(Engrave_File *ef, @@ -62,6 +65,7 @@ EAPI int engrave_file_data_count(Engrave_File *ef); EAPI int engrave_file_groups_count(Engrave_File *ef); EAPI int engrave_file_fonts_count(Engrave_File *ef); +EAPI int engrave_file_spectra_count(Engrave_File *ef); EAPI int engrave_file_styles_count(Engrave_File *ef); EAPI void engrave_file_image_foreach(Engrave_File *ef, @@ -75,6 +79,9 @@ void *data); EAPI void engrave_file_font_foreach(Engrave_File *ef, void (*func)(Engrave_Font *, void *), + void *data); +EAPI void engrave_file_spectrum_foreach(Engrave_File *ef, + void (*func)(Engrave_Spectrum *, void *), void *data); EAPI void engrave_file_style_foreach(Engrave_File *ef, void (*func)(Engrave_Style *, void *), =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_out.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- engrave_out.c 6 Sep 2006 07:31:31 -0000 1.34 +++ engrave_out.c 28 Dec 2006 18:22:56 -0000 1.35 @@ -12,6 +12,7 @@ static void _engrave_output_state(Engrave_Part_State *state, Engrave_Part *part, void *data); static void _engrave_output_image(Engrave_Image *image, void *data); static void _engrave_output_font(Engrave_Font *font, void *data); +static void _engrave_output_spectrum(Engrave_Spectrum *es, void *data); static void _engrave_output_style(Engrave_Style *style, void *data); static void _engrave_output_data(Engrave_Data *data, void *udata); static void _engrave_output_group(Engrave_Group *group, void *data); @@ -188,6 +189,11 @@ engrave_out_start(out, "fonts"); engrave_file_font_foreach(engrave_file, _engrave_output_font, out); engrave_out_end(out); + + /* spectra */ + engrave_out_start(out, "spectra"); + engrave_file_spectrum_foreach(engrave_file, _engrave_output_spectrum, out); + engrave_out_end(out); /* images */ engrave_out_start(out, "images"); @@ -648,6 +654,32 @@ engrave_out_data(out, "font", "\"%s\" \"%s\"", engrave_font_path_get(font), engrave_font_name_get(font)); } + +static void +_engrave_output_spectrum(Engrave_Spectrum *es, void *data) +{ + FILE *out; + int colors; + int i; + + out = data; + engrave_out_start(out, "spectrum"); + engrave_out_data(out, "name", "\"%s\"", engrave_spectrum_name_get(es)); + + colors = engrave_spectrum_color_count(es); + for (i=0; i<colors; i++) { + Engrave_Spectrum_Color *esc; + esc = engrave_spectrum_color_nth(es, i); + if (esc) + engrave_out_data(out, "color", "%d %d %d %d %d", + esc->r, esc->g, esc->b, esc->a, esc->d); + } + + engrave_out_end(out); + + +} + static void _engrave_output_style(Engrave_Style *style, void *data) =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_parse.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- engrave_parse.c 8 Feb 2006 04:38:47 -0000 1.14 +++ engrave_parse.c 28 Dec 2006 18:22:56 -0000 1.15 @@ -86,6 +86,28 @@ } void +engrave_parse_spectrum_name(char *name) +{ + Engrave_Spectrum *es; + es = engrave_spectrum_new(name); + engrave_file_spectrum_add(engrave_file, es); + engrave_spectrum_parent_set(es, engrave_file); +} + +void +engrave_parse_spectrum_color(int r, int g, int b, int a, int d) +{ + Engrave_Spectrum *es; + Engrave_Spectrum_Color *esc; + + esc = engrave_spectrum_color_new(r, g, b, a, d); + es = engrave_file_spectrum_last_get(engrave_file); + + engrave_spectrum_color_add(es, esc); + +} + +void engrave_parse_group_min(int w, int h) { Engrave_Group *group; @@ -383,6 +405,7 @@ state = engrave_part_state_last_get(part); engrave_part_state_min_size_set(state, w, h); } + void engrave_parse_state_fixed(double w, double h) =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_parse.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- engrave_parse.h 6 Sep 2006 07:31:31 -0000 1.6 +++ engrave_parse.h 28 Dec 2006 18:22:56 -0000 1.7 @@ -21,6 +21,9 @@ void engrave_parse_style_base(char * base); void engrave_parse_style_tag(char * key, char * val); +void engrave_parse_spectrum_name(char * name); +void engrave_parse_spectrum_color(int r, int g, int b, int a, int d); + void engrave_parse_base(char *base); void engrave_parse_part(); |