⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * output.c * Copyright (C) 2002-2004 A.J. van Os; Released under GNU GPL * * Description: * Generic output generating functions */#include "antiword.h"static conversion_type	eConversionType = conversion_unknown;static encoding_type	eEncoding = encoding_neutral;/* * vPrologue1 - get options and call a specific initialization */static voidvPrologue1(diagram_type *pDiag, const char *szTask, const char *szFilename){	options_type	tOptions;	fail(pDiag == NULL);	fail(szTask == NULL || szTask[0] == '\0');	vGetOptions(&tOptions);	eConversionType = tOptions.eConversionType;	eEncoding = tOptions.eEncoding;	switch (eConversionType) {	case conversion_text:		vPrologueTXT(pDiag, &tOptions);		break;	case conversion_fmt_text:		vPrologueFMT(pDiag, &tOptions);		break;	case conversion_ps:		vProloguePS(pDiag, szTask, szFilename, &tOptions);		break;	case conversion_xml:		vPrologueXML(pDiag, &tOptions);		break;	case conversion_pdf:		vProloguePDF(pDiag, szTask, &tOptions);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vPrologue1 *//* * vEpilogue - clean up after everything is done */static voidvEpilogue(diagram_type *pDiag){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		vEpilogueTXT(pDiag->pOutFile);		break;	case conversion_ps:		vEpiloguePS(pDiag);		break;	case conversion_xml:		vEpilogueXML(pDiag);		break;	case conversion_pdf:		vEpiloguePDF(pDiag);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vEpilogue *//* * vImagePrologue - perform image initialization */voidvImagePrologue(diagram_type *pDiag, const imagedata_type *pImg){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		vImageProloguePS(pDiag, pImg);		break;	case conversion_xml:		break;	case conversion_pdf:		vImageProloguePDF(pDiag, pImg);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vImagePrologue *//* * vImageEpilogue - clean up an image */voidvImageEpilogue(diagram_type *pDiag){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		vImageEpiloguePS(pDiag);		break;	case conversion_xml:		break;	case conversion_pdf:		vImageEpiloguePDF(pDiag);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vImageEpilogue *//* * bAddDummyImage - add a dummy image * * return TRUE when successful, otherwise FALSE */BOOLbAddDummyImage(diagram_type *pDiag, const imagedata_type *pImg){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		return FALSE;	case conversion_ps:		return bAddDummyImagePS(pDiag, pImg);	case conversion_xml:		return FALSE;	case conversion_pdf:		return bAddDummyImagePDF(pDiag, pImg);	default:		DBG_DEC(eConversionType);		return FALSE;	}} /* end of bAddDummyImage *//* * pCreateDiagram - create and initialize a diagram * * remark: does not return if the diagram can't be created */diagram_type *pCreateDiagram(const char *szTask, const char *szFilename){	diagram_type	*pDiag;	fail(szTask == NULL || szTask[0] == '\0');	DBG_MSG("pCreateDiagram");	/* Get the necessary memory */	pDiag = xmalloc(sizeof(diagram_type));	/* Initialization */	pDiag->pOutFile = stdout;	vPrologue1(pDiag, szTask, szFilename);	/* Return success */	return pDiag;} /* end of pCreateDiagram *//* * vDestroyDiagram - remove a diagram by freeing the memory it uses */voidvDestroyDiagram(diagram_type *pDiag){	DBG_MSG("vDestroyDiagram");	fail(pDiag == NULL);	if (pDiag == NULL) {		return;	}	vEpilogue(pDiag);	pDiag = xfree(pDiag);} /* end of vDestroyDiagram *//* * vPrologue2 - call a specific initialization */voidvPrologue2(diagram_type *pDiag, int iWordVersion){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		vAddFontsPS(pDiag);		break;	case conversion_xml:		vCreateBookIntro(pDiag, iWordVersion);		break;	case conversion_pdf:		vCreateInfoDictionary(pDiag, iWordVersion);		vAddFontsPDF(pDiag);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vPrologue2 *//* * vMove2NextLine - move to the next line */voidvMove2NextLine(diagram_type *pDiag, drawfile_fontref tFontRef,	USHORT usFontSize){	fail(pDiag == NULL);	fail(pDiag->pOutFile == NULL);	fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE);	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		vMove2NextLineTXT(pDiag);		break;	case conversion_ps:		vMove2NextLinePS(pDiag, usFontSize);		break;	case conversion_xml:		vMove2NextLineXML(pDiag);		break;	case conversion_pdf:		vMove2NextLinePDF(pDiag, usFontSize);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vMove2NextLine *//* * vSubstring2Diagram - put a sub string into a diagram */voidvSubstring2Diagram(diagram_type *pDiag,	char *szString, size_t tStringLength, long lStringWidth,	UCHAR ucFontColor, USHORT usFontstyle, drawfile_fontref tFontRef,	USHORT usFontSize, USHORT usMaxFontSize){	switch (eConversionType) {	case conversion_text:		vSubstringTXT(pDiag, szString, tStringLength, lStringWidth);		break;	case conversion_fmt_text:		vSubstringFMT(pDiag, szString, tStringLength, lStringWidth,				usFontstyle);		break;	case conversion_ps:		vSubstringPS(pDiag, szString, tStringLength, lStringWidth,				ucFontColor, usFontstyle, tFontRef,				usFontSize, usMaxFontSize);		break;	case conversion_xml:		vSubstringXML(pDiag, szString, tStringLength, lStringWidth,				usFontstyle);		break;	case conversion_pdf:		vSubstringPDF(pDiag, szString, tStringLength, lStringWidth,				ucFontColor, usFontstyle, tFontRef,				usFontSize, usMaxFontSize);		break;	default:		DBG_DEC(eConversionType);		break;	}	pDiag->lXleft += lStringWidth;} /* end of vSubstring2Diagram *//* * Create a start of paragraph (phase 1) * Before indentation, list numbering, bullets etc. */voidvStartOfParagraph1(diagram_type *pDiag, long lBeforeIndentation){	fail(pDiag == NULL);	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		vStartOfParagraphTXT(pDiag, lBeforeIndentation);		break;	case conversion_ps:		vStartOfParagraphPS(pDiag, lBeforeIndentation);		break;	case conversion_xml:		break;	case conversion_pdf:		vStartOfParagraphPDF(pDiag, lBeforeIndentation);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vStartOfParagraph1 *//* * Create a start of paragraph (phase 2) * After indentation, list numbering, bullets etc. */voidvStartOfParagraph2(diagram_type *pDiag){	fail(pDiag == NULL);	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vStartOfParagraphXML(pDiag, 1);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vStartOfParagraph2 *//* * Create an end of paragraph */voidvEndOfParagraph(diagram_type *pDiag,	drawfile_fontref tFontRef, USHORT usFontSize, long lAfterIndentation){	fail(pDiag == NULL);	fail(pDiag->pOutFile == NULL);	fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE);	fail(lAfterIndentation < 0);	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		vEndOfParagraphTXT(pDiag, lAfterIndentation);		break;	case conversion_ps:		vEndOfParagraphPS(pDiag, usFontSize, lAfterIndentation);		break;	case conversion_xml:		vEndOfParagraphXML(pDiag, 1);		break;	case conversion_pdf:		vEndOfParagraphPDF(pDiag, usFontSize, lAfterIndentation);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vEndOfParagraph *//* * Create an end of page */voidvEndOfPage(diagram_type *pDiag, long lAfterIndentation, BOOL bNewSection){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		vEndOfPageTXT(pDiag, lAfterIndentation);		break;	case conversion_ps:		vEndOfPagePS(pDiag, bNewSection);		break;	case conversion_xml:		vEndOfPageXML(pDiag);		break;	case conversion_pdf:		vEndOfPagePDF(pDiag, bNewSection);		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vEndOfPage *//* * vSetHeaders - set the headers */voidvSetHeaders(diagram_type *pDiag, USHORT usIstd){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vSetHeadersXML(pDiag, usIstd);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vSetHeaders *//* * Create a start of list */voidvStartOfList(diagram_type *pDiag, UCHAR ucNFC, BOOL bIsEndOfTable){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vStartOfListXML(pDiag, ucNFC, bIsEndOfTable);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vStartOfList *//* * Create an end of list */voidvEndOfList(diagram_type *pDiag){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vEndOfListXML(pDiag);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vEndOfList *//* * Create a start of a list item */voidvStartOfListItem(diagram_type *pDiag, BOOL bNoMarks){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vStartOfListItemXML(pDiag, bNoMarks);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vStartOfListItem *//* * Create an end of a table */voidvEndOfTable(diagram_type *pDiag){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vEndOfTableXML(pDiag);		break;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}} /* end of vEndOfTable *//* * Add a table row * * Returns TRUE when conversion type is XML */BOOLbAddTableRow(diagram_type *pDiag, char **aszColTxt,	int iNbrOfColumns, const short *asColumnWidth, UCHAR ucBorderInfo){	switch (eConversionType) {	case conversion_text:	case conversion_fmt_text:		break;	case conversion_ps:		break;	case conversion_xml:		vAddTableRowXML(pDiag, aszColTxt,				iNbrOfColumns, asColumnWidth,				ucBorderInfo);		return TRUE;	case conversion_pdf:		break;	default:		DBG_DEC(eConversionType);		break;	}	return FALSE;} /* end of bAddTableRow */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -