/* 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: hbconf.ctr */ /** @file hbconf.c The hbconf module. */ #line 105 "hbconf.ctr" #include "dk3all.h" #include "htmlbook.h" #include "dk3maihd.h" #line 112 "hbconf.ctr" /** Names of configuration file options. */ dkChar const * const hbconf_options[] = { /* 0 */ dkT("author"), /* 1 */ dkT("title"), /* 2 */ dkT("url"), /* 3 */ dkT("output directory"), /* 4 */ dkT("output script"), /* 5 */ dkT("html charset"), /* 6 */ dkT("template"), /* 7 */ dkT("style"), /* 8 */ dkT("page toc"), /* 9 */ dkT("index file"), /* 10 */ dkT("create index"), /* 11 */ dkT("replace ampersand"), /* 12 */ dkT("tidy"), /* 13 */ dkT("location"), /* 14 */ dkT("write position"), /* 15 */ dkT("navigation"), /* 16 */ dkT("short"), /* 17 */ dkT("file"), /* 18 */ dkT("suffix"), /* 19 */ dkT("icon toc"), /* 20 */ dkT("icon previous"), /* 21 */ dkT("icon next"), /* 22 */ dkT("icon index"), /* 23 */ dkT("create toc"), /* 24 */ dkT("shortcut icon"), /* 25 */ dkT("var"), /* 26 */ dkT("impressum link"), /* 27 */ dkT("impressum page"), /* 28 */ dkT("chm"), /* 29 */ dkT("ln"), /* 30 */ dkT("input encoding"), /* 31 */ dkT("chm language"), /* 32 */ dkT("js file"), /* 33 */ dkT("inherit js"), /* 34 */ dkT("section numbers in position"), /* 35 */ dkT("section numbers in index"), /* 36 */ dkT("section numbers in page header"), /* 37 */ dkT("context number"), /* 38 */ dkT("chm full text search"), /* 39 */ dkT("code line numbers"), /* 40 */ dkT("icon home"), /* 41 */ dkT("mark external links"), /* 42 */ dkT("external link marker symbol"), /* 43 */ dkT("table summaries"), /* 44 */ dkT("svg wh"), /* 45 */ dkT("html doctype"), /* 46 */ dkT("privacy link"), /* 47 */ dkT("privacy page"), /* 48 */ dkT("html lang"), /* 49 */ dkT("async js file"), /* 50 */ dkT("fold page toc"), /* 51 */ dkT("page toc js file"), NULL #line 328 "hbconf.ctr" }; /** Names for HTML doctypes. Must correspond to the enumeration in the htmlbook header and the hbhtml_doctypes array in the hbhtml module. */ dkChar const * const hbconf_doctype_names[] = { /* 0 */ dkT("none"), /* 1 */ dkT("html-5"), /* 2 */ dkT("html-4.01-strict"), /* 3 */ dkT("html-4.01-transitional"), /* 4 */ dkT("html-4.01-frameset"), /* 5 */ dkT("xhtml-1.0-strict"), /* 6 */ dkT("xhtml-1.0-transitional"), /* 7 */ dkT("xhtml-1.0-frameset"), /* 8 */ dkT("xhtml-1.1"), NULL #line 348 "hbconf.ctr" }; /** Character sets for HTML output. */ dkChar const * const hbconf_charsets[] = { /* 0 */ dkT("utf-8"), /* 1 */ dkT("ascii"), /* 2 */ dkT("us-ascii"), NULL #line 360 "hbconf.ctr" }; void hbconf_write_external_marker_character(hb_job_t *job) { char buf[8*sizeof(dk3_um_t)]; if (NULL != job) { job->elmbuf[0] = '\0'; if (0UL < job->elmchr) { if (0 != dk3ma_um_to_c8_hex_string(buf,sizeof(buf),job->elmchr,6)) { dk3str_c8_cpy(&(job->elmbuf[0]), buf); } } } } /** Set jump node for the nodes parents. @param nodeptr Text node. */ static void hbconf_set_jump_node(hb_node_t *nodeptr) { hb_node_t *parent; /* Parent node */ int cc; /* Flag: Can continue */ #line 391 "hbconf.ctr" parent = nodeptr->parent; cc = 1; while(cc) { if(parent) { if(parent->jumpnode) { cc = 0; } else { if(-1 != parent->indent) { parent->jumpnode = nodeptr; parent = parent->parent; } else { cc = 0; } } } else { cc = 0; } } #line 409 "hbconf.ctr" } static void hbconf_change_external_marker_character( hb_job_t *job, dkChar *vp, int *backptr ) { dk3_um_t um = (dk3_um_t)0UL; int ec = 0; if (0 != dk3ma_um_from_hex_string(&um, vp, &ec)) { if ((dk3_um_t)0x01000000UL > um) { job->elmchr = (unsigned long)um; hbconf_write_external_marker_character(job); } else { /* ERROR: Math overflow */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 101); } } else { switch (ec) { case DK3_ERROR_MATH_OVERFLOW : { /* ERROR: Math overflow */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 101); } break; default : { /* ERROR: Syntax, not a hexadecimal number */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 100); } break; } *backptr = -1; } } /** Process one configuration line from configuration file. @param job Job structure. @param il Input line to process. @param st Current section type, HB_SECTION_OPTIONS or HB_SECTION_CONTENTS. @return 1 on success, 0 on error (continue), -1 on error (exit). */ int hbconf_process_line(hb_job_t *job, dkChar *il, int st) { dk3_key_value_t *kvp; /* New key value pair */ hb_link_t *linkptr; /* New data for JS file */ dkChar *kp; /* Key */ dkChar *vp; /* Value */ dkChar *ap; /* Argument */ dkChar *nc; /* New text for existing key/value */ dkChar *ptr; /* Traverse string */ int newie; /* Input encoding */ int back = 1; #line 472 "hbconf.ctr" kp = dk3str_start(il, NULL); if(kp) { if(dkT('#') != *kp) { vp = dk3str_chr(kp, dkT('=')); if(vp) { *(vp++) = dkT('\0'); vp = dk3str_start(vp, NULL); if(vp) { dk3str_normalize(kp, NULL, dkT(' ')); dk3str_chomp(vp, NULL); switch(dk3str_array_index(hbconf_options, kp, 0)) { case 0: { /* author */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { if((job->currentnode)->author) { if(0UL != (job->currentnode)->objno) { dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 69); } } dk3_release((job->currentnode)->author); (job->currentnode)->author = ptr; } else { back = -1; /* REPORTED */ } } } break; case 1: { /* title */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { #if VERSION_BEFORE_20161026 if((job->currentnode)->title) { if(0UL != (job->currentnode)->objno) { /* Overwriting title */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 70); } } dk3_release((job->currentnode)->title); (job->currentnode)->title = ptr; #else if((job->currentnode)->title) { if ((job->currentnode)->fulltitle) { if (0UL != (job->currentnode)->objno) { /* Overwriting title */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 70); } dk3mem_free((job->currentnode)->fulltitle); } (job->currentnode)->fulltitle = ptr; } else { (job->currentnode)->title = ptr; } #endif } else { back = -1; /* REPORTED */ } } } break; case 2: { /* url */ if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3_release(job->url); job->url = ptr; } else { back = -1; /* REPORTED */ } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app,DK3_LL_ERROR,job->msg,38); back = -1; } } break; case 3: { /* output directory */ if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(job->outputdir) { /* Overwrite output directory */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 71); } dk3_release(job->outputdir); job->outputdir = ptr; /* CHECK FILENAME CHARACTERS */ if(!hbtool_check_filename_encoding(job, ptr)) { back = -1; } } else { back = -1; /* REPORTED */ } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 4: { /* output script */ if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { if(job->outputscript) { /* Overwrite output script */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 72); } dk3_release(job->outputscript); job->outputscript = ptr; /* CHECK FILENAME CHARACTERS */ if(!hbtool_check_filename(job, ptr)) { back = -1; } } else { back = -1; /* REPORTED */ } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 5: { /* html charset */ if(job->currentnode) { switch(dk3str_array_index(hbconf_charsets, vp, 0)) { case 0: { job->cs = HB_CS_UTF_8; } break; case 1: case 2: { job->cs = HB_CS_ASCII; } break; default: { /* WARNING: Unknown charset! */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 11); } break; } } } break; case 6: { /* template */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if((job->currentnode)->templatefi) { if(0UL != (job->currentnode)->objno) { /* Overwriting template */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 73); } } dk3_release((job->currentnode)->templatefi); (job->currentnode)->templatefi = ptr; } else { back = -1; /* REPORTED */ } } } break; case 7: { /* style */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->stylefile) { if(0UL != (job->currentnode)->objno) { /* Overwriting style */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 74); } } dk3_release((job->currentnode)->stylefile); (job->currentnode)->stylefile = ptr; } else { back = -1; /* REPORTED */ } } } break; case 8: { /* page toc */ if(job->currentnode) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { (job->currentnode)->options = ((job->currentnode)->options) | HB_NODE_OPT_PAGE_TOC; } else { (job->currentnode)->options = ((job->currentnode)->options) & (~(HB_NODE_OPT_PAGE_TOC)); } } else { /* WARNING: Not a boolean value! */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } } break; case 9: { /* toc file */ if(HB_SECTION_OPTIONS == st) { if(job->rootnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } dk3_release((job->rootnode)->filename); (job->rootnode)->filename = ptr; } else { back = -1; /* REPORTED */ } } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 10: { /* create index */ if(HB_SECTION_OPTIONS == st) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { job->options = (job->options) | HB_JOB_OPT_CREATE_INDEX; } else { job->options = (job->options) & (~(HB_JOB_OPT_CREATE_INDEX)); } } else { /* WARNING: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 11: { /* replace ampersand */ if(job->currentnode) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { (job->currentnode)->options = ((job->currentnode)->options) | HB_NODE_OPT_REPLACE_AMPERSAND; } else { (job->currentnode)->options = ((job->currentnode)->options) & (~(HB_NODE_OPT_REPLACE_AMPERSAND)); } } else { /* WARNING: Not a boolean. */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } } break; case 12: { /* use tidy */ if(job->currentnode) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { (job->currentnode)->options = ((job->currentnode)->options) | HB_NODE_OPT_USE_TIDY; } else { (job->currentnode)->options = ((job->currentnode)->options) & (~(HB_NODE_OPT_USE_TIDY)); } } else { /* WARNING: Not a boolean. */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } } break; case 13: { /* location */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3_release((job->currentnode)->location); (job->currentnode)->location = ptr; } else { back = -1; /* REPORTED */ } } } break; case 14: { /* write header chain */ if(job->currentnode) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { (job->currentnode)->options = ((job->currentnode)->options) | HB_NODE_OPT_HEADER_CHAIN; } else { (job->currentnode)->options = ((job->currentnode)->options) & (~(HB_NODE_OPT_HEADER_CHAIN)); } } else { /* WARNING: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } } break; case 15: { /* navigation */ /* navigation is now configured via arguments to special cmd */ } break; case 16: { /* short */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { if((job->currentnode)->shorttitle) { if(0UL != (job->currentnode)->objno) { /* Overwriting short */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 75); } } dk3_release((job->currentnode)->shorttitle); (job->currentnode)->shorttitle = ptr; } else { back = -1; /* REPORTED */ } } } break; case 17: { /* file */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->filename) { if(0UL != (job->currentnode)->objno) { /* Overwriting file */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 76); } } dk3_release((job->currentnode)->filename); (job->currentnode)->filename = ptr; hbconf_set_jump_node(job->currentnode); if(!(dk3sto_it_find_like(job->i_pnodes,job->currentnode,0))) { if(!(dk3sto_add(job->s_pnodes, job->currentnode))) { back = -1; /* REPORTED */ } } } else { back = -1; /* REPORTED */ } } } break; case 18: { /* suffix */ if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { if((job->currentnode)->suffix) { if(0UL != (job->currentnode)->objno) { /* Overwriting suffix */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 77); } } dk3_release((job->currentnode)->suffix); (job->currentnode)->suffix = ptr; /* CHECK FILENAME CHARACTERS */ if(!hbtool_check_filename_encoding(job, ptr)) { back = -1; } } else { back = -1; /* REPORTED */ } } } break; case 19: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->icontoc) { if(0UL != (job->currentnode)->objno) { /* Overwriting icon toc */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 78); } } dk3_release((job->currentnode)->icontoc); (job->currentnode)->icontoc = ptr; /* CHECK FILENAME CHARACTERS */ } else { back = -1; /* REPORTED */ } } } break; case 20: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->iconprev) { if(0UL != (job->currentnode)->objno) { /* Overwriting icon previous */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 79); } } dk3_release((job->currentnode)->iconprev); (job->currentnode)->iconprev = ptr; /* CHECK FILENAME CHARACTERS */ } else { back = -1; /* REPORTED */ } } } break; case 21: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->iconnext) { if(0UL != (job->currentnode)->objno) { /* Overwriting icon next */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 80); } } dk3_release((job->currentnode)->iconnext); (job->currentnode)->iconnext = ptr; /* CHECK FILENAME CHARACTERS */ } else { back = -1; /* REPORTED */ } } } break; case 22: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->iconindex) { if(0UL != (job->currentnode)->objno) { /* Overwriting icon index */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 81); } } dk3_release((job->currentnode)->iconindex); (job->currentnode)->iconindex = ptr; /* CHECK FILENAME CHARACTERS */ } else { back = -1; /* REPORTED */ } } } break; case 23: { if(HB_SECTION_OPTIONS == st) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { job->options = ((job->options) | HB_JOB_OPT_CREATE_TOC); } else { job->options = ((job->options) & (~(HB_JOB_OPT_CREATE_TOC))); } } else { /* Warning: Not a boolean! */ dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 24: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); hbtool_correct_backslash_to_slash(ptr); if((job->currentnode)->favicon) { if(0UL != (job->currentnode)->objno) { /* Overwriting shortcut icon */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 82); } } dk3_release((job->currentnode)->favicon); (job->currentnode)->favicon = ptr; /* ADD TO LIST OF ADDITIONAL FILES */ if (!(hbtool_add_file(job, ptr))) { back = -1; } /* CHECK FILENAME CHARACTERS */ if(!hbtool_check_filename_encoding(job, ptr)) { back = -1; } } else { back = -1; /* REPORTED */ } } } break; case 25: { #line 949 "hbconf.ctr" if(job->currentnode) { #line 950 "hbconf.ctr" ap = dk3str_next(vp, NULL); if(ap) { #line 952 "hbconf.ctr" kvp = (dk3_key_value_t *)dk3sto_it_find_like( (job->currentnode)->i_variables, vp, 1 ); if(kvp) { #line 956 "hbconf.ctr" nc = dk3str_dup_app(ap, job->app); if(nc) { #line 958 "hbconf.ctr" if(kvp->val) { if(0UL != (job->currentnode)->objno) { /* Overwriting var */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 83); } } dk3_release(kvp->val); kvp->val = nc; } else { #line 967 "hbconf.ctr" back = -1; /* REPORTED */ } } else { #line 970 "hbconf.ctr" kvp = dk3kv_new_app(vp, ap, job->app); if(kvp) { #line 972 "hbconf.ctr" if(!(dk3sto_add((job->currentnode)->s_variables, kvp))) { dk3kv_delete(kvp); #line 974 "hbconf.ctr" back = -1; /* REPORTED */ } } else { #line 977 "hbconf.ctr" back = -1; /* REPORTED */ } } } else { #line 981 "hbconf.ctr" kvp = (dk3_key_value_t *)dk3sto_it_find_like( (job->currentnode)->i_variables, vp, 1 ); if(kvp) { #line 985 "hbconf.ctr" dk3sto_remove((job->currentnode)->s_variables, kvp); dk3kv_delete(kvp); } } } else { #line 990 "hbconf.ctr" } } break; case 26: { #line 993 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp, job->app); if(ptr) { dk3_release(job->impressumlink); job->impressumlink = ptr; } else { back = -1; /* REPORTED */ } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 27: { #line 1007 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { #line 1008 "hbconf.ctr" job->impressumnode = hb_node_new( job, job->rootnode, job->lineno, job->nextobj, 0 ); #line 1012 "hbconf.ctr" job->nextobj += 1UL; if(job->impressumnode) { #line 1014 "hbconf.ctr" if((job->impressumnode)->depth > job->maxdepth) { job->maxdepth = (job->impressumnode)->depth; } (job->impressumnode)->options |= HB_NODE_OPT_IMPRESSUM; if(dk3sto_add(job->s_nodes, (void *)(job->impressumnode))) { #line 1020 "hbconf.ctr" (job->impressumnode)->title = dk3str_dup_app((job->msg)[0], job->app); if((job->impressumnode)->title) { #line 1023 "hbconf.ctr" dk3str_correct_filename(vp); if(!hbtool_check_filename(job, vp)) { back = -1; } /* CHECK FILENAME CHARACTERS */ (job->impressumnode)->filename = dk3str_dup_app(vp, job->app); if(!((job->impressumnode)->filename)) { back = -1; } } else { #line 1032 "hbconf.ctr" back = -1; /* REPORTED */ } if(1 == back) { #line 1035 "hbconf.ctr" if(!dk3sto_add(job->s_pnodes,(void*)(job->impressumnode))) { #line 1037 "hbconf.ctr" back = -1; /* REPORTED */ } } } else { #line 1041 "hbconf.ctr" hb_node_delete(job->impressumnode); job->impressumnode = NULL; back = -1; /* REPORTED */ } } else { #line 1046 "hbconf.ctr" back = -1; /* REPORTED */ } } else { #line 1049 "hbconf.ctr" /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 28: { #line 1054 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_CHM; } else { job->options &= (~(HB_JOB_OPT_CHM)); } } else { /* Warning: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 29: { #line 1071 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_LN; } else { job->options &= (~(HB_JOB_OPT_LN)); } } else { /* Warning: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 30: { #line 1088 "hbconf.ctr" newie = dk3enc_get_text_encoding_app(vp, NULL); if(0 <= newie) { if(HB_SECTION_OPTIONS == st) { job->iecmd = newie; (job->rootnode)->inenc = newie; } (job->currentnode)->inenc = newie; } else { if(dk3str_casecmp((job->kwnl)[25], vp) == 0) { if(HB_SECTION_OPTIONS == st) { job->iecmd = -1; (job->rootnode)->inenc = -1; } (job->currentnode)->inenc = -1; } else { back = 0; dk3app_log_i3(job->app, DK3_LL_ERROR, 129, 130, vp); } } } break; case 31: { #line 1109 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp, job->app); if(ptr) { dk3_release(job->chmlang); job->chmlang = ptr; } else { back = -1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 32: { #line 1123 "hbconf.ctr" if((job->currentnode) && (vp)) { if(!((job->currentnode)->s_jsfiles)) { (job->currentnode)->s_jsfiles = dk3sto_open_app(job->app); if((job->currentnode)->s_jsfiles) { dk3sto_set_comp( (job->currentnode)->s_jsfiles, hbnode_link_compare, 2 ); } } if(!((job->currentnode)->i_jsfiles)) { if((job->currentnode)->s_jsfiles) { (job->currentnode)->i_jsfiles = dk3sto_it_open( (job->currentnode)->s_jsfiles ); } } if((job->currentnode)->s_jsfiles) { if((job->currentnode)->i_jsfiles) { linkptr = hbnode_link_new( vp, (job->currentnode)->nextjs, job->app ); if(linkptr) { if(dk3sto_add((job->currentnode)->s_jsfiles, linkptr)) { (job->currentnode)->nextjs += 1UL; } else { hbnode_link_delete(linkptr); back = -1; } } else { back = -1; } } else { back = -1; } } else { back = -1; } } if(vp) { if(!hbtool_add_url(job, vp)) { back = -1; } } } break; case 33: { #line 1168 "hbconf.ctr" if(vp) { if(dk3str_is_bool(vp)) { if(dk3str_is_on(vp)) { (job->currentnode)->options &= (~(HB_NODE_OPT_STOP_JS_INHERITANCE)); } else { (job->currentnode)->options |= HB_NODE_OPT_STOP_JS_INHERITANCE; } } else { /* Warning: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { if(job->currentnode) { (job->currentnode)->options &= (~(HB_NODE_OPT_STOP_JS_INHERITANCE)); } } } break; case 34: { #line 1189 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { if (vp) { if (dk3str_is_bool(vp)) { if (dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_NUM_IN_POS; } else { job->options &= (~(HB_JOB_OPT_NUM_IN_POS)); } } else { /* Warning: Not a boolean */ dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_NUM_IN_POS; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 35: { #line 1210 "hbconf.ctr" if(HB_SECTION_OPTIONS == st) { if (vp) { if (dk3str_is_bool(vp)) { if (dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_NUM_IN_IDX; } else { job->options &= (~(HB_JOB_OPT_NUM_IN_IDX)); } } else { dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_NUM_IN_IDX; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 36: { if(HB_SECTION_OPTIONS == st) { if (vp) { if (dk3str_is_bool(vp)) { if (dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_NUM_IN_PAGE_HEADER; } else { job->options &= (~(HB_JOB_OPT_NUM_IN_PAGE_HEADER)); } } else { dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_NUM_IN_PAGE_HEADER; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 37: { long cn; if (vp) { #if VERSION_BEFORE_20140716 if (1 == dk3sf_sscanf3(vp, dkT("%ld"), &cn)) #else if (0 != dk3ma_l_from_string(&cn, vp, NULL)) #endif { if (job->currentnode) { (job->currentnode)->contnum = cn; } else { /* BUG: No current node set! */ } } else { /* ERROR: Not a number */ dk3app_log_i1(job->app, DK3_LL_ERROR, 141); } } else { /* ERROR: No context number specified */ dk3app_log_i3(job->app, DK3_LL_ERROR, 133, 134, kp); } } break; case 38: { if(HB_SECTION_OPTIONS == st) { if (vp) { if (dk3str_is_bool(vp)) { if (dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_CHM_FULL_TEXT_SEARCH; } else { job->options &= (~(HB_JOB_OPT_CHM_FULL_TEXT_SEARCH)); } } else { dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_CHM_FULL_TEXT_SEARCH; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 39: { if(HB_SECTION_OPTIONS == st) { if (vp) { if (dk3str_is_bool(vp)) { if (dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_CODE_LINE_NUMBERS; } else { job->options &= (~(HB_JOB_OPT_CODE_LINE_NUMBERS)); } } else { dk3app_log_i3(job->app, DK3_LL_WARNING, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_CODE_LINE_NUMBERS; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 40: { if(job->currentnode) { ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); if(!hbtool_check_filename(job, ptr)) { back = -1; } if((job->currentnode)->iconhome) { if(0UL != (job->currentnode)->objno) { /* Overwriting icon home */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 95); } } dk3_release((job->currentnode)->iconhome); (job->currentnode)->iconhome = ptr; /* CHECK FILENAME CHARACTERS */ } else { back = -1; /* REPORTED */ } } } break; case 41 : { if(HB_SECTION_OPTIONS == st) { if (NULL != vp) { if(dk3str_is_bool(vp)) { job->markel = dk3str_is_bool(vp); } else { /* WARNING: Not a boolean value! */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } else { job->markel = 1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 42 : { if(HB_SECTION_OPTIONS == st) { if (NULL != vp) { hbconf_change_external_marker_character(job, vp, &back); } else { job->elmchr = 0x01F310UL; hbconf_write_external_marker_character(job); } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 43: { if(HB_SECTION_OPTIONS == st) { if (NULL != vp) { if(dk3str_is_bool(vp)) { job->tabsum = dk3str_is_on(vp); } else { /* WARNING: Not a boolean value! */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } else { job->tabsum = 1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 44: { if(HB_SECTION_OPTIONS == st) { if (NULL != vp) { if (dk3str_is_bool(vp)) { job->svgwhdef = dk3str_is_on(vp); } else { /* WARNING: Not a boolean value! */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } else { job->svgwhdef = 1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 45: { if (NULL != vp) { newie = dk3str_array_index(hbconf_doctype_names, vp, 0); if (HTML_DOCTYPE_NONE <= newie) { if (HB_SECTION_OPTIONS == st) { if (HTML_DOCTYPE_UNSPECIFIED != job->htdt) { /* WARNING Overwriting doctype */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 103); } job->htdt = newie; } else { if (HB_SECTION_CONTENTS == st) { if (NULL != job->currentnode) { if (HTML_DOCTYPE_UNSPECIFIED != job->htdt) { /* WARNING Overwriting doctype */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 103); } job->currentnode->htdt = newie; } } } } else { /* ERROR: Invalid doctype */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 102); } } else { /* ERROR: Value required */ dk3app_log_i3(job->app, DK3_LL_ERROR, 133, 134, kp); } } break; case 46 : { /* privacy link */ if(HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp, job->app); if (NULL != ptr) { dk3_release(job->privacylink); job->privacylink = ptr; } else { back = -1; /* REPORTED */ } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 47 : { /* privacy page */ if(HB_SECTION_OPTIONS == st) { job->privacynode = hb_node_new( job, job->rootnode, job->lineno, job->nextobj, 0 ); #line 1460 "hbconf.ctr" job->nextobj += 1UL; if (job->privacynode) { if ((job->privacynode)->depth > job->maxdepth) { job->maxdepth = (job->privacynode)->depth; } (job->privacynode)->options |= HB_NODE_OPT_PRIVACY; if(dk3sto_add(job->s_nodes, (void *)(job->privacynode))) { (job->privacynode)->shorttitle = dk3str_dup_app((job->msg)[104], job->app); (job->privacynode)->title = dk3str_dup_app((job->msg)[105], job->app); if ((job->privacynode)->title) { dk3str_correct_filename(vp); if (!(hbtool_check_filename(job, vp))) { back = -1; } (job->privacynode)->filename = dk3str_dup_app(vp, job->app); if (!((job->privacynode)->filename)) { back = -1; #line 1478 "hbconf.ctr" } } else { #line 1480 "hbconf.ctr" back = -1; /* REPORTED */ } if (1 == back) { if(!dk3sto_add(job->s_pnodes,(void*)(job->privacynode))) { #line 1485 "hbconf.ctr" back = -1; /* REPORTED */ } } } else { #line 1489 "hbconf.ctr" hb_node_delete(job->privacynode); job->privacynode = NULL; back = -1; /* REPORTED */ } } else { #line 1494 "hbconf.ctr" back = -1; /* REPORTED */ } } else { #line 1497 "hbconf.ctr" /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 48 : { if (HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp, job->app); if (NULL != ptr) { dk3_release(job->htmllang); job->htmllang = ptr; } else { back = -1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 49: { if((job->currentnode) && (vp)) { if(!((job->currentnode)->s_jsfiles)) { (job->currentnode)->s_jsfiles = dk3sto_open_app(job->app); if((job->currentnode)->s_jsfiles) { dk3sto_set_comp( (job->currentnode)->s_jsfiles, hbnode_link_compare, 2 ); } } if(!((job->currentnode)->i_jsfiles)) { if((job->currentnode)->s_jsfiles) { (job->currentnode)->i_jsfiles = dk3sto_it_open( (job->currentnode)->s_jsfiles ); } } if((job->currentnode)->s_jsfiles) { if((job->currentnode)->i_jsfiles) { linkptr = hbnode_link_new( vp, (job->currentnode)->nextjs, job->app ); if(linkptr) { if(dk3sto_add((job->currentnode)->s_jsfiles, linkptr)) { (job->currentnode)->nextjs += 1UL; linkptr->flags |= LINK_FLAG_SCRIPT_ASYNC; } else { hbnode_link_delete(linkptr); back = -1; } } else { back = -1; } } else { back = -1; } } else { back = -1; } } if(vp) { if(!hbtool_add_url(job, vp)) { back = -1; } } } break; case 50 : { if(HB_SECTION_OPTIONS == st) { if (NULL != vp) { if (dk3str_is_bool(vp)) { if (0 != dk3str_is_on(vp)) { job->options |= HB_JOB_OPT_FOLD_PTOC; } else { job->options &= (~(HB_JOB_OPT_FOLD_PTOC)); } } else { /* WARNING: Not a boolean value! */ dk3app_log_i3(job->app, DK3_LL_ERROR, 146, 144, vp); } } else { job->options |= HB_JOB_OPT_FOLD_PTOC; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; case 51 : { /* page toc js file */ if (HB_SECTION_OPTIONS == st) { ptr = dk3str_dup_app(vp, job->app); if (NULL != ptr) { dk3_release(job->ptocjsfile); job->ptocjsfile = ptr; } else { back = -1; } } else { /* ERROR: Only allowed in options section */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); } } break; default: { dk3app_log_3(job->app, DK3_LL_ERROR, job->msg, 43, 44, kp); } break; } } else { /* Warning: Syntax error! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 9); } } else { /* Warning: Syntax error in configuration file */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 8); } } else { #line 1617 "hbconf.ctr" } } else { #line 1619 "hbconf.ctr" } #line 1621 "hbconf.ctr" return back; } /** Line handler function to process a configuration file. @param obj Pointer to a job structure. @param il Input line to process. @return 1 on success, 0 on error (continue), -1 on error (exit). */ static int hbconf_line_reader_handler(void *obj, dkChar *il) { int back; #line 1637 "hbconf.ctr" back = hbconf_process_line((hb_job_t *)obj, il, HB_SECTION_OPTIONS); #line 1639 "hbconf.ctr" return back; } /** Process one configuration file. @param job Job structure. @param fn File name to process. @return 1 on success, 0 on error (continue), -1 on error (exit). */ int hbconf_read_one_file(hb_job_t *job, dkChar const *fn) { int back = 0; #line 1654 "hbconf.ctr" back = dk3stream_process_filename_lines_app( (void *)job, hbconf_line_reader_handler, fn, job->ilfile, job->bs, dk3app_get_encoding(job->app), dk3app_get_input_file_encoding(job->app), job->app ); if(1 != back) { back = 0; /* REPORTED */ } #line 1663 "hbconf.ctr" return back; } int hbconf_read_files(hb_job_t *job) { dk3_search_t *sr = NULL; /* File search result */ dkChar const *fn; /* One config file name */ int back = 1; #line 1675 "hbconf.ctr" sr = dk3app_find_config_file(job->app, (job->kwnl)[3], 0); if(sr) { dk3search_reset(sr); while(NULL != (fn = dk3search_next(sr))) { if(back) { if(!hbconf_read_one_file(job, fn)) { back = 0; /* REPORTED */ } } } dk3search_close(sr); } #line 1687 "hbconf.ctr" return back; } dkChar const * hbconf_node_template(hb_node_t *node) { dkChar const *back = NULL; hb_node_t *nptr; /* Traverse node and parent nodes */ #line 1698 "hbconf.ctr" nptr = node; while((nptr) && (NULL == back)) { if(nptr->templatefi) { back = nptr->templatefi; } else { nptr = nptr->parent; } } #line 1706 "hbconf.ctr" return back; } dkChar const * hbconf_node_icon(hb_job_t *job, hb_node_t *node, int icno) { dkChar const *back = NULL; hb_node_t *nptr; /* Traverse node and parent nodes */ #line 1717 "hbconf.ctr" nptr = node; while((nptr) && (NULL == back)) { switch(icno) { case 0: { if(nptr->icontoc) { back = nptr->icontoc; } else { nptr = nptr->parent; } } break; case 1: { if(nptr->iconprev) { back = nptr->iconprev; } else { nptr = nptr->parent; } } break; case 2: { if(nptr->iconnext) { back = nptr->iconnext; } else { nptr = nptr->parent; } } break; case 4: { if(nptr->iconhome) { back = nptr->iconhome; } else { nptr = nptr->parent; } } break; default: { if(nptr->iconindex) { back = nptr->iconindex; } else { nptr = nptr->parent; } } break; } } if(!(back)) { back = (job->kwnl)[4 + icno]; } #line 1760 "hbconf.ctr" return back; } dkChar const * hbconf_title(hb_node_t *node) { dkChar const *back = NULL; #line 1770 "hbconf.ctr" if (NULL != node->fulltitle) { back = node->fulltitle; } else { while((NULL == back) && (node)) { if(node->title) { back = node->title; } else { node = node->parent; } } } #line 1782 "hbconf.ctr" return back; } dkChar const * hbconf_stylefile(hb_node_t *node) { dkChar const *back = NULL; #line 1792 "hbconf.ctr" while((NULL == back) && (node)) { if(node->stylefile) { back = node->stylefile; } else { node = node->parent; } } #line 1799 "hbconf.ctr" return back; } dkChar const * hbconf_author(hb_node_t *node) { dkChar const *back = NULL; #line 1809 "hbconf.ctr" while((NULL == back) && (node)) { if(node->author) { back = node->author; } else { node = node->parent; } } #line 1816 "hbconf.ctr" return back; } dkChar const * hbconf_location(hb_node_t *node) { dkChar const *back = NULL; #line 1826 "hbconf.ctr" while((NULL == back) && (node)) { if(node->location) { back = node->location; } else { node = node->parent; } } #line 1833 "hbconf.ctr" return back; } dkChar const * hbconf_favicon(hb_node_t *node) { dkChar const *back = NULL; #line 1843 "hbconf.ctr" while((NULL == back) && (node)) { if(node->favicon) { back = node->favicon; } else { node = node->parent; } } #line 1850 "hbconf.ctr" return back; }