Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1186 savelij 1
/* texfonts.c */
2
/*****************************************************************************/
3
/* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
4
/*                                                                           */
5
/* AS                                                                        */
6
/*                                                                           */
7
/* TeX-->ASCII/HTML Converter: Font Stuff                                    */
8
/*                                                                           */
9
/*****************************************************************************/
10
 
11
#include <stdlib.h>
12
 
13
#include "datatypes.h"
14
#include "texfonts.h"
15
#include "texutil.h"
16
 
17
/*--------------------------------------------------------------------------*/
18
 
19
typedef struct sFontSave
20
{
21
  struct sFontSave *pNext;
22
  int FontFlags;
23
  tFontSize FontSize;
24
} tFontSave, *tpFontSave;
25
 
26
/*--------------------------------------------------------------------------*/
27
 
28
int CurrFontFlags;
29
tFontSize CurrFontSize;
30
tFontType CurrFontType;
31
 
32
static tpFontSave pFontStack;
33
 
34
/*!------------------------------------------------------------------------
35
 * \fn     InitFont(void)
36
 * \brief  initialize font state
37
 * ------------------------------------------------------------------------ */
38
 
39
void InitFont(void)
40
{
41
  pFontStack = NULL;
42
  curr_tex_env_data.FontNest = 0;
43
  CurrFontSize = FontNormalSize;
44
  CurrFontType = FontStandard;
45
  CurrFontFlags = 0;
46
}
47
 
48
/*!------------------------------------------------------------------------
49
 * \fn     SaveFont(void)
50
 * \brief  push font size & flags to stack
51
 * ------------------------------------------------------------------------ */
52
 
53
void SaveFont(void)
54
{
55
  tpFontSave pNewSave;
56
 
57
  pNewSave = (tpFontSave) malloc(sizeof(*pNewSave));
58
  pNewSave->pNext = pFontStack;
59
  pNewSave->FontSize = CurrFontSize;
60
  pNewSave->FontFlags = CurrFontFlags;
61
  pFontStack = pNewSave;
62
  curr_tex_env_data.FontNest++;
63
}
64
 
65
/*!------------------------------------------------------------------------
66
 * \fn     RestoreFont(void)
67
 * \brief  push font size & flags to stack
68
 * ------------------------------------------------------------------------ */
69
 
70
extern void PrFontDiff(int OldFlags, int NewFlags);
71
extern void PrFontSize(tFontSize Type, Boolean On);
72
 
73
void RestoreFont(void)
74
{
75
  tpFontSave pOldSave;
76
 
77
  if (!pFontStack)
78
    return;
79
 
80
  PrFontDiff(CurrFontFlags, pFontStack->FontFlags);
81
  PrFontSize(CurrFontSize, False);
82
 
83
  pOldSave = pFontStack;
84
  pFontStack = pFontStack->pNext;
85
  CurrFontSize = pOldSave->FontSize;
86
  CurrFontFlags = pOldSave->FontFlags;
87
  free(pOldSave);
88
  curr_tex_env_data.FontNest--;
89
}
90
 
91
/*!------------------------------------------------------------------------
92
 * \fn     FreeFontStack(void)
93
 * \brief  dispose pushed font settings
94
 * ------------------------------------------------------------------------ */
95
 
96
void FreeFontStack(void)
97
{
98
  while (pFontStack)
99
  {
100
    tpFontSave pOld = pFontStack;
101
    pFontStack = pOld->pNext;
102
    free(pOld);
103
  }
104
}