--- psiconv/trunk/lib/psiconv/generate_layout.c 2000/12/25 00:26:53 76 +++ psiconv/trunk/lib/psiconv/generate_layout.c 2000/12/27 02:12:23 80 @@ -27,7 +27,7 @@ { int res; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null color"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null color"); return -PSICONV_E_GENERATE; } if ((res = psiconv_write_u8(buf,value->red))) @@ -41,7 +41,7 @@ { int res; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null font"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null font"); return -PSICONV_E_GENERATE; } if ((res = psiconv_write_string(buf,value->name))) @@ -54,11 +54,11 @@ int res; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null border"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null border"); return -PSICONV_E_GENERATE; } if (value->kind > psiconv_border_dotdotdashed) - psiconv_warn(0,psiconv_list_length(buf), + psiconv_warn(0,psiconv_buffer_length(buf), "Unknown border kind (%d); assuming none",value->kind); if ((res =psiconv_write_u8(buf,value->kind == psiconv_border_none?0: value->kind == psiconv_border_solid?1: @@ -84,11 +84,11 @@ int res; psiconv_buffer extra_buf; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null bullet"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null bullet"); return -PSICONV_E_GENERATE; } - if (!(extra_buf = psiconv_new_buffer())) + if (!(extra_buf = psiconv_buffer_new())) return -PSICONV_E_NOMEM; if ((res = psiconv_write_size(extra_buf,value->font_size))) goto ERROR; @@ -103,12 +103,12 @@ if ((res = psiconv_write_font(extra_buf,value->font))) goto ERROR; - if ((res = psiconv_write_u8(buf,psiconv_list_length(extra_buf)))) + if ((res = psiconv_write_u8(buf,psiconv_buffer_length(extra_buf)))) goto ERROR; - res = psiconv_list_concat(buf,extra_buf); + res = psiconv_buffer_concat(buf,extra_buf); ERROR: - psiconv_free_buffer(extra_buf); + psiconv_buffer_free(extra_buf); return res; } @@ -116,7 +116,7 @@ { int res; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null tab"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null tab"); return -PSICONV_E_GENERATE; } if ((res = psiconv_write_length(buf,value->location))) @@ -124,7 +124,7 @@ if ((value->kind != psiconv_tab_left) && (value->kind != psiconv_tab_right) && (value->kind != psiconv_tab_centre)) - psiconv_warn(0,psiconv_list_length(buf), + psiconv_warn(0,psiconv_buffer_length(buf), "Unknown tab kind (%d); assuming left",value->kind); return psiconv_write_u8(buf, value->kind == psiconv_tab_right?2: value->kind == psiconv_tab_centre?3:1); @@ -134,21 +134,18 @@ psiconv_paragraph_layout value, psiconv_paragraph_layout base) { - int res,i,tabs_different; + int res,i; psiconv_buffer extra_buf; - psiconv_tab value_tab,base_tab; + psiconv_tab tab; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null paragraph layout list"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null paragraph layout list"); return -PSICONV_E_GENERATE; } - if (!(extra_buf = psiconv_new_buffer())) + if (!(extra_buf = psiconv_buffer_new())) return -PSICONV_E_NOMEM; - if (!base || !base->back_color || !value->back_color || - (value->back_color->red != base->back_color->red) || - (value->back_color->green != base->back_color->green) || - (value->back_color->blue != base->back_color->blue)) { + if (!base || psiconv_compare_color(base->back_color,value->back_color)) { if ((res = psiconv_write_u8(extra_buf,0x01))) goto ERROR; if ((res = psiconv_write_color(extra_buf,value->back_color))) @@ -181,7 +178,7 @@ goto ERROR; if ((value->justify_hor < psiconv_justify_left) || (value->justify_hor > psiconv_justify_full)) - psiconv_warn(0,psiconv_list_length(buf), + psiconv_warn(0,psiconv_buffer_length(buf), "Unknown horizontal justify (%d); assuming left", value->justify_hor); if ((res = psiconv_write_u8(extra_buf, @@ -196,7 +193,7 @@ goto ERROR; if ((value->justify_ver < psiconv_justify_top) || (value->justify_ver > psiconv_justify_bottom)) - psiconv_warn(0,psiconv_list_length(buf), + psiconv_warn(0,psiconv_buffer_length(buf), "Unknown vertical justify (%d); assuming middle", value->justify_ver); if ((res = psiconv_write_u8(extra_buf, @@ -268,72 +265,39 @@ goto ERROR; } - if (!base || !value->top_border || !base->top_border || - !value->top_border->color || !base->top_border->color || - (value->top_border->kind != base->top_border->kind) || - (value->top_border->thickness != base->top_border->thickness) || - (value->top_border->color->red != base->top_border->color->red) || - (value->top_border->color->green != base->top_border->color->green) || - (value->top_border->color->blue != base->top_border->color->blue)) { + if (!base || psiconv_compare_border(value->top_border,base->top_border)) { if ((res = psiconv_write_u8(extra_buf,0x11))) goto ERROR; if ((res = psiconv_write_border(extra_buf,value->top_border))) goto ERROR; } - if (!base || !value->top_border || !base->top_border || - !value->top_border->color || !base->top_border->color || - (value->top_border->kind != base->top_border->kind) || - (value->top_border->thickness != base->top_border->thickness) || - (value->top_border->color->red != base->top_border->color->red) || - (value->top_border->color->green != base->top_border->color->green) || - (value->top_border->color->blue != base->top_border->color->blue)) { + if (!base || psiconv_compare_border(value->bottom_border, + base->bottom_border)) { if ((res = psiconv_write_u8(extra_buf,0x12))) goto ERROR; - if ((res = psiconv_write_border(extra_buf,value->top_border))) + if ((res = psiconv_write_border(extra_buf,value->bottom_border))) goto ERROR; } - if (!base || !value->left_border || !base->left_border || - !value->left_border->color || !base->left_border->color || - (value->left_border->kind != base->left_border->kind) || - (value->left_border->thickness != base->left_border->thickness) || - (value->left_border->color->red != base->left_border->color->red) || - (value->left_border->color->green != base->left_border->color->green) || - (value->left_border->color->blue != base->left_border->color->blue)) { + if (!base || psiconv_compare_border(value->left_border, + base->left_border)) { if ((res = psiconv_write_u8(extra_buf,0x13))) goto ERROR; if ((res = psiconv_write_border(extra_buf,value->left_border))) goto ERROR; } - if (!base || !value->right_border || !base->right_border || - !value->right_border->color || !base->right_border->color || - (value->right_border->kind != base->right_border->kind) || - (value->right_border->thickness != base->right_border->thickness) || - (value->right_border->color->red != base->right_border->color->red) || - (value->right_border->color->green != - base->right_border->color->green) || - (value->right_border->color->blue != base->right_border->color->blue)) { + if (!base || psiconv_compare_border(value->right_border, + base->right_border)) { if ((res = psiconv_write_u8(extra_buf,0x14))) goto ERROR; if ((res = psiconv_write_border(extra_buf,value->right_border))) goto ERROR; } - if (!base || !value->bullet || !base->bullet || - !value->bullet->color || !base->bullet->color || - !value->bullet->font || !base->bullet->font || - !value->bullet->font->name || !base->bullet->font->name || - (value->bullet->on != base->bullet->on) || - (value->bullet->font_size != base->bullet->font_size) || - (value->bullet->character != base->bullet->character) || - (value->bullet->indent != base->bullet->indent) || - (value->bullet->color->red != base->bullet->color->red) || - (value->bullet->color->green != base->bullet->color->green) || - (value->bullet->color->blue != base->bullet->color->blue) || - (value->bullet->font->screenfont != base->bullet->font->screenfont) || - strcmp(value->bullet->font->name,base->bullet->font->name)) { + if (!base || psiconv_compare_bullet(value->bullet, + base->bullet)) { if ((res = psiconv_write_u8(extra_buf,0x15))) goto ERROR; if ((res = psiconv_write_bullet(extra_buf,value->bullet))) @@ -341,61 +305,39 @@ } if (!value->tabs || !value->tabs->extras) { - psiconv_warn(0,psiconv_list_length(buf),"Null tabs"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null tabs"); res = -PSICONV_E_GENERATE; goto ERROR; } + /* It is not entirely clear how tabs are inherited. For now, I assume if there is any difference at all, we will have to generate both the normal tab-interval, and all specific tabs */ - tabs_different = 0; - if (!base || !base->tabs || !base->tabs->extras || - (value->tabs->normal != base->tabs->normal) || - (psiconv_list_length(value->tabs->extras) != - psiconv_list_length(base->tabs->extras))) - tabs_different = 1; - else { - for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { - value_tab = psiconv_list_get(value->tabs->extras,i); - base_tab = psiconv_list_get(base->tabs->extras,i); - if (!value_tab || !base_tab) { - psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); - res = -PSICONV_E_NOMEM; - goto ERROR; - } - if ((value_tab->kind != base_tab->kind) || - (value_tab->location != base_tab->location)) { - tabs_different = 1; - break; - } - } - } - - if (tabs_different) { + if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) { if ((res = psiconv_write_u8(extra_buf,0x16))) goto ERROR; if ((res = psiconv_write_length(extra_buf,value->tabs->normal))) goto ERROR; for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { - if (!(value_tab = psiconv_list_get(value->tabs->extras,i))) { - psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); + if (!(tab = psiconv_list_get(value->tabs->extras,i))) { + psiconv_warn(0,psiconv_buffer_length(buf),"Massive memory corruption"); res = -PSICONV_E_NOMEM; goto ERROR; } if ((res = psiconv_write_u8(extra_buf,0x17))) goto ERROR; - if ((res = psiconv_write_tab(extra_buf,value_tab))) + if ((res = psiconv_write_tab(extra_buf,tab))) goto ERROR; } } - if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) + if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf)))) goto ERROR; - res = psiconv_list_concat(buf,extra_buf); + res = psiconv_buffer_concat(buf,extra_buf); ERROR: - psiconv_free_buffer(extra_buf); + psiconv_buffer_free(extra_buf); return res; } @@ -406,26 +348,20 @@ int res; psiconv_buffer extra_buf; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null character layout list"); + psiconv_warn(0,psiconv_buffer_length(buf),"Null character layout list"); return -PSICONV_E_GENERATE; } - if (!(extra_buf = psiconv_new_buffer())) + if (!(extra_buf = psiconv_buffer_new())) return -PSICONV_E_NOMEM; - if (!base || !base->color || !value->color || - (value->color->red != base->color->red) || - (value->color->green != base->color->green) || - (value->color->blue != base->color->blue)) { + if (!base || psiconv_compare_color(base->color,value->color)) { if ((res = psiconv_write_u8(extra_buf,0x19))) goto ERROR; if ((res = psiconv_write_color(extra_buf,value->color))) goto ERROR; } - if (!base || !base->back_color || !value->back_color || - (value->back_color->red != base->back_color->red) || - (value->back_color->green != base->back_color->green) || - (value->back_color->blue != base->back_color->blue)) { + if (!base || psiconv_compare_color(base->back_color,value->back_color)) { if ((res = psiconv_write_u8(extra_buf,0x1a))) goto ERROR; if ((res = psiconv_write_color(extra_buf,value->back_color))) @@ -457,7 +393,7 @@ if ((value->super_sub != psiconv_superscript) && (value->super_sub != psiconv_subscript) && (value->super_sub != psiconv_normalscript)) - psiconv_warn(0,psiconv_list_length(buf), + psiconv_warn(0,psiconv_buffer_length(buf), "Unknown supersubscript (%d); assuming normal", value->super_sub); if ((res = psiconv_write_u8(extra_buf,0x1f))) @@ -482,21 +418,19 @@ goto ERROR; } - if (!base || !value->font || !base->font || - (value->font->screenfont != base->font->screenfont) || - strcmp(value->font->name,base->font->name)) { + if (!base || psiconv_compare_font(base->font,value->font)) { if ((res = psiconv_write_u8(extra_buf,0x22))) goto ERROR; if ((res = psiconv_write_font(extra_buf,value->font))) goto ERROR; } - if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) + if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf)))) goto ERROR; - res = psiconv_list_concat(buf,extra_buf); + res = psiconv_buffer_concat(buf,extra_buf); ERROR: - psiconv_free_buffer(extra_buf); + psiconv_buffer_free(extra_buf); return res; }