diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/output_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/output_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,559 @@ + + +
+ +00001 /* +00002 * output.c +00003 * Copyright (C) 2002-2004 A.J. van Os; Released under GNU GPL +00004 * +00005 * Description: +00006 * Generic output generating functions +00007 */ +00008 +00009 #include "antiword.h" +00010 +00011 static conversion_type eConversionType = conversion_unknown; +00012 static encoding_type eEncoding = encoding_neutral; +00013 +00014 +00015 /* +00016 * vPrologue1 - get options and call a specific initialization +00017 */ +00018 static void +00019 vPrologue1(diagram_type *pDiag, const char *szTask, const char *szFilename) +00020 { +00021 options_type tOptions; +00022 +00023 fail(pDiag == NULL); +00024 fail(szTask == NULL || szTask[0] == '\0'); +00025 +00026 vGetOptions(&tOptions); +00027 eConversionType = tOptions.eConversionType; +00028 eEncoding = tOptions.eEncoding; +00029 +00030 switch (eConversionType) { +00031 case conversion_text: +00032 vPrologueTXT(pDiag, &tOptions); +00033 break; +00034 case conversion_fmt_text: +00035 vPrologueFMT(pDiag, &tOptions); +00036 break; +00037 case conversion_ps: +00038 vProloguePS(pDiag, szTask, szFilename, &tOptions); +00039 break; +00040 case conversion_xml: +00041 vPrologueXML(pDiag, &tOptions); +00042 break; +00043 case conversion_pdf: +00044 vProloguePDF(pDiag, szTask, &tOptions); +00045 break; +00046 default: +00047 DBG_DEC(eConversionType); +00048 break; +00049 } +00050 } /* end of vPrologue1 */ +00051 +00052 /* +00053 * vEpilogue - clean up after everything is done +00054 */ +00055 static void +00056 vEpilogue(diagram_type *pDiag) +00057 { +00058 switch (eConversionType) { +00059 case conversion_text: +00060 case conversion_fmt_text: +00061 vEpilogueTXT(pDiag->pOutFile); +00062 break; +00063 case conversion_ps: +00064 vEpiloguePS(pDiag); +00065 break; +00066 case conversion_xml: +00067 vEpilogueXML(pDiag); +00068 break; +00069 case conversion_pdf: +00070 vEpiloguePDF(pDiag); +00071 break; +00072 default: +00073 DBG_DEC(eConversionType); +00074 break; +00075 } +00076 } /* end of vEpilogue */ +00077 +00078 /* +00079 * vImagePrologue - perform image initialization +00080 */ +00081 void +00082 vImagePrologue(diagram_type *pDiag, const imagedata_type *pImg) +00083 { +00084 switch (eConversionType) { +00085 case conversion_text: +00086 case conversion_fmt_text: +00087 break; +00088 case conversion_ps: +00089 vImageProloguePS(pDiag, pImg); +00090 break; +00091 case conversion_xml: +00092 break; +00093 case conversion_pdf: +00094 vImageProloguePDF(pDiag, pImg); +00095 break; +00096 default: +00097 DBG_DEC(eConversionType); +00098 break; +00099 } +00100 } /* end of vImagePrologue */ +00101 +00102 /* +00103 * vImageEpilogue - clean up an image +00104 */ +00105 void +00106 vImageEpilogue(diagram_type *pDiag) +00107 { +00108 switch (eConversionType) { +00109 case conversion_text: +00110 case conversion_fmt_text: +00111 break; +00112 case conversion_ps: +00113 vImageEpiloguePS(pDiag); +00114 break; +00115 case conversion_xml: +00116 break; +00117 case conversion_pdf: +00118 vImageEpiloguePDF(pDiag); +00119 break; +00120 default: +00121 DBG_DEC(eConversionType); +00122 break; +00123 } +00124 } /* end of vImageEpilogue */ +00125 +00126 /* +00127 * bAddDummyImage - add a dummy image +00128 * +00129 * return TRUE when successful, otherwise FALSE +00130 */ +00131 BOOL +00132 bAddDummyImage(diagram_type *pDiag, const imagedata_type *pImg) +00133 { +00134 switch (eConversionType) { +00135 case conversion_text: +00136 case conversion_fmt_text: +00137 return FALSE; +00138 case conversion_ps: +00139 return bAddDummyImagePS(pDiag, pImg); +00140 case conversion_xml: +00141 return FALSE; +00142 case conversion_pdf: +00143 return bAddDummyImagePDF(pDiag, pImg); +00144 default: +00145 DBG_DEC(eConversionType); +00146 return FALSE; +00147 } +00148 } /* end of bAddDummyImage */ +00149 +00150 /* +00151 * pCreateDiagram - create and initialize a diagram +00152 * +00153 * remark: does not return if the diagram can't be created +00154 */ +00155 FILE *fp; +00156 diagram_type * +00157 pCreateDiagram(const char *szTask, const char *szFilename, FILE *ofp) +00158 { +00159 diagram_type *pDiag; +00160 +00161 fail(szTask == NULL || szTask[0] == '\0'); +00162 DBG_MSG("pCreateDiagram"); +00163 +00164 /* Get the necessary memory */ +00165 pDiag = xmalloc(sizeof(diagram_type)); +00166 /* Initialization */ +00167 #ifndef SYMBIAN +00168 pDiag->pOutFile = stdout; +00169 #else +00170 pDiag->pOutFile = /*stdout*/ofp; +00171 #endif /*SYMBIAN*/ +00172 vPrologue1(pDiag, szTask, szFilename); +00173 /* Return success */ +00174 return pDiag; +00175 } /* end of pCreateDiagram */ +00176 +00177 /* +00178 * vDestroyDiagram - remove a diagram by freeing the memory it uses +00179 */ +00180 void +00181 vDestroyDiagram(diagram_type *pDiag) +00182 { +00183 DBG_MSG("vDestroyDiagram"); +00184 +00185 fail(pDiag == NULL); +00186 +00187 if (pDiag == NULL) { +00188 return; +00189 } +00190 vEpilogue(pDiag); +00191 pDiag = xfree(pDiag); +00192 } /* end of vDestroyDiagram */ +00193 +00194 /* +00195 * vPrologue2 - call a specific initialization +00196 */ +00197 void +00198 vPrologue2(diagram_type *pDiag, int iWordVersion) +00199 { +00200 switch (eConversionType) { +00201 case conversion_text: +00202 case conversion_fmt_text: +00203 break; +00204 case conversion_ps: +00205 vAddFontsPS(pDiag); +00206 break; +00207 case conversion_xml: +00208 vCreateBookIntro(pDiag, iWordVersion); +00209 break; +00210 case conversion_pdf: +00211 vCreateInfoDictionary(pDiag, iWordVersion); +00212 vAddFontsPDF(pDiag); +00213 break; +00214 default: +00215 DBG_DEC(eConversionType); +00216 break; +00217 } +00218 } /* end of vPrologue2 */ +00219 +00220 /* +00221 * vMove2NextLine - move to the next line +00222 */ +00223 void +00224 vMove2NextLine(diagram_type *pDiag, drawfile_fontref tFontRef, +00225 USHORT usFontSize) +00226 { +00227 fail(pDiag == NULL); +00228 fail(pDiag->pOutFile == NULL); +00229 fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE); +00230 +00231 switch (eConversionType) { +00232 case conversion_text: +00233 case conversion_fmt_text: +00234 vMove2NextLineTXT(pDiag); +00235 break; +00236 case conversion_ps: +00237 vMove2NextLinePS(pDiag, usFontSize); +00238 break; +00239 case conversion_xml: +00240 vMove2NextLineXML(pDiag); +00241 break; +00242 case conversion_pdf: +00243 vMove2NextLinePDF(pDiag, usFontSize); +00244 break; +00245 default: +00246 DBG_DEC(eConversionType); +00247 break; +00248 } +00249 } /* end of vMove2NextLine */ +00250 +00251 /* +00252 * vSubstring2Diagram - put a sub string into a diagram +00253 */ +00254 void +00255 vSubstring2Diagram(diagram_type *pDiag, +00256 char *szString, size_t tStringLength, long lStringWidth, +00257 UCHAR ucFontColor, USHORT usFontstyle, drawfile_fontref tFontRef, +00258 USHORT usFontSize, USHORT usMaxFontSize) +00259 { +00260 switch (eConversionType) { +00261 case conversion_text: +00262 vSubstringTXT(pDiag, szString, tStringLength, lStringWidth); +00263 break; +00264 case conversion_fmt_text: +00265 vSubstringFMT(pDiag, szString, tStringLength, lStringWidth, +00266 usFontstyle); +00267 break; +00268 case conversion_ps: +00269 vSubstringPS(pDiag, szString, tStringLength, lStringWidth, +00270 ucFontColor, usFontstyle, tFontRef, +00271 usFontSize, usMaxFontSize); +00272 break; +00273 case conversion_xml: +00274 vSubstringXML(pDiag, szString, tStringLength, lStringWidth, +00275 usFontstyle); +00276 break; +00277 case conversion_pdf: +00278 vSubstringPDF(pDiag, szString, tStringLength, lStringWidth, +00279 ucFontColor, usFontstyle, tFontRef, +00280 usFontSize, usMaxFontSize); +00281 break; +00282 default: +00283 DBG_DEC(eConversionType); +00284 break; +00285 } +00286 pDiag->lXleft += lStringWidth; +00287 } /* end of vSubstring2Diagram */ +00288 +00289 /* +00290 * Create a start of paragraph (phase 1) +00291 * Before indentation, list numbering, bullets etc. +00292 */ +00293 void +00294 vStartOfParagraph1(diagram_type *pDiag, long lBeforeIndentation) +00295 { +00296 fail(pDiag == NULL); +00297 +00298 switch (eConversionType) { +00299 case conversion_text: +00300 case conversion_fmt_text: +00301 vStartOfParagraphTXT(pDiag, lBeforeIndentation); +00302 break; +00303 case conversion_ps: +00304 vStartOfParagraphPS(pDiag, lBeforeIndentation); +00305 break; +00306 case conversion_xml: +00307 break; +00308 case conversion_pdf: +00309 vStartOfParagraphPDF(pDiag, lBeforeIndentation); +00310 break; +00311 default: +00312 DBG_DEC(eConversionType); +00313 break; +00314 } +00315 } /* end of vStartOfParagraph1 */ +00316 +00317 /* +00318 * Create a start of paragraph (phase 2) +00319 * After indentation, list numbering, bullets etc. +00320 */ +00321 void +00322 vStartOfParagraph2(diagram_type *pDiag) +00323 { +00324 fail(pDiag == NULL); +00325 +00326 switch (eConversionType) { +00327 case conversion_text: +00328 case conversion_fmt_text: +00329 break; +00330 case conversion_ps: +00331 break; +00332 case conversion_xml: +00333 vStartOfParagraphXML(pDiag, 1); +00334 break; +00335 case conversion_pdf: +00336 break; +00337 default: +00338 DBG_DEC(eConversionType); +00339 break; +00340 } +00341 } /* end of vStartOfParagraph2 */ +00342 +00343 /* +00344 * Create an end of paragraph +00345 */ +00346 void +00347 vEndOfParagraph(diagram_type *pDiag, +00348 drawfile_fontref tFontRef, USHORT usFontSize, long lAfterIndentation) +00349 { +00350 fail(pDiag == NULL); +00351 fail(pDiag->pOutFile == NULL); +00352 fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE); +00353 fail(lAfterIndentation < 0); +00354 +00355 switch (eConversionType) { +00356 case conversion_text: +00357 case conversion_fmt_text: +00358 vEndOfParagraphTXT(pDiag, lAfterIndentation); +00359 break; +00360 case conversion_ps: +00361 vEndOfParagraphPS(pDiag, usFontSize, lAfterIndentation); +00362 break; +00363 case conversion_xml: +00364 vEndOfParagraphXML(pDiag, 1); +00365 break; +00366 case conversion_pdf: +00367 vEndOfParagraphPDF(pDiag, usFontSize, lAfterIndentation); +00368 break; +00369 default: +00370 DBG_DEC(eConversionType); +00371 break; +00372 } +00373 } /* end of vEndOfParagraph */ +00374 +00375 /* +00376 * Create an end of page +00377 */ +00378 void +00379 vEndOfPage(diagram_type *pDiag, long lAfterIndentation, BOOL bNewSection) +00380 { +00381 switch (eConversionType) { +00382 case conversion_text: +00383 case conversion_fmt_text: +00384 vEndOfPageTXT(pDiag, lAfterIndentation); +00385 break; +00386 case conversion_ps: +00387 vEndOfPagePS(pDiag, bNewSection); +00388 break; +00389 case conversion_xml: +00390 vEndOfPageXML(pDiag); +00391 break; +00392 case conversion_pdf: +00393 vEndOfPagePDF(pDiag, bNewSection); +00394 break; +00395 default: +00396 DBG_DEC(eConversionType); +00397 break; +00398 } +00399 } /* end of vEndOfPage */ +00400 +00401 /* +00402 * vSetHeaders - set the headers +00403 */ +00404 void +00405 vSetHeaders(diagram_type *pDiag, USHORT usIstd) +00406 { +00407 switch (eConversionType) { +00408 case conversion_text: +00409 case conversion_fmt_text: +00410 break; +00411 case conversion_ps: +00412 break; +00413 case conversion_xml: +00414 vSetHeadersXML(pDiag, usIstd); +00415 break; +00416 case conversion_pdf: +00417 break; +00418 default: +00419 DBG_DEC(eConversionType); +00420 break; +00421 } +00422 } /* end of vSetHeaders */ +00423 +00424 /* +00425 * Create a start of list +00426 */ +00427 void +00428 vStartOfList(diagram_type *pDiag, UCHAR ucNFC, BOOL bIsEndOfTable) +00429 { +00430 switch (eConversionType) { +00431 case conversion_text: +00432 case conversion_fmt_text: +00433 break; +00434 case conversion_ps: +00435 break; +00436 case conversion_xml: +00437 vStartOfListXML(pDiag, ucNFC, bIsEndOfTable); +00438 break; +00439 case conversion_pdf: +00440 break; +00441 default: +00442 DBG_DEC(eConversionType); +00443 break; +00444 } +00445 } /* end of vStartOfList */ +00446 +00447 /* +00448 * Create an end of list +00449 */ +00450 void +00451 vEndOfList(diagram_type *pDiag) +00452 { +00453 switch (eConversionType) { +00454 case conversion_text: +00455 case conversion_fmt_text: +00456 break; +00457 case conversion_ps: +00458 break; +00459 case conversion_xml: +00460 vEndOfListXML(pDiag); +00461 break; +00462 case conversion_pdf: +00463 break; +00464 default: +00465 DBG_DEC(eConversionType); +00466 break; +00467 } +00468 } /* end of vEndOfList */ +00469 +00470 /* +00471 * Create a start of a list item +00472 */ +00473 void +00474 vStartOfListItem(diagram_type *pDiag, BOOL bNoMarks) +00475 { +00476 switch (eConversionType) { +00477 case conversion_text: +00478 case conversion_fmt_text: +00479 break; +00480 case conversion_ps: +00481 break; +00482 case conversion_xml: +00483 vStartOfListItemXML(pDiag, bNoMarks); +00484 break; +00485 case conversion_pdf: +00486 break; +00487 default: +00488 DBG_DEC(eConversionType); +00489 break; +00490 } +00491 } /* end of vStartOfListItem */ +00492 +00493 /* +00494 * Create an end of a table +00495 */ +00496 void +00497 vEndOfTable(diagram_type *pDiag) +00498 { +00499 switch (eConversionType) { +00500 case conversion_text: +00501 case conversion_fmt_text: +00502 break; +00503 case conversion_ps: +00504 break; +00505 case conversion_xml: +00506 vEndOfTableXML(pDiag); +00507 break; +00508 case conversion_pdf: +00509 break; +00510 default: +00511 DBG_DEC(eConversionType); +00512 break; +00513 } +00514 } /* end of vEndOfTable */ +00515 +00516 /* +00517 * Add a table row +00518 * +00519 * Returns TRUE when conversion type is XML +00520 */ +00521 BOOL +00522 bAddTableRow(diagram_type *pDiag, char **aszColTxt, +00523 int iNbrOfColumns, const short *asColumnWidth, UCHAR ucBorderInfo) +00524 { +00525 switch (eConversionType) { +00526 case conversion_text: +00527 case conversion_fmt_text: +00528 break; +00529 case conversion_ps: +00530 break; +00531 case conversion_xml: +00532 vAddTableRowXML(pDiag, aszColTxt, +00533 iNbrOfColumns, asColumnWidth, +00534 ucBorderInfo); +00535 return TRUE; +00536 case conversion_pdf: +00537 break; +00538 default: +00539 DBG_DEC(eConversionType); +00540 break; +00541 } +00542 return FALSE; +00543 } /* end of bAddTableRow */ +