00001
00002
00003
00004
00005
00006
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
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 }
00051
00052
00053
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 }
00077
00078
00079
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 }
00101
00102
00103
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 }
00125
00126
00127
00128
00129
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 }
00149
00150
00151
00152
00153
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
00165 pDiag = xmalloc(sizeof(diagram_type));
00166
00167 #ifndef SYMBIAN
00168 pDiag->pOutFile = stdout;
00169 #else
00170 pDiag->pOutFile = ofp;
00171 #endif
00172 vPrologue1(pDiag, szTask, szFilename);
00173
00174 return pDiag;
00175 }
00176
00177
00178
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 }
00193
00194
00195
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 }
00219
00220
00221
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 }
00250
00251
00252
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 }
00288
00289
00290
00291
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 }
00316
00317
00318
00319
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 }
00342
00343
00344
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 }
00374
00375
00376
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 }
00400
00401
00402
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 }
00423
00424
00425
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 }
00446
00447
00448
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 }
00469
00470
00471
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 }
00492
00493
00494
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 }
00515
00516
00517
00518
00519
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 }