Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

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