From 1f457376b478257b88d4a857f5ec1b6155442dd7 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 20 Sep 2020 03:03:26 +0000 Subject: CTAN sync 202009200303 --- support/dktools/hbconf.ctr | 422 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 410 insertions(+), 12 deletions(-) (limited to 'support/dktools/hbconf.ctr') diff --git a/support/dktools/hbconf.ctr b/support/dktools/hbconf.ctr index 5cacff78f2..9eda380076 100644 --- a/support/dktools/hbconf.ctr +++ b/support/dktools/hbconf.ctr @@ -2,7 +2,7 @@ copyright owner = Dirk Krause copyright year = 2013-xxxx -license = bsd +SPDX-License-Identifier: BSD-3-Clause %% header @@ -36,12 +36,11 @@ 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); +hbconf_node_template(hb_node_t *node); /** Find icon file name. @param job Job structure. @@ -92,6 +91,12 @@ hbconf_favicon(hb_node_t *node); dkChar const * hbconf_location(hb_node_t *node); +/** Write external link character to elmbuf. + @param job Job structure containing elmchr and elmbuf. +*/ +void +hbconf_write_external_marker_character(hb_job_t *job); + #ifdef __cplusplus } #endif @@ -100,7 +105,7 @@ hbconf_location(hb_node_t *node); #include "dk3all.h" #include "htmlbook.h" - +#include "dk3maihd.h" $!trace-include @@ -275,6 +280,70 @@ code line numbers # 40 # icon home +# +# 41 +# +mark external links +# +# 42 +# +external link marker symbol +# +# 43 +# +table summaries +# +# 44 +# +svg wh +# +# 45 +# +html doctype +# +# 46 +# +privacy link +# +# 47 +# +privacy page +# +# 48 +# +html lang +# +# 49 +# +async js file +# +# 50 +# +fold page toc +# +# 51 +# +page toc js file +$!end +}; + + + +/** 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[] = { +$!string-table macro=dkT +none +html-5 +html-4.01-strict +html-4.01-transitional +html-4.01-frameset +xhtml-1.0-strict +xhtml-1.0-transitional +xhtml-1.0-frameset +xhtml-1.1 $!end }; @@ -292,6 +361,23 @@ $!end +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. */ @@ -324,6 +410,45 @@ hbconf_set_jump_node(hb_node_t *nodeptr) +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. @@ -485,14 +610,14 @@ hbconf_process_line(hb_job_t *job, dkChar *il, int st) ptr = dk3str_dup_app(vp,job->app); if(ptr) { dk3str_correct_filename(ptr); - if((job->currentnode)->template) { + 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)->template); - (job->currentnode)->template = ptr; + dk3_release((job->currentnode)->templatefi); + (job->currentnode)->templatefi = ptr; } else { back = -1; /* REPORTED */ } @@ -824,7 +949,7 @@ hbconf_process_line(hb_job_t *job, dkChar *il, int st) if(job->currentnode) { $? ". have current node" ap = dk3str_next(vp, NULL); if(ap) { $? ". value specified (add,change)" - kvp = dk3sto_it_find_like( + kvp = (dk3_key_value_t *)dk3sto_it_find_like( (job->currentnode)->i_variables, vp, 1 ); if(kvp) { $? ". existing value found, change" @@ -853,7 +978,7 @@ hbconf_process_line(hb_job_t *job, dkChar *il, int st) } } } else { $? ". no value (delete)" - kvp = dk3sto_it_find_like( + kvp = (dk3_key_value_t *)dk3sto_it_find_like( (job->currentnode)->i_variables, vp, 1 ); if(kvp) { $? ". found, removing" @@ -883,6 +1008,7 @@ hbconf_process_line(hb_job_t *job, dkChar *il, int st) job->impressumnode = hb_node_new( job, job->rootnode, job->lineno, job->nextobj, 0 ); + $? ". impressum node is %lu", (unsigned long)(job->nextobj) job->nextobj += 1UL; if(job->impressumnode) { $? ". impressumnode" if((job->impressumnode)->depth > job->maxdepth) { @@ -1203,6 +1329,278 @@ hbconf_process_line(hb_job_t *job, dkChar *il, int st) } } } 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 + ); + $? ". privacy node is %lu", (unsigned long)(job->nextobj) + 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; $? "! filename" + } + } else { $? "! title" + back = -1; /* REPORTED */ + } + if (1 == back) { + if(!dk3sto_add(job->s_pnodes,(void*)(job->privacynode))) + { $? "! add" + back = -1; /* REPORTED */ + } + } + } else { $? "! add" + hb_node_delete(job->privacynode); + job->privacynode = NULL; + back = -1; /* REPORTED */ + } + } else { $? "! node allocation" + 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 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; @@ -1292,15 +1690,15 @@ hbconf_read_files(hb_job_t *job) dkChar const * -hbconf_node_template(hb_job_t *job, hb_node_t *node) +hbconf_node_template(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; + if(nptr->templatefi) { + back = nptr->templatefi; } else { nptr = nptr->parent; } -- cgit v1.2.3