--- psiconv/trunk/lib/psiconv/generate_texted.c 2000/12/24 16:03:57 73 +++ psiconv/trunk/lib/psiconv/generate_texted.c 2002/01/29 18:38:38 142 @@ -25,27 +25,72 @@ #include "generate_routines.h" #include "error.h" +#ifdef DMALLOC +#include +#endif + + int psiconv_write_texted_section(psiconv_buffer buf, - psiconv_texted_section value, - psiconv_character_layout base_char, - psiconv_paragraph_layout base_para) + const psiconv_texted_section value, + const psiconv_character_layout base_char, + const psiconv_paragraph_layout base_para, + psiconv_buffer *extra_buf) { - int res; + int res,with_layout_section=0; + psiconv_u32 layout_id; if (!value) { - psiconv_warn(0,psiconv_list_length(buf),"Null TextEd section"); - return -PSICONV_E_GENERATE; + psiconv_warn(0,psiconv_buffer_length(buf),"Null TextEd section"); + res = -PSICONV_E_GENERATE; + goto ERROR1; + } + + if (!(*extra_buf = psiconv_buffer_new())) { + res = -PSICONV_E_NOMEM; + goto ERROR1; } + layout_id = psiconv_buffer_unique_id(); + psiconv_buffer_add_target(*extra_buf,layout_id); + + if (psiconv_list_length(value->paragraphs)) { + with_layout_section = 1; + if ((res = psiconv_write_styleless_layout_section(*extra_buf, + value->paragraphs, + base_char,base_para))) + goto ERROR2; + } + if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_BODY))) - return res; + goto ERROR2; - /* TODO: TextEd Jumptable! */ + /* Partly dummy TextEd Jumptable */ + if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_REPLACEMENT))) + goto ERROR2; + if ((res = psiconv_write_u32(buf,0))) + goto ERROR2; + if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_UNKNOWN))) + goto ERROR2; + if ((res = psiconv_write_u32(buf,0))) + goto ERROR2; + if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_LAYOUT))) + goto ERROR2; + if (with_layout_section) { + if ((res = psiconv_write_offset(buf,layout_id))) + goto ERROR2; + } else { + if ((res = psiconv_write_u32(buf,0))) + goto ERROR2; + } if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_TEXT))) - return res; + goto ERROR2; return psiconv_write_text_section(buf,value->paragraphs); +ERROR2: + psiconv_buffer_free(*extra_buf); +ERROR1: + return res; }