--- psiconv/trunk/lib/psiconv/generate_texted.c 2000/12/25 22:25:33 79 +++ psiconv/trunk/lib/psiconv/generate_texted.c 2000/12/27 02:12:23 80 @@ -27,37 +27,65 @@ 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_buffer_length(buf),"Null TextEd section"); - return -PSICONV_E_GENERATE; + 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; - /* Dummy TextEd Jumptable */ + /* Partly dummy TextEd Jumptable */ if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_REPLACEMENT))) - return res; + goto ERROR2; if ((res = psiconv_write_u32(buf,0))) - return res; + goto ERROR2; if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_UNKNOWN))) - return res; + goto ERROR2; if ((res = psiconv_write_u32(buf,0))) - return res; + goto ERROR2; if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_LAYOUT))) - return res; - if ((res = psiconv_write_u32(buf,0))) - return res; + 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; }