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 | } |