X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=filter.c;h=2cb145ce9e9e0965d1d624bdeace1171b296c6f5;hb=6f7eb1de56c5f2a686a521dea56fad4e622a6128;hp=338c6402bad0a824f1a80d9b871fcd7861d262df;hpb=8fd8454f3ee9d12dc5ffca25308c1054aeb2fb59;p=pkg%2Fabook.git diff --git a/filter.c b/filter.c index 338c640..2cb145c 100644 --- a/filter.c +++ b/filter.c @@ -1069,23 +1069,26 @@ html_export_database(FILE *out, struct db_enumerator e) html_export_write_head(out); db_enumerate_items(e) { - fprintf(out, ""); + fprintf(out, " \n"); for(cur = index_elements; cur; cur = cur->next) { if(cur->type != INDEX_FIELD) continue; - + get_list_field(e.item, cur, &f); + fprintf(out, " "); + if(f.type == FIELD_EMAILS) { - fprintf(out, ""); html_print_emails(out, &f); - fprintf(out, ""); - continue; } else { - fprintf(out, "%s", safe_str(f.data)); + if (strcmp(safe_str(f.data), "") == 0) + fprintf(out, " "); + else + fprintf(out, "%s", safe_str(f.data)); } + fprintf(out, "\n"); } - fprintf(out, "\n"); + fprintf(out, " \n"); } html_export_write_tail(out); @@ -1099,22 +1102,45 @@ html_export_write_head(FILE *out) char *realname = get_real_name(), *str; struct index_elem *cur; - fprintf(out, "\n"); - fprintf(out, "\n\n %s's addressbook", - realname ); - fprintf(out, "\n\n\n"); - fprintf(out, "\n

%s's addressbook

\n", realname ); - fprintf(out, "

\n\n"); - - fprintf(out, "\n"); + fprintf(out, "\n"); + fprintf(out, "\n"); + fprintf(out, "\n"); + fprintf(out, " \n"); + fprintf(out, " "); + fprintf(out, _("%s's addressbook"), realname ); + fprintf(out, "\n"); + fprintf(out, " \n"); + fprintf(out, "\n"); + fprintf(out, "\n"); + fprintf(out, "

"); + fprintf(out, _("%s's addressbook"), realname); + fprintf(out, "

\n"); + + fprintf(out, "
\n"); + fprintf(out, "\n"); + fprintf(out, " \n"); for(cur = index_elements; cur; cur = cur->next) { if(cur->type != INDEX_FIELD) continue; get_field_info(cur->d.field.id, NULL, &str, NULL); - fprintf(out, "", str); + + fprintf(out, " \n"); } - fprintf(out, "\n\n"); + fprintf(out, " \n"); + fprintf(out, "\n"); + fprintf(out, "\n"); free(realname); } @@ -1122,8 +1148,9 @@ html_export_write_head(FILE *out) static void html_export_write_tail(FILE *out) { - fprintf(out, "\n
%s"); + + if (strcmp(str, "") == 0) + fprintf(out, " "); + else + fprintf(out, "%s", str); + + fprintf(out, "
\n"); - fprintf(out, "\n\n\n"); + fprintf(out, "\n"); + fprintf(out, "\n"); + fprintf(out, ""); } /* @@ -1557,8 +1584,9 @@ static char *vcard_fields[] = { "NICKNAME", /* NICK */ "URL", /* URL */ "NOTE", /* NOTES */ + "BDAY", /* ANNIVERSARY */ "N", /* NAME: special case/mapping in vcard_parse_line() */ - NULL /* not implemented: ANNIVERSARY, ITEM_FIELDS */ + NULL /* ITEM_FIELDS */ }; enum { @@ -1660,20 +1688,33 @@ vcard_parse_address(list_item item, char *line) // vCard(post office box) - not used strsep(&value, ";"); + if(!value) return; + // vCard(the extended address) item_fput(item, ADDRESS2, xstrdup(strsep(&value, ";"))); + if(!value) return; + // vCard(the street address) item_fput(item, ADDRESS, xstrdup(strsep(&value, ";"))); + if(!value) return; + // vCard(the locality) item_fput(item, CITY, xstrdup(strsep(&value, ";"))); + if(!value) return; + // vCard(the region) item_fput(item, STATE, xstrdup(strsep(&value, ";"))); + if(!value) return; + // vCard(the postal code) item_fput(item, ZIP, xstrdup(strsep(&value, ";"))); + if(!value) return; + // vCard(the country name) item_fput(item, COUNTRY, xstrdup(strsep(&value, ";"))); - if(*value) xfree(value); + // support of optional trailing ";" to the ADR field + if(value && *value) xfree(value); } static void @@ -2052,6 +2093,13 @@ vcard_export_item(FILE *out, int item) free(name); + if(db_fget(item, NICK)) + fprintf(out, "NICKNAME:%s\r\n", + safe_str(db_fget(item, NICK))); + if(db_fget(item, ANNIVERSARY)) + fprintf(out, "BDAY:%s\r\n", + safe_str(db_fget(item, ANNIVERSARY))); + // see rfc6350 section 6.3.1 if(db_fget(item, ADDRESS)) { fprintf(out, "ADR:;%s;%s;%s;%s;%s;%s\r\n", @@ -2514,6 +2562,14 @@ bsdcal_export_database(FILE *out, struct db_enumerator e) return 0; } +/* + * end of BSD calendar export filter + */ + +/* + * custom export filter + */ + static int find_field_enum(char *s) { int i = -1; @@ -2598,8 +2654,7 @@ parse_custom_format(char *s, char *fmt_string, enum field_types *ft) cannotparse: fprintf(stderr, _("%s: invalid format, index %ld\n"), __FUNCTION__, (start - s)); - free(fmt_string); - while(*ft) free(ft--); + free(ft); exit(EXIT_FAILURE); } @@ -2607,10 +2662,12 @@ static int custom_export_item(FILE *out, int item, char *s, enum field_types *ft); -// used to store the format string from --outformatstr when "custom" format is used -// default value overriden in export_file() -extern char *parsed_custom_format; -extern enum field_types *custom_format_fields; +// stores the format string generated from --outformatstr {custom_format} +// (when "custom" output format is requested) +// overrides default value of custom_format set by from abook.c +extern char custom_format[FORMAT_STRING_LEN]; +char parsed_custom_format[FORMAT_STRING_LEN]; +enum field_types *custom_format_fields = 0; /* wrapper for custom_export_item: 1) avoid messing with extern pointer @@ -2668,29 +2725,20 @@ custom_export_item(FILE *out, int item, char *fmt, enum field_types *ft) return 0; } -// used to store the format string from --outformatstr when "custom" format is used -// default value overriden from abook.c -extern char custom_format[FORMAT_STRING_LEN]; - static int custom_export_database(FILE *out, struct db_enumerator e) { - char *format_string = - (char *)malloc(FORMAT_STRING_LEN * sizeof(char*)); - enum field_types *ft = - (enum field_types *)malloc(FORMAT_STRING_MAX_FIELDS * sizeof(enum field_types *)); - - parse_custom_format(custom_format, format_string, ft); + (enum field_types *)malloc(FORMAT_STRING_MAX_FIELDS * sizeof(enum field_types)); + parse_custom_format(custom_format, (char*)&parsed_custom_format, ft); db_enumerate_items(e) { - if(custom_export_item(out, e.item, format_string, ft) == 0) + if(custom_export_item(out, e.item, (char*)&parsed_custom_format, ft) == 0) fprintf(out, "\n"); } return 0; } /* - * end of BSD calendar export filter + * end of custom export filter */ -