/* * Create a new content_types object. */ lxw_content_types * _new_content_types() { lxw_content_types *content_types = calloc(1, sizeof(lxw_content_types)); GOTO_LABEL_ON_MEM_ERROR(content_types, mem_error); content_types->default_types = calloc(1, sizeof(struct lxw_tuples)); GOTO_LABEL_ON_MEM_ERROR(content_types->default_types, mem_error); STAILQ_INIT(content_types->default_types); content_types->overrides = calloc(1, sizeof(struct lxw_tuples)); GOTO_LABEL_ON_MEM_ERROR(content_types->overrides, mem_error); STAILQ_INIT(content_types->overrides); _ct_add_default(content_types, "rels", LXW_APP_PACKAGE "relationships+xml"); _ct_add_default(content_types, "xml", "application/xml"); _ct_add_override(content_types, "/docProps/app.xml", LXW_APP_DOCUMENT "extended-properties+xml"); _ct_add_override(content_types, "/docProps/core.xml", LXW_APP_PACKAGE "core-properties+xml"); _ct_add_override(content_types, "/xl/styles.xml", LXW_APP_DOCUMENT "spreadsheetml.styles+xml"); _ct_add_override(content_types, "/xl/theme/theme1.xml", LXW_APP_DOCUMENT "theme+xml"); _ct_add_override(content_types, "/xl/workbook.xml", LXW_APP_DOCUMENT "spreadsheetml.sheet.main+xml"); return content_types; mem_error: _free_content_types(content_types); return NULL; }
/* * Returns a font struct suitable for hashing as a lookup key. */ lxw_font * lxw_format_get_font_key(lxw_format *self) { lxw_font *key = calloc(1, sizeof(lxw_font)); GOTO_LABEL_ON_MEM_ERROR(key, mem_error); LXW_FORMAT_FIELD_COPY(key->font_name, self->font_name); key->font_size = self->font_size; key->bold = self->bold; key->italic = self->italic; key->font_color = self->font_color; key->underline = self->underline; key->font_strikeout = self->font_strikeout; key->font_outline = self->font_outline; key->font_shadow = self->font_shadow; key->font_script = self->font_script; key->font_family = self->font_family; key->font_charset = self->font_charset; key->font_condense = self->font_condense; key->font_extend = self->font_extend; return key; mem_error: return NULL; }
/* * Create a new core object. */ lxw_core * _new_core() { lxw_core *core = calloc(1, sizeof(lxw_core)); GOTO_LABEL_ON_MEM_ERROR(core, mem_error); return core; mem_error: _free_core(core); return NULL; }
/* * Returns a pattern fill struct suitable for hashing as a lookup key. */ lxw_fill * lxw_format_get_fill_key(lxw_format *self) { lxw_fill *key = calloc(1, sizeof(lxw_fill)); GOTO_LABEL_ON_MEM_ERROR(key, mem_error); key->fg_color = self->fg_color; key->bg_color = self->bg_color; key->pattern = self->pattern; return key; mem_error: return NULL; }
/* * Returns a format struct suitable for hashing as a lookup key. This is * mainly a memcpy with any pointer members set to NULL. */ lxw_format * _get_format_key(lxw_format *self) { lxw_format *key = calloc(1, sizeof(lxw_format)); GOTO_LABEL_ON_MEM_ERROR(key, mem_error); memcpy(key, self, sizeof(lxw_format)); /* Set pointer members to NULL since they aren't part of the comparison. */ key->xf_format_indices = NULL; key->num_xf_formats = NULL; key->list_pointers.stqe_next = NULL; return key; mem_error: return NULL; }
/* * Returns a border struct suitable for hashing as a lookup key. */ lxw_border * lxw_format_get_border_key(lxw_format *self) { lxw_border *key = calloc(1, sizeof(lxw_border)); GOTO_LABEL_ON_MEM_ERROR(key, mem_error); key->bottom = self->bottom; key->left = self->left; key->right = self->right; key->top = self->top; key->diag_border = self->diag_border; key->diag_type = self->diag_type; key->bottom_color = self->bottom_color; key->left_color = self->left_color; key->right_color = self->right_color; key->top_color = self->top_color; key->diag_color = self->diag_color; return key; mem_error: return NULL; }
/* * Create a new format object. */ lxw_format * lxw_format_new() { lxw_format *format = calloc(1, sizeof(lxw_format)); GOTO_LABEL_ON_MEM_ERROR(format, mem_error); format->xf_format_indices = NULL; format->xf_index = LXW_PROPERTY_UNSET; format->dxf_index = LXW_PROPERTY_UNSET; format->font_name[0] = '\0'; format->font_scheme[0] = '\0'; format->num_format[0] = '\0'; format->num_format_index = 0; format->font_index = 0; format->has_font = LXW_FALSE; format->has_dxf_font = LXW_FALSE; format->font_size = 11; format->bold = LXW_FALSE; format->italic = LXW_FALSE; format->font_color = LXW_COLOR_UNSET; format->underline = LXW_FALSE; format->font_strikeout = LXW_FALSE; format->font_outline = LXW_FALSE; format->font_shadow = LXW_FALSE; format->font_script = LXW_FALSE; format->font_family = LXW_DEFAULT_FONT_FAMILY; format->font_charset = LXW_FALSE; format->font_condense = LXW_FALSE; format->font_extend = LXW_FALSE; format->theme = LXW_FALSE; format->hyperlink = LXW_FALSE; format->hidden = LXW_FALSE; format->locked = LXW_TRUE; format->text_h_align = LXW_ALIGN_NONE; format->text_wrap = LXW_FALSE; format->text_v_align = LXW_ALIGN_NONE; format->text_justlast = LXW_FALSE; format->rotation = 0; format->fg_color = LXW_COLOR_UNSET; format->bg_color = LXW_COLOR_UNSET; format->pattern = LXW_PATTERN_NONE; format->has_fill = LXW_FALSE; format->has_dxf_fill = LXW_FALSE; format->fill_index = 0; format->fill_count = 0; format->border_index = 0; format->has_border = LXW_FALSE; format->has_dxf_border = LXW_FALSE; format->border_count = 0; format->bottom = LXW_BORDER_NONE; format->left = LXW_BORDER_NONE; format->right = LXW_BORDER_NONE; format->top = LXW_BORDER_NONE; format->diag_border = LXW_BORDER_NONE; format->diag_type = LXW_BORDER_NONE; format->bottom_color = LXW_COLOR_UNSET; format->left_color = LXW_COLOR_UNSET; format->right_color = LXW_COLOR_UNSET; format->top_color = LXW_COLOR_UNSET; format->diag_color = LXW_COLOR_UNSET; format->indent = 0; format->shrink = LXW_FALSE; format->merge_range = LXW_FALSE; format->reading_order = 0; format->just_distrib = LXW_FALSE; format->color_indexed = LXW_FALSE; format->font_only = LXW_FALSE; return format; mem_error: lxw_format_free(format); return NULL; }