diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/hbconf.ctr |
Initial commit
Diffstat (limited to 'support/dktools/hbconf.ctr')
-rw-r--r-- | support/dktools/hbconf.ctr | 1455 |
1 files changed, 1455 insertions, 0 deletions
diff --git a/support/dktools/hbconf.ctr b/support/dktools/hbconf.ctr new file mode 100644 index 0000000000..5cacff78f2 --- /dev/null +++ b/support/dktools/hbconf.ctr @@ -0,0 +1,1455 @@ +%% options + +copyright owner = Dirk Krause +copyright year = 2013-xxxx +license = bsd + + +%% header + +#ifdef __cplusplus +extern "C" { +#endif + +/** Read configuration files. + @param job Job structure. + @return 1 on success, 0 on error. +*/ +int +hbconf_read_files(hb_job_t *job); + +/** Read one configuration file. + @param job Job structure. + @param fn Configuration file name. + @return 1 on success, 0 on error. +*/ +int +hbconf_read_one_file(hb_job_t *job, dkChar const *fn); + +/** Process one configuration line. + @param job Job structure. + @param il Input line to process, stored also in ilfile. + @param st Section type. + @return 1 on success, 0 on error (can continue), -1 on error (exit). +*/ +int +hbconf_process_line(hb_job_t *job, dkChar *il, int st); + +/** Find template name for a node. + @param job Job structure. + @param node Node to find template for. + @return Template file name on success, NULL on error. +*/ +dkChar const * +hbconf_node_template(hb_job_t *job, hb_node_t *node); + +/** Find icon file name. + @param job Job structure. + @param node Node to find icon for. + @param icno Icon number + (0=TOC, 1=previous, 2=next, 3=index, 4=home). + @return File name pointer. +*/ +dkChar const * +hbconf_node_icon(hb_job_t *job, hb_node_t *node, int icno); + +/** Find title for current node. + This function is used by the hbhtml_write_header() function + to find the title in the HTML head section. + We use the full title if available, the title or the title + from parent objets... + @param node Node to find title for. + @return Title on success, NULL on error. +*/ +dkChar const * +hbconf_title(hb_node_t *node); + +/** Find CSS style file for current node. + @param node Node to find style file for. + @return File name on success, NULL on error. +*/ +dkChar const * +hbconf_stylefile(hb_node_t *node); + +/** Find author for current node. + @param node Node to find author for. + @return Author name on success, NULL on error. +*/ +dkChar const * +hbconf_author(hb_node_t *node); + +/** Find shortcut icon file name. + @param node Node to find file name for. + @return File name on success, NULL on error. +*/ +dkChar const * +hbconf_favicon(hb_node_t *node); + +/** Find location (city). + @param node Node to find location for. + @return Location on success, NULL on error. +*/ +dkChar const * +hbconf_location(hb_node_t *node); + +#ifdef __cplusplus +} +#endif + +%% module + +#include "dk3all.h" +#include "htmlbook.h" + + + +$!trace-include + + + +/** Names of configuration file options. +*/ +dkChar const * const hbconf_options[] = { +$!string-table macro=dkT +# +# 0 +# +author +# +# 1 +# +title +# +# 2 +# +url +# +# 3 +# +output directory +# +# 4 +# +output script +# +# 5 +# +html charset +# +# 6 +# +template +# +# 7 +# +style +# +# 8 +# +page toc +# +# 9 +# +index file +# +# 10 +# +create index +# +# 11 +# +replace ampersand +# +# 12 +# +tidy +# +# 13 +# +location +# +# 14 +# +write position +# +# 15 +# +navigation +# +# 16 +# +short +# +# 17 +# +file +# +# 18 +# +suffix +# +# 19 +# +icon toc +# +# 20 +# +icon previous +# +# 21 +# +icon next +# +# 22 +# +icon index +# +# 23 +# +create toc +# +# 24 +# +shortcut icon +# +# 25 +# +var +# +# 26 +# +impressum link +# +# 27 +# +impressum page +# +# 28 +# +chm +# +# 29 +# +ln +# +# 30 +# +input encoding +# +# 31 +# +chm language +# +# 32 +# +js file +# +# 33 +# +inherit js +# +# 34 +# +section numbers in position +# +# 35 +# +section numbers in index +# +# 36 +# +section numbers in page header +# +# 37 +# +context number +# +# 38 +# +chm full text search +# +# 39 +# +code line numbers +# +# 40 +# +icon home +$!end +}; + + + +/** Character sets for HTML output. +*/ +dkChar const * const hbconf_charsets[] = { +$!string-table macro=dkT +utf-8 +ascii +us-ascii +$!end +}; + + + +/** 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 */ + $? "+ hbconf_set_jump_node" + 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; + } + } $? "- hbconf_set_jump_node" +} + + + +/** 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; + $? "+ hbconf_process_line %!ds", TR_STR(il) + 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)->template) { + if(0UL != (job->currentnode)->objno) { + /* Overwriting template */ + dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 73); + } + } + dk3_release((job->currentnode)->template); + (job->currentnode)->template = 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: { $? ". set variable" + if(job->currentnode) { $? ". have current node" + ap = dk3str_next(vp, NULL); + if(ap) { $? ". value specified (add,change)" + kvp = dk3sto_it_find_like( + (job->currentnode)->i_variables, vp, 1 + ); + if(kvp) { $? ". existing value found, change" + nc = dk3str_dup_app(ap, job->app); + if(nc) { $? ". replace previous value" + 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 { $? "! allocation failed" + back = -1; /* REPORTED */ + } + } else { $? ". no existing value, create" + kvp = dk3kv_new_app(vp, ap, job->app); + if(kvp) { $? ". allocation ok" + if(!(dk3sto_add((job->currentnode)->s_variables, kvp))) { + dk3kv_delete(kvp); $? "! add" + back = -1; /* REPORTED */ + } + } else { $? "! allocation" + back = -1; /* REPORTED */ + } + } + } else { $? ". no value (delete)" + kvp = dk3sto_it_find_like( + (job->currentnode)->i_variables, vp, 1 + ); + if(kvp) { $? ". found, removing" + dk3sto_remove((job->currentnode)->s_variables, kvp); + dk3kv_delete(kvp); + } + } + } else { $? "! no current node" + } + } break; + case 26: { $? ". impressum link" + 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: { $? ". impressum page" + if(HB_SECTION_OPTIONS == st) { $? ". options section" + job->impressumnode = hb_node_new( + job, job->rootnode, job->lineno, job->nextobj, 0 + ); + job->nextobj += 1UL; + if(job->impressumnode) { $? ". impressumnode" + 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))) { + $? ". added" + (job->impressumnode)->title = + dk3str_dup_app((job->msg)[0], job->app); + if((job->impressumnode)->title) { $? ". title" + 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 { $? "! title" + back = -1; /* REPORTED */ + } + if(1 == back) { $? ". success so far" + if(!dk3sto_add(job->s_pnodes,(void*)(job->impressumnode))) + { $? "! adding to pnodes failed" + back = -1; /* REPORTED */ + } + } + } else { $? "! failed to add" + hb_node_delete(job->impressumnode); + job->impressumnode = NULL; + back = -1; /* REPORTED */ + } + } else { $? "! impressumnode" + back = -1; /* REPORTED */ + } + } else { $? "! wrong section" + /* ERROR: Only allowed in options section */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 10); + } + } break; + case 28: { $? ". chm" + 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: { $? ". ln" + 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: { $? ". input encoding" + 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: { $? ". chm language" + 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: { $? ". js file" + 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: { $? ". inherit js" + 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: { $? ". numbers in position" + 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: { $? ". numbers in index" + 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; + 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 { $? ". comment line, ok" + } + } else { $? ". empty line, always ok" + } + $? "- hbconf_process_line %d", back + 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; + $? "+ hbconf_line_reader_handler %!ds", TR_STR(il) + back = hbconf_process_line((hb_job_t *)obj, il, HB_SECTION_OPTIONS); + $? "- hbconf_line_reader_handler %d", back + 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; + $? "+ hbconf_read_one_file %!ds", TR_STR(fn) + 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 */ } + $? "- hbconf_read_one_file %d", back + 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; + $? "+ hbconf_read_files" + 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); + } $? "- hbconf_read_files %d", back + return back; +} + + + +dkChar const * +hbconf_node_template(hb_job_t *job, hb_node_t *node) +{ + dkChar const *back = NULL; + hb_node_t *nptr; /* Traverse node and parent nodes */ + $? "+ hbconf_node_template" + nptr = node; + while((nptr) && (NULL == back)) { + if(nptr->template) { + back = nptr->template; + } else { + nptr = nptr->parent; + } + } $? "- hbconf_node_template \"%!ds\"", TR_STR(back) + 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 */ + $? "+ hbconf_node_icon" + 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]; + } $? "- hbconf_node_icon \"%!ds\"", TR_STR(back) + return back; +} + + + +dkChar const * +hbconf_title(hb_node_t *node) +{ + dkChar const *back = NULL; + $? "+ hbconf_title" + if (NULL != node->fulltitle) { + back = node->fulltitle; + } else { + while((NULL == back) && (node)) { + if(node->title) { + back = node->title; + } else { + node = node->parent; + } + } + } + $? "- hbconf_title \"%!ds\"", TR_STR(back) + return back; +} + + + +dkChar const * +hbconf_stylefile(hb_node_t *node) +{ + dkChar const *back = NULL; + $? "+ hbconf_stylefile" + while((NULL == back) && (node)) { + if(node->stylefile) { + back = node->stylefile; + } else { + node = node->parent; + } + } $? "- hbconf_stylefile \"%!ds\"", TR_STR(back) + return back; +} + + + +dkChar const * +hbconf_author(hb_node_t *node) +{ + dkChar const *back = NULL; + $? "+ hbconf_author" + while((NULL == back) && (node)) { + if(node->author) { + back = node->author; + } else { + node = node->parent; + } + } $? "- hbconf_author \"%!ds\"", TR_STR(back) + return back; +} + + + +dkChar const * +hbconf_location(hb_node_t *node) +{ + dkChar const *back = NULL; + $? "+ hbconf_location" + while((NULL == back) && (node)) { + if(node->location) { + back = node->location; + } else { + node = node->parent; + } + } $? "- hbconf_location \"%!ds\"", TR_STR(back) + return back; +} + + + +dkChar const * +hbconf_favicon(hb_node_t *node) +{ + dkChar const *back = NULL; + $? "+ hbconf_favicon" + while((NULL == back) && (node)) { + if(node->favicon) { + back = node->favicon; + } else { + node = node->parent; + } + } $? "- hbconf_favicon \"%!ds\"", TR_STR(back) + return back; +} + + |