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

📄 fmt_text.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * fmt_text.c * Copyright (C) 2004 A.J. van Os; Released under GNU GPL * * Description: * Functions to deal with the Formatted Text format * * Based on patches send by: Ofir Reichenberg <ofir@qlusters.com> * * The credit should go to him, but all the bugs are mine. */#include <string.h>#include "antiword.h"/* The character set */static encoding_type	eEncoding = encoding_neutral;/* Current vertical position information */static long		lYtopCurr = 0;/* Local representation of the non-breaking space */static UCHAR		ucNbsp = 0;/* * vPrologueFMT - set options and perform the Formatted Text initialization */voidvPrologueFMT(diagram_type *pDiag, const options_type *pOptions){	fail(pDiag == NULL);	fail(pOptions == NULL);	eEncoding = pOptions->eEncoding;	pDiag->lXleft = 0;	pDiag->lYtop = 0;	lYtopCurr = 0;} /* end of vPrologueFMT *//* * vPrintFMT - print a Formatted Text string */static voidvPrintFMT(FILE *pFile,	const char *szString, size_t tStringLength, USHORT usFontstyle){	const UCHAR	*pucByte, *pucStart, *pucLast, *pucNonSpace;	fail(szString == NULL);	if (szString == NULL || szString[0] == '\0' || tStringLength == 0) {		return;	}	if (eEncoding == encoding_utf_8) {		fprintf(pFile, "%.*s", (int)tStringLength, szString);		return;	}	if (ucNbsp == 0) {		ucNbsp = ucGetNbspCharacter();		DBG_HEX_C(ucNbsp != 0xa0, ucNbsp);	}	pucStart = (UCHAR *)szString;	pucLast = pucStart + tStringLength - 1;	pucNonSpace = pucLast;	while ((*pucNonSpace == (UCHAR)' ' || *pucNonSpace == ucNbsp) &&	       pucNonSpace > pucStart) {		pucNonSpace--;	}	/* 1: The spaces at the start */	pucByte = pucStart;	while ((*pucByte == (UCHAR)' ' || *pucByte == ucNbsp) &&	       pucByte <= pucLast) {		(void)putc(' ', pFile);		pucByte++;	}	if (pucByte > pucLast) {		/* There is no text, just spaces */		return;	}	/* 2: Start the *bold*, /italic/ and _underline_ */	if (bIsBold(usFontstyle)) {		(void)putc('*', pFile);	}	if (bIsItalic(usFontstyle)) {		(void)putc('/', pFile);	}	if (bIsUnderline(usFontstyle)) {		(void)putc('_', pFile);	}	/* 3: The text itself */	while (pucByte <= pucNonSpace) {		if (*pucByte == ucNbsp) {			(void)putc(' ', pFile);		} else {			(void)putc((char)*pucByte, pFile);		}		pucByte++;	}	/* 4: End the *bold*, /italic/ and _underline_ */	if (bIsUnderline(usFontstyle)) {		(void)putc('_', pFile);	}	if (bIsItalic(usFontstyle)) {		(void)putc('/', pFile);	}	if (bIsBold(usFontstyle)) {		(void)putc('*', pFile);	}	/* 5: The spaces at the end */	while (pucByte <= pucLast) {		(void)putc(' ', pFile);		pucByte++;	}} /* end of vPrintFMT *//* * vMoveTo - move to the given X,Y coordinates * * Move the current position of the given diagram to its X,Y coordinates, * start on a new page if needed */static voidvMoveTo(diagram_type *pDiag){	int	iCount, iNbr;	fail(pDiag == NULL);	fail(pDiag->pOutFile == NULL);	if (pDiag->lYtop != lYtopCurr) {		iNbr = iDrawUnits2Char(pDiag->lXleft);		for (iCount = 0; iCount < iNbr; iCount++) {			(void)putc(FILLER_CHAR, pDiag->pOutFile);		}		lYtopCurr = pDiag->lYtop;	}} /* end of vMoveTo *//* * vSubstringFMT - print a sub string */voidvSubstringFMT(diagram_type *pDiag,	const char *szString, size_t tStringLength, long lStringWidth,	USHORT usFontstyle){	fail(pDiag == NULL || szString == NULL);	fail(pDiag->pOutFile == NULL);	fail(pDiag->lXleft < 0);	fail(tStringLength != strlen(szString));	if (szString[0] == '\0' || tStringLength == 0) {		return;	}	vMoveTo(pDiag);	vPrintFMT(pDiag->pOutFile, szString, tStringLength, usFontstyle);	pDiag->lXleft += lStringWidth;} /* end of vSubstringFMT */

⌨️ 快捷键说明

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