Author: peter Date: 2007-12-29 01:32:03 +0000 (Sat, 29 Dec 2007) New Revision: 26516
Modified: squeeze/trunk/data/gnu-tar.squeeze squeeze/trunk/data/unzip.squeeze squeeze/trunk/data/zip.squeeze squeeze/trunk/docs/reference/libsqueeze/tmpl/archive.sgml squeeze/trunk/docs/reference/libsqueeze/tmpl/libsqueeze-unused.sgml squeeze/trunk/libsqueeze/archive.c squeeze/trunk/libsqueeze/archive.h squeeze/trunk/libsqueeze/parser.c squeeze/trunk/libsqueeze/parser.h squeeze/trunk/libsqueeze/scanf-parser.c squeeze/trunk/libsqueeze/scanf-parser.h squeeze/trunk/libsqueeze/support-reader.c squeeze/trunk/libsqueeze/support-template.c squeeze/trunk/libsqueeze/support-template.h Log: lsq_support_reader_parse_file also creates the scanf parser from the .squeeze file made squeeze compile again Modified: squeeze/trunk/data/gnu-tar.squeeze =================================================================== --- squeeze/trunk/data/gnu-tar.squeeze 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/data/gnu-tar.squeeze 2007-12-29 01:32:03 UTC (rev 26516) @@ -57,7 +57,7 @@ X-Squeeze-Options=Password # I wonder if this will be enough... -X-Squeeze-Parse=%s %s %i %s %s %f +X-Squeeze-Parse=%s %s %u %s %s %F X-Squeeze-Separator=space [Squeeze-Option-Password] Modified: squeeze/trunk/data/unzip.squeeze =================================================================== --- squeeze/trunk/data/unzip.squeeze 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/data/unzip.squeeze 2007-12-29 01:32:03 UTC (rev 26516) @@ -18,7 +18,7 @@ X-Squeeze-Options=Password # I wonder if this will be enough... -X-Squeeze-Parse=%s %s %i %s %s %f +X-Squeeze-Parse=%s %s %u %s %s %F X-Squeeze-Separator=space [Squeeze-Option-Password] Modified: squeeze/trunk/data/zip.squeeze =================================================================== --- squeeze/trunk/data/zip.squeeze 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/data/zip.squeeze 2007-12-29 01:32:03 UTC (rev 26516) @@ -23,7 +23,7 @@ X-Squeeze-Options=Password # I wonder if this will be enough... -X-Squeeze-Parse=%s %s %i %s %s %f +X-Squeeze-Parse=%s %s %u %s %s %F X-Squeeze-Separator=space [Squeeze-Option-Password] Modified: squeeze/trunk/docs/reference/libsqueeze/tmpl/archive.sgml =================================================================== --- squeeze/trunk/docs/reference/libsqueeze/tmpl/archive.sgml 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/docs/reference/libsqueeze/tmpl/archive.sgml 2007-12-29 01:32:03 UTC (rev 26516) @@ -116,6 +116,16 @@ @Returns: +<!-- ##### FUNCTION lsq_archive_add_file ##### --> +<para> + +</para> + [EMAIL PROTECTED]: [EMAIL PROTECTED]: [EMAIL PROTECTED]: + + <!-- ##### FUNCTION lsq_archive_get_iter ##### --> <para> Modified: squeeze/trunk/docs/reference/libsqueeze/tmpl/libsqueeze-unused.sgml =================================================================== --- squeeze/trunk/docs/reference/libsqueeze/tmpl/libsqueeze-unused.sgml 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/docs/reference/libsqueeze/tmpl/libsqueeze-unused.sgml 2007-12-29 01:32:03 UTC (rev 26516) @@ -120,13 +120,11 @@ @entry: @next: -<!-- ##### FUNCTION lsq_archive_add_file ##### --> +<!-- ##### FUNCTION lsq_archive_command_get_type ##### --> <para> </para> [EMAIL PROTECTED]: [EMAIL PROTECTED]: @Returns: <!-- ##### FUNCTION lsq_archive_command_run ##### --> Modified: squeeze/trunk/libsqueeze/archive.c =================================================================== --- squeeze/trunk/libsqueeze/archive.c 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/archive.c 2007-12-29 01:32:03 UTC (rev 26516) @@ -379,11 +379,3 @@ return FALSE; } -void -lsq_archive_set_property_type(LSQArchive *archive, guint n, GType type) -{ - if (n >= LSQ_ARCHIVE_PROP_USER) - { - lsq_support_template_set_property_type(archive->priv->s_template, n, type); - } -} Modified: squeeze/trunk/libsqueeze/archive.h =================================================================== --- squeeze/trunk/libsqueeze/archive.h 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/archive.h 2007-12-29 01:32:03 UTC (rev 26516) @@ -103,11 +103,7 @@ gboolean lsq_archive_operate(LSQArchive *archive, LSQCommandType type); -void -lsq_archive_set_property_type(LSQArchive *archive, guint n, GType type); - - G_END_DECLS #endif /* __ARCHIVE_H__ */ Modified: squeeze/trunk/libsqueeze/parser.c =================================================================== --- squeeze/trunk/libsqueeze/parser.c 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/parser.c 2007-12-29 01:32:03 UTC (rev 26516) @@ -58,3 +58,38 @@ klass->parse(self, ctx); } +guint +lsq_parser_n_properties(LSQParser *parser) +{ + return parser->n_properties; +} + +GType +lsq_parser_get_property_type(LSQParser *parser, guint nr) +{ + g_return_val_if_fail(nr < parser->n_properties, G_TYPE_NONE); + return parser->property_types[nr]; +} + +void +lsq_parser_set_property_type(LSQParser *parser, guint nr, GType type) +{ + if(nr >= parser->n_properties) + { + GType *new_list = g_new(GType, nr+1); + guint i; + for(i=0; i < parser->n_properties; i++) + { + new_list[i] = parser->property_types[i]; + } + while(i<nr) + { + new_list[i++] = G_TYPE_NONE; + } + g_free(parser->property_types); + parser->property_types = new_list; + parser->n_properties = nr+1; + } + parser->property_types[nr] = type; +} + Modified: squeeze/trunk/libsqueeze/parser.h =================================================================== --- squeeze/trunk/libsqueeze/parser.h 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/parser.h 2007-12-29 01:32:03 UTC (rev 26516) @@ -44,11 +44,16 @@ LSQParserClass)) +#if 0 typedef struct _LSQParser LSQParser; +#endif struct _LSQParser { GObject parent; + + guint n_properties; + GType *property_types; }; @@ -69,6 +74,10 @@ void lsq_parser_parse(LSQParser *, LSQParserContext *); +guint lsq_parser_n_properties(LSQParser *); +GType lsq_parser_get_property_type(LSQParser *, guint); +void lsq_parser_set_property_type(LSQParser *, guint, GType); + G_END_DECLS #endif /* __LIBSQUEEZE_PARSER_H__ */ Modified: squeeze/trunk/libsqueeze/scanf-parser.c =================================================================== --- squeeze/trunk/libsqueeze/scanf-parser.c 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/scanf-parser.c 2007-12-29 01:32:03 UTC (rev 26516) @@ -72,11 +72,7 @@ { LSQParser parent; - guint num_props; - gchar **prop_names; - GType *prop_types; parse_part *parser; - }; struct _LSQScanfParserClass @@ -102,15 +98,14 @@ ctx = g_object_new(lsq_scanf_parser_context_get_type(), "archive", archive); - ctx->data_store = g_new0(union _data_store, parser->num_props); - ctx->props_store = g_new0(gpointer, parser->num_props); + guint n_props = lsq_parser_n_properties(LSQ_PARSER(parser)); + ctx->data_store = g_new0(union _data_store, n_props); + ctx->props_store = g_new0(gpointer, n_props); - lsq_archive_set_properties(archive, parser->num_props, parser->prop_names, parser->prop_types); - return LSQ_PARSER_CONTEXT(ctx); } -static void build_parser(LSQScanfParser *, const gchar *, const gchar *); +static void build_parser(LSQScanfParser *, const gchar *); static void lsq_scanf_parser_parse(LSQScanfParser *, LSQScanfParserContext *); @@ -131,13 +126,13 @@ parser_class->parse = (void(*)(LSQParser*,LSQParserContext*))lsq_scanf_parser_parse; } -LSQParser *lsq_scanf_parser_new(const gchar *names_string, const gchar *parser_string) +LSQParser *lsq_scanf_parser_new(const gchar *parser_string) { LSQScanfParser *parser; parser = g_object_new(LSQ_TYPE_SCANF_PARSER, NULL); - build_parser(parser, names_string, parser_string); + build_parser(parser, parser_string); return LSQ_PARSER(parser); } @@ -653,7 +648,7 @@ return new_str; }/*}}}*/ -static void build_parser(LSQScanfParser *parser, const gchar *names_string, const gchar *parser_string) +static void build_parser(LSQScanfParser *parser, const gchar *parser_string) { const gchar *ptr; const gchar *cur; @@ -670,11 +665,6 @@ guint index_flag; guint index; - gchar **names = g_strsplit(names_string, "|", -1); - g_return_if_fail(names); - guint num_props = g_strv_length(names); - GType *prop_types = g_new0(GType, num_props); - parse_part *part = g_new0(parse_part, 1); parse_part *parts = part; guint part_count = 0; @@ -704,7 +694,7 @@ if(ch == '%') continue; - part->delimiter = strdup_escaped(cur, ptr-cur-1); + part->delimiter = strdup_escaped(cur, ptr-cur-2); /*{{{ check differend index %.$*/ if(g_ascii_isdigit(ch)) @@ -720,9 +710,6 @@ } /*}}}*/ - //FIXME: should be done neat - g_return_if_fail(index < num_props); - /*{{{ check skip flag %*.*/ if(ch == '*') { @@ -759,16 +746,15 @@ ch = *ptr++; break; } - if(!ch) - break; + if(!ch) + break; /*}}}*/ switch(ch) { /*{{{ byte %b*/ case 'b': - if(width_flag) - return; + g_return_if_fail(!width_flag); part->next = g_new0(parse_part, 1); part = part->next; if(skip_flag) @@ -797,19 +783,19 @@ { case SIZE_NORMAL: part->function = parse_byte; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_SHORT: part->function = parse_word; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_LONG: part->function = parse_dword; - prop_types[index] = G_TYPE_ULONG; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_ULONG); break; case SIZE_LONGLONG: part->function = parse_qword; - prop_types[index] = G_TYPE_UINT64; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT64); break; } } @@ -817,8 +803,7 @@ /*}}}*/ /*{{{ character %c*/ case 'c': - if(size_flag || width_flag) - return; + g_return_if_fail(!size_flag && !width_flag); part->next = g_new0(parse_part, 1); part = part->next; if(skip_flag) @@ -830,13 +815,13 @@ part_count++; part->index = index; part->function = parse_char; - prop_types[index] = G_TYPE_CHAR; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_CHAR); } break; /*}}}*/ /*{{{ decimal %d*/ case 'd': - //case 'i': + case 'i': part->next = g_new0(parse_part, 1); part = part->next; part->width = width_flag; @@ -852,19 +837,19 @@ { case SIZE_NORMAL: part->function = parse_decimal; - prop_types[index] = G_TYPE_INT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_INT); break; case SIZE_SHORT: part->function = parse_decimal16; - prop_types[index] = G_TYPE_INT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_INT); break; case SIZE_LONG: part->function = parse_decimal32; - prop_types[index] = G_TYPE_LONG; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_LONG); break; case SIZE_LONGLONG: part->function = parse_decimal64; - prop_types[index] = G_TYPE_INT64; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_INT64); break; } } @@ -872,8 +857,7 @@ /*}}}*/ /*{{{ floating point %d*/ case 'f': - if(size_flag && size_flag != SIZE_LONGLONG) - return; + g_return_if_fail(!size_flag || size_flag == SIZE_LONGLONG); part->next = g_new0(parse_part, 1); part = part->next; part->width = width_flag; @@ -889,11 +873,11 @@ { case SIZE_NORMAL: part->function = parse_floatingpoint; - prop_types[index] = G_TYPE_FLOAT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_FLOAT); break; case SIZE_LONGLONG: part->function = parse_double; - prop_types[index] = G_TYPE_DOUBLE; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_DOUBLE); break; default: break; @@ -918,19 +902,19 @@ { case SIZE_NORMAL: part->function = parse_octal; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_SHORT: part->function = parse_octal16; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_LONG: part->function = parse_octal32; - prop_types[index] = G_TYPE_ULONG; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_ULONG); break; case SIZE_LONGLONG: part->function = parse_octal64; - prop_types[index] = G_TYPE_UINT64; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT64); break; } } @@ -938,8 +922,7 @@ /*}}}*/ /*{{{ string %s*/ case 's': - if(size_flag) - return; + g_return_if_fail(!size_flag); part->next = g_new0(parse_part, 1); part = part->next; part->width = width_flag; @@ -952,7 +935,7 @@ part_count++; part->index = index; part->function = parse_string; - prop_types[index] = G_TYPE_STRING; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_STRING); } break; /*}}}*/ @@ -973,19 +956,19 @@ { case SIZE_NORMAL: part->function = parse_unsigned; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_SHORT: part->function = parse_unsigned16; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_LONG: part->function = parse_unsigned32; - prop_types[index] = G_TYPE_ULONG; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_ULONG); break; case SIZE_LONGLONG: part->function = parse_unsigned64; - prop_types[index] = G_TYPE_UINT64; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT64); break; } } @@ -1009,19 +992,19 @@ { case SIZE_NORMAL: part->function = parse_hexadecimal; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_SHORT: part->function = parse_hexadecimal16; - prop_types[index] = G_TYPE_UINT; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT); break; case SIZE_LONG: part->function = parse_hexadecimal32; - prop_types[index] = G_TYPE_ULONG; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_ULONG); break; case SIZE_LONGLONG: part->function = parse_hexadecimal64; - prop_types[index] = G_TYPE_UINT64; + lsq_parser_set_property_type(LSQ_PARSER(parser), index, G_TYPE_UINT64); break; } } @@ -1029,27 +1012,20 @@ /*}}}*/ /*{{{ filename %F*/ case 'F': - if(skip_flag || size_flag || width_flag) - return; + g_return_if_fail(!skip_flag && !size_flag && !width_flag); part->next = g_new0(parse_part, 1); part = part->next; part->function = parse_filename; break; /*}}}*/ default: - return; + g_return_if_reached(); } cur = ptr; } } - //FIXME: should be done neat - g_return_if_fail(part_count == num_props); - parser->parser = parts; - parser->num_props = num_props; - parser->prop_names = names; - parser->prop_types = prop_types; } static void lsq_scanf_parser_parse(LSQScanfParser *parser, LSQScanfParserContext *ctx) Modified: squeeze/trunk/libsqueeze/scanf-parser.h =================================================================== --- squeeze/trunk/libsqueeze/scanf-parser.h 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/scanf-parser.h 2007-12-29 01:32:03 UTC (rev 26516) @@ -50,7 +50,7 @@ GType lsq_scanf_parser_get_type(void); -LSQParser *lsq_scanf_parser_new(const gchar *, const gchar *); +LSQParser *lsq_scanf_parser_new(const gchar *); G_END_DECLS Modified: squeeze/trunk/libsqueeze/support-reader.c =================================================================== --- squeeze/trunk/libsqueeze/support-reader.c 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/support-reader.c 2007-12-29 01:32:03 UTC (rev 26516) @@ -29,6 +29,9 @@ #include "support-factory.h" #include "archive-iter.h" #include "archive.h" +#include "parser-context.h" +#include "parser.h" +#include "scanf-parser.h" #include "support-reader.h" #include "internals.h" @@ -137,6 +140,15 @@ gchar **mime_types = xfce_rc_read_list_entry(rc, "MimeType", ";"); + xfce_rc_set_group(rc, "Squeeze-Refresh"); + gchar **column_names = xfce_rc_read_list_entry(rc, "X-Squeeze-Headers", ";"); + LSQParser *parser = NULL; + const gchar *parser_string = xfce_rc_read_entry(rc, "X-Squeeze-Parse", NULL); + if(parser_string) + { + parser = lsq_scanf_parser_new(parser_string); + } + gchar **_mime_types = mime_types; for(i = 0; _mime_types[i]; ++i) { @@ -175,7 +187,11 @@ s_template->remove_cmd_queue = xfce_rc_read_list_entry(rc, "X-Squeeze-Remove", ";"); s_template->extract_cmd_queue = xfce_rc_read_list_entry(rc, "X-Squeeze-Extract", ";"); s_template->refresh_cmd_queue = xfce_rc_read_list_entry(rc, "X-Squeeze-Refresh", ";"); - + + s_template->n_properties = g_strv_length(column_names); + s_template->property_names = column_names; + s_template->parser = parser; + if (s_template->supported) g_debug("%s supported\n", _mime_types[i]); else Modified: squeeze/trunk/libsqueeze/support-template.c =================================================================== --- squeeze/trunk/libsqueeze/support-template.c 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/support-template.c 2007-12-29 01:32:03 UTC (rev 26516) @@ -26,8 +26,8 @@ GType lsq_support_template_get_property_type(LSQSupportTemplate *templ, guint nr) { - g_return_val_if_fail(nr >= templ->n_properties, G_TYPE_NONE); - return templ->property_types[nr]; + g_return_val_if_fail(templ->parser, G_TYPE_NONE); + return lsq_parser_get_property_type(templ->parser); } const gchar * @@ -40,12 +40,9 @@ guint lsq_support_template_get_n_properties (LSQSupportTemplate *templ) { - g_return_val_if_fail(templ->n_properties >= 0, 0); - return templ->n_properties; + guint n_props = lsq_parser_n_properties(templ->parser); + if(templ->n_properties > n_props) + n_props = templ->n_properties; + return n_props; } - -void -lsq_support_template_set_property_type(LSQSupportTemplate *templ, guint nr, GType type) -{ -} Modified: squeeze/trunk/libsqueeze/support-template.h =================================================================== --- squeeze/trunk/libsqueeze/support-template.h 2007-12-28 16:40:43 UTC (rev 26515) +++ squeeze/trunk/libsqueeze/support-template.h 2007-12-29 01:32:03 UTC (rev 26516) @@ -34,6 +34,10 @@ LSQ_COMMAND_TYPE_TEST } LSQCommandType; +#ifndef LSQParser +typedef struct _LSQParser LSQParser; +#endif + typedef struct _LSQSupportTemplate LSQSupportTemplate; struct _LSQSupportTemplate @@ -44,8 +48,8 @@ gboolean supported; guint n_properties; - GType *property_types; gchar **property_names; + LSQParser *parser; gchar **new_cmd_queue; gchar **add_cmd_queue; @@ -62,9 +66,6 @@ guint lsq_support_template_get_n_properties (LSQSupportTemplate *s_template); -void -lsq_support_template_set_property_type(LSQSupportTemplate *s_template, guint n, GType type); - #endif /* __SUPPORT_TEMPLATE_H__ */ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits