/* Copyright (C) 2013-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: hbhtml.ctr */ /** @file hbhtml.c The hbhtml module. */ /** States for state machine hbhtml_stm1. */ enum { /** State: Backslash found */ #line 103 "hbhtml.ctr" STM1_ST_BS = 0, /** State: Error occured */ #line 102 "hbhtml.ctr" STM1_ST_ERROR = 1, /** State: One percent sign found */ #line 104 "hbhtml.ctr" STM1_ST_PERCENT = 2, /** State: Recording a special */ #line 105 "hbhtml.ctr" STM1_ST_SPECIAL = 3, /** State: Backslash found in special */ #line 106 "hbhtml.ctr" STM1_ST_SPEC_BS = 4, /** State: Percent found in special */ #line 107 "hbhtml.ctr" STM1_ST_SPEC_PC = 5, /** State: Start state */ #line 101 "hbhtml.ctr" STM1_ST_START = 6 }; /** Inputs for state machine hbhtml_stm1. */ enum { /** State machine input: Any character */ #line 110 "hbhtml.ctr" STM1_I_ANY = 0, /** State machine input: Backslash */ #line 111 "hbhtml.ctr" STM1_I_BS = 1, /** State machine input: Percent sign */ #line 112 "hbhtml.ctr" STM1_I_PERCENT = 2 }; /** Outputs for state machine hbhtml_stm1. */ enum { /** State machine output: Shipout character after backslash */ #line 118 "hbhtml.ctr" STM1_O_BS_SHIPOUT = 0, /** State machine output: Error, do nothing */ #line 115 "hbhtml.ctr" STM1_O_ERROR = 1, /** State machine output: Execute special */ #line 126 "hbhtml.ctr" STM1_O_EXECUTE = 2, /** State machine output: Do nothing */ #line 116 "hbhtml.ctr" STM1_O_NOTHING = 3, /** State machine output: Shipout just percent sign */ #line 120 "hbhtml.ctr" STM1_O_PERCENT = 4, /** State machine output: Shipout percent sign and current character */ #line 119 "hbhtml.ctr" STM1_O_PERCENT_SHIPOUT = 5, /** State machine output: Add character to shipout buffer */ #line 117 "hbhtml.ctr" STM1_O_SHIPOUT = 6, /** State machine output: Add current character to special */ #line 122 "hbhtml.ctr" STM1_O_SPECIAL = 7, /** State machine output: Add char after backslash to special */ #line 123 "hbhtml.ctr" STM1_O_SPEC_BS = 8, /** State machine output: Add percent sign to special */ #line 125 "hbhtml.ctr" STM1_O_SPEC_PC = 9, /** State machine output: Add percent and current char to special */ #line 124 "hbhtml.ctr" STM1_O_SPEC_PC_ADD = 10, /** State machine output: Flush shipout and switch to saving special */ #line 121 "hbhtml.ctr" STM1_O_SWITCH = 11 }; /** Reset hbhtml_stm1 state machine. @param st Pointer to state variable. */ static void hbhtml_stm1_reset(int *st) { if(st) { *st = STM1_ST_START; } } /** State machine hbhtml_stm1 step. @param st Pointer to state variable. @param in Input. @return Transition output. */ static int hbhtml_stm1_step(int *st, int in) { int back = STM1_O_ERROR; if(st) { int os; int nf = 1; int ns = STM1_ST_ERROR; os = *st; switch(os) { case STM1_ST_PERCENT: { switch(in) { case STM1_I_BS: { ns = STM1_ST_BS; back = STM1_O_PERCENT; nf = 0; } break; case STM1_I_PERCENT: { ns = STM1_ST_SPECIAL; back = STM1_O_SWITCH; nf = 0; } break; } } break; case STM1_ST_SPECIAL: { switch(in) { case STM1_I_BS: { ns = STM1_ST_SPEC_BS; back = STM1_O_NOTHING; nf = 0; } break; case STM1_I_PERCENT: { ns = STM1_ST_SPEC_PC; back = STM1_O_NOTHING; nf = 0; } break; } } break; case STM1_ST_SPEC_PC: { switch(in) { case STM1_I_BS: { ns = STM1_ST_SPEC_BS; back = STM1_O_SPEC_PC; nf = 0; } break; case STM1_I_PERCENT: { ns = STM1_ST_START; back = STM1_O_EXECUTE; nf = 0; } break; } } break; case STM1_ST_START: { switch(in) { case STM1_I_BS: { ns = STM1_ST_BS; back = STM1_O_NOTHING; nf = 0; } break; case STM1_I_PERCENT: { ns = STM1_ST_PERCENT; back = STM1_O_NOTHING; nf = 0; } break; } } break; } if(nf) { if(os == STM1_ST_START) { ns = STM1_ST_START; back = STM1_O_SHIPOUT; } else { if(os == STM1_ST_BS) { ns = STM1_ST_START; back = STM1_O_BS_SHIPOUT; } else { if(os == STM1_ST_PERCENT) { ns = STM1_ST_START; back = STM1_O_PERCENT_SHIPOUT; } else { if(os == STM1_ST_SPECIAL) { ns = STM1_ST_SPECIAL; back = STM1_O_SPECIAL; } else { if(os == STM1_ST_SPEC_BS) { ns = STM1_ST_SPECIAL; back = STM1_O_SPEC_BS; } else { if(os == STM1_ST_SPEC_PC) { ns = STM1_ST_SPECIAL; back = STM1_O_SPEC_PC_ADD; } else { } } } } } } } *st = ns; } else { } return back; } /** States for state machine hbhtml_stm3. */ enum { /** State: Colon found */ #line 158 "hbhtml.ctr" STM3_ST_COLON = 0, /** State: Colon and slash */ #line 159 "hbhtml.ctr" STM3_ST_COLSL = 1, /** State: Not a protocol at start of text */ #line 161 "hbhtml.ctr" STM3_ST_ERROR = 2, /** State: ASCII characters (for protocol name) found */ #line 157 "hbhtml.ctr" STM3_ST_NAME = 3, /** State: No character processed yet */ #line 156 "hbhtml.ctr" STM3_ST_START = 4, /** State: Colon and two slashes found */ #line 160 "hbhtml.ctr" STM3_ST_SUCCESS = 5 }; /** Inputs for state machine hbhtml_stm3. */ enum { /** State machine input: Anything not listed below */ #line 163 "hbhtml.ctr" STM3_I_ANY = 0, /** State machine input: a-zA-Z01-9_ */ #line 164 "hbhtml.ctr" STM3_I_ASCII = 1, /** State machine input: Colon */ #line 165 "hbhtml.ctr" STM3_I_COLON = 2, /** State machine input: Slash */ #line 166 "hbhtml.ctr" STM3_I_SLASH = 3 }; /** Outputs for state machine hbhtml_stm3. */ enum { /** State machine output: ERROR found */ #line 169 "hbhtml.ctr" STM3_O_ERROR = 0, /** State machine output: OK so far */ #line 168 "hbhtml.ctr" STM3_O_OK = 1 }; /** Reset hbhtml_stm3 state machine. @param st Pointer to state variable. */ static void hbhtml_stm3_reset(int *st) { if(st) { *st = STM3_ST_START; } } /** State machine hbhtml_stm3 step. @param st Pointer to state variable. @param in Input. @return Transition output. */ static int hbhtml_stm3_step(int *st, int in) { int back = STM3_O_ERROR; if(st) { int os; int nf = 1; int ns = STM3_ST_ERROR; os = *st; switch(os) { case STM3_ST_COLON: { switch(in) { case STM3_I_SLASH: { ns = STM3_ST_COLSL; back = STM3_O_OK; nf = 0; } break; } } break; case STM3_ST_COLSL: { switch(in) { case STM3_I_SLASH: { ns = STM3_ST_SUCCESS; back = STM3_O_OK; nf = 0; } break; } } break; case STM3_ST_NAME: { switch(in) { case STM3_I_ASCII: { ns = STM3_ST_NAME; back = STM3_O_OK; nf = 0; } break; case STM3_I_COLON: { ns = STM3_ST_COLON; back = STM3_O_OK; nf = 0; } break; } } break; case STM3_ST_START: { switch(in) { case STM3_I_ASCII: { ns = STM3_ST_NAME; back = STM3_O_OK; nf = 0; } break; } } break; } if(nf) { if(os == STM3_ST_SUCCESS) { ns = STM3_ST_SUCCESS; back = STM3_O_OK; } else { } } *st = ns; } else { } return back; } #line 181 "hbhtml.ctr" #include "dk3all.h" #include "dk3strkv.h" #include "htmlbook.h" #include "dk3enc.h" #line 191 "hbhtml.ctr" /** Object for line reader (special comments). */ typedef struct { hb_job_t *job; /**< Job structure. */ hb_node_t *nodeptr; /**< Current node to process. */ unsigned long lineno; /**< Current line number to process. */ } hb_spc_reader_t; /** Translation table for ASCII characters. */ static char const * const hbhtml_translation_table[] = { /* 0 00 */ NULL, /* 1 01 */ NULL, /* 2 02 */ NULL, /* 3 03 */ NULL, /* 4 04 */ NULL, /* 5 05 */ NULL, /* 6 06 */ NULL, /* 7 07 */ NULL, /* 8 08 */ NULL, /* 9 09 */ "\t", /* 10 0a */ NULL, /* 11 0b */ NULL, /* 12 0c */ NULL, /* 13 0d */ NULL, /* 14 0e */ NULL, /* 15 0f */ NULL, /* 16 10 */ NULL, /* 17 11 */ NULL, /* 18 12 */ NULL, /* 19 13 */ NULL, /* 20 14 */ NULL, /* 21 15 */ NULL, /* 22 16 */ NULL, /* 23 17 */ NULL, /* 24 18 */ NULL, /* 25 19 */ NULL, /* 26 1a */ NULL, /* 27 1b */ NULL, /* 28 1c */ NULL, /* 29 1d */ NULL, /* 30 1e */ NULL, /* 31 1f */ NULL, /* 32 20 */ " ", /* 33 21 */ "!", /* 34 22 */ """, /* 35 23 */ "#", /* 36 24 */ "$", /* 37 25 */ "%", /* 38 26 */ "&", /* 39 27 */ "'", /* 40 28 */ "(", /* 41 29 */ ")", /* 42 2a */ "*", /* 43 2b */ "+", /* 44 2c */ ",", /* 45 2d */ "-", /* 46 2e */ ".", /* 47 2f */ "/", /* 48 30 */ "0", /* 49 31 */ "1", /* 50 32 */ "2", /* 51 33 */ "3", /* 52 34 */ "4", /* 53 35 */ "5", /* 54 36 */ "6", /* 55 37 */ "7", /* 56 38 */ "8", /* 57 39 */ "9", /* 58 3a */ ":", /* 59 3b */ ";", /* 60 3c */ "<", /* 61 3d */ "=", /* 62 3e */ ">", /* 63 3f */ "?", /* 64 40 */ "@", /* 65 41 */ "A", /* 66 42 */ "B", /* 67 43 */ "C", /* 68 44 */ "D", /* 69 45 */ "E", /* 70 46 */ "F", /* 71 47 */ "G", /* 72 48 */ "H", /* 73 49 */ "I", /* 74 4a */ "J", /* 75 4b */ "K", /* 76 4c */ "L", /* 77 4d */ "M", /* 78 4e */ "N", /* 79 4f */ "O", /* 80 50 */ "P", /* 81 51 */ "Q", /* 82 52 */ "R", /* 83 53 */ "S", /* 84 54 */ "T", /* 85 55 */ "U", /* 86 56 */ "V", /* 87 57 */ "W", /* 88 58 */ "X", /* 89 59 */ "Y", /* 90 5a */ "Z", /* 91 5b */ "[", /* 92 5c */ "\\", /* 93 5d */ "]", /* 94 5e */ "^", /* 95 5f */ "_", /* 96 60 */ "`", /* 97 61 */ "a", /* 98 62 */ "b", /* 99 63 */ "c", /* 100 64 */ "d", /* 101 65 */ "e", /* 102 66 */ "f", /* 103 67 */ "g", /* 104 68 */ "h", /* 105 69 */ "i", /* 106 6a */ "j", /* 107 6b */ "k", /* 108 6c */ "l", /* 109 6d */ "m", /* 110 6e */ "n", /* 111 6f */ "o", /* 112 70 */ "p", /* 113 71 */ "q", /* 114 72 */ "r", /* 115 73 */ "s", /* 116 74 */ "t", /* 117 75 */ "u", /* 118 76 */ "v", /* 119 77 */ "w", /* 120 78 */ "x", /* 121 79 */ "y", /* 122 7a */ "z", /* 123 7b */ "{", /* 124 7c */ "|", /* 125 7d */ "}", /* 126 7e */ "~", /* 127 7f */ NULL, /* 128 80 */ NULL, /* 129 81 */ NULL, /* 130 82 */ NULL, /* 131 83 */ NULL, /* 132 84 */ NULL, /* 133 85 */ NULL, /* 134 86 */ NULL, /* 135 87 */ NULL, /* 136 88 */ NULL, /* 137 89 */ NULL, /* 138 8a */ NULL, /* 139 8b */ NULL, /* 140 8c */ NULL, /* 141 8d */ NULL, /* 142 8e */ NULL, /* 143 8f */ NULL, /* 144 90 */ NULL, /* 145 91 */ NULL, /* 146 92 */ NULL, /* 147 93 */ NULL, /* 148 94 */ NULL, /* 149 95 */ NULL, /* 150 96 */ NULL, /* 151 97 */ NULL, /* 152 98 */ NULL, /* 153 99 */ NULL, /* 154 9a */ NULL, /* 155 9b */ NULL, /* 156 9c */ NULL, /* 157 9d */ NULL, /* 158 9e */ NULL, /* 159 9f */ NULL, /* 160 a0 */ " ", /* 161 a1 */ "¡", /* 162 a2 */ "¢", /* 163 a3 */ "£", /* 164 a4 */ "¤", /* 165 a5 */ "¥", /* 166 a6 */ "¦", /* 167 a7 */ "§", /* 168 a8 */ "¨", /* 169 a9 */ "©", /* 170 aa */ "ª", /* 171 ab */ "«", /* 172 ac */ "¬", /* 173 ad */ "­", /* 174 ae */ "®", /* 175 af */ "¯", /* 176 b0 */ "°", /* 177 b1 */ "±", /* 178 b2 */ "²", /* 179 b3 */ "³", /* 180 b4 */ "´", /* 181 b5 */ "µ", /* 182 b6 */ "¶", /* 183 b7 */ "·", /* 184 b8 */ "¸", /* 185 b9 */ "¹", /* 186 ba */ "º", /* 187 bb */ "»", /* 188 bc */ "¼", /* 189 bd */ "½", /* 190 be */ "¾", /* 191 bf */ "¿", /* 192 c0 */ "À", /* 193 c1 */ "Á", /* 194 c2 */ "Â", /* 195 c3 */ "Ã", /* 196 c4 */ "Ä", /* 197 c5 */ "Å", /* 198 c6 */ "Æ", /* 199 c7 */ "Ç", /* 200 c8 */ "È", /* 201 c9 */ "É", /* 202 ca */ "Ê", /* 203 cb */ "Ë", /* 204 cc */ "/Igrave;", /* 205 cd */ "Í", /* 206 ce */ "Î", /* 207 cf */ "Ï", /* 208 d0 */ "Ð", /* 209 d1 */ "Ñ", /* 210 d2 */ "Ò", /* 211 d3 */ "Ó", /* 212 d4 */ "Ô", /* 213 d5 */ "Õ", /* 214 d6 */ "Ö", /* 215 d7 */ "×", /* 216 d8 */ "Ø", /* 217 d9 */ "Ù", /* 218 da */ "Ú", /* 219 db */ "Û", /* 220 dc */ "Ü", /* 221 dd */ "Ý", /* 222 de */ "Þ", /* 223 df */ "ß", /* 224 e0 */ "à", /* 225 e1 */ "á", /* 226 e2 */ "â", /* 227 e3 */ "ã", /* 228 e4 */ "ä", /* 229 e5 */ "å", /* 230 e6 */ "æ", /* 231 e7 */ "ç", /* 232 e8 */ "è", /* 233 e9 */ "é", /* 234 ea */ "ê", /* 235 eb */ "ë", /* 236 ec */ "ì", /* 237 ed */ "í", /* 238 ee */ "î", /* 239 ef */ "ï", /* 240 f0 */ "ð", /* 241 f1 */ "ñ", /* 242 f2 */ "ò", /* 243 f3 */ "ó", /* 244 f4 */ "ô", /* 245 f5 */ "õ", /* 246 f6 */ "ö", /* 247 f7 */ "÷", /* 248 f8 */ "ø", /* 249 f9 */ "ù", /* 250 fa */ "ú", /* 251 fb */ "û", /* 252 fc */ "ü", /* 253 fd */ "ý", /* 254 fe */ "þ", /* 255 ff */ "ÿ" }; /** Constant 8-bit character keywords. */ static char const * const hbhtml_c8_kw[] = { /* 0 */ "\n", /* 1 */ " ", /* 2 */ "", /* 4 */ "src=\"", /* 5 */ "\"", /* 6 */ " alt=\"", /* 7 */ " title=\"", /* 8 */ " border=\"", /* 9 */ " width=\"", /* 10 */ " height=\"", /* 11 */ "\n", /* 12 */ "\n", /* 13 */ "\n", /* 14 */ "\n", /* 15 */ "\n", /* 16 */ "\n", /* 17 */ "\n", /* 18 */ "\n", /* 19 */ "", /* 20 */ "\n", /* 21 */ "\n", /* 23 */ "\n", /* 24 */ "\n", /* 25 */ "\n", /* 27 */ "\n", /* 29 */ "
\n", /* 30 */ "
\n", /* 31 */ "\n", /* 33 */ "
  •  
  • \n", /* 34 */ "
  • \n", /* 36 */ "
  • ", /* 37 */ "
  • \n", /* 38 */ "hb_nm_a", /* 39 */ "", /* 41 */ "", /* 42 */ "\"", /* 43 */ " class=\"", /* 44 */ " title=\"", /* 45 */ " type=\"", /* 46 */ "
    ", /* 47 */ "
    \n", /* 48 */ " ", /* 49 */ "", /* 52 */ "", /* 53 */ "\"",", /* 74 */ " 〈%lu〉", /* 92 */ "\n", /* 94 */ "\n", /* 95 */ "\n", /* 96 */ "\n", /* 98 */ "\n", /* 99 */ "\n", /* 100 */ "hb_a_i", /* 101 */ "hb_a_e", /* 102 */ "
    \n", /* 103 */ "\n", /* 106 */ "
    \n",
    
    /* 107 */
    "
    \n", /* 108 */ "\" target=\"_blank", /* 109 */ "
    \n", /* 110 */ "
    \n", /* 111 */ "
    \n", /* 112 */ "

    \n", /* 113 */ "
    \n

    \n", /* 114 */ "\n", /* 117 */ "", /* 118 */ " type=\"image/svg+xml\"", /* 119 */ " type=\"application/pdf\"", /* 120 */ "


    \n", /* 121 */ "\n", /* 123 */ "\n", /* 127 */ "author", /* 128 */ "contents", /* 129 */ "index", /* 130 */ "top", /* 131 */ "up", /* 132 */ "first", /* 133 */ "prev", /* 134 */ "next", /* 135 */ "last", /* 136 */ "#hb_toc", /* 137 */ "#hb_index", /* 138 */ "
    ", /* 97 */ " → 
    \n", /* 140 */ "\n", /* 142 */ "
    \n", /* 141 */ " \n", /* 143 */ "\">\n", /* 144 */ "hb_nm_a_parent", /* 145 */ "
    \n", /* 146 */ "", /* 148 */ "", /* 149 */ " ", /* 150 */ " ", /* 151 */ "", /* 153 */ "", /* 154 */ "\n", /* 159 */ "\n", /* 160 */ "\n", /* 161 */ "\n", /* 163 */ "\n", /* 164 */ "\n", /* 165 */ "\n", /* 167 */ "\" async>\n", /* 168 */ "\" type=\"text/javascript\" async>\n", /* 169 */ "