📄 text.c
字号:
/* * text.c * Copyright (C) 1999-2004 A.J. van Os; Released under GNU GPL * * Description: * Functions to deal with the Text format * */#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;/* * vPrologueTXT - set options and perform the Text initialization */voidvPrologueTXT(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 vPrologueTXT *//* * vEpilogueTXT - clean up after everything is done */voidvEpilogueTXT(FILE *pOutFile){ fail(pOutFile == NULL); fprintf(pOutFile, "\n");} /* end of vEpilogueTXT *//* * vPrintTXT - print a Text string */static voidvPrintTXT(FILE *pFile, const char *szString, size_t tStringLength){ const UCHAR *ucBytes; size_t tCount; 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); } ucBytes = (UCHAR *)szString; for (tCount = 0; tCount < tStringLength ; tCount++) { if (ucBytes[tCount] == ucNbsp) { (void)putc(' ', pFile); } else { (void)putc(szString[tCount], pFile); } }} /* end of vPrintTXT *//* * 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 *//* * vMove2NextLineTXT - move to the next line */voidvMove2NextLineTXT(diagram_type *pDiag){ fail(pDiag == NULL); fail(pDiag->pOutFile == NULL); pDiag->lYtop++; (void)fprintf(pDiag->pOutFile, "\n");} /* end of vMove2NextLineTXT *//* * vSubstringTXT - print a sub string */voidvSubstringTXT(diagram_type *pDiag, const char *szString, size_t tStringLength, long lStringWidth){ 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); vPrintTXT(pDiag->pOutFile, szString, tStringLength); pDiag->lXleft += lStringWidth;} /* end of vSubstringTXT *//* * Create an start of paragraph by moving the y-top mark */voidvStartOfParagraphTXT(diagram_type *pDiag, long lBeforeIndentation){ fail(pDiag == NULL); fail(lBeforeIndentation < 0); if (lBeforeIndentation >= lTwips2MilliPoints(HEADING_GAP)) { /* A large gap is replaced by an empty line */ vMove2NextLineTXT(pDiag); }} /* end of vStartOfParagraphTXT *//* * Create an end of paragraph by moving the y-top mark */voidvEndOfParagraphTXT(diagram_type *pDiag, long lAfterIndentation){ fail(pDiag == NULL); fail(pDiag->pOutFile == NULL); fail(lAfterIndentation < 0); if (pDiag->lXleft > 0) { /* To the start of the line */ vMove2NextLineTXT(pDiag); } if (lAfterIndentation >= lTwips2MilliPoints(HEADING_GAP)) { /* A large gap is replaced by an empty line */ vMove2NextLineTXT(pDiag); }} /* end of vEndOfParagraphTXT *//* * Create an end of page */voidvEndOfPageTXT(diagram_type *pDiag, long lAfterIndentation){ vEndOfParagraphTXT(pDiag, lAfterIndentation);} /* end of vEndOfPageTXT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -