texlive[73953] Build/source/texk/web2c/hitexdir: HiTeX: relaxing the

commits+mruckert at tug.org commits+mruckert at tug.org
Thu Feb 13 10:35:34 CET 2025


Revision: 73953
          https://tug.org/svn/texlive?view=revision&revision=73953
Author:   mruckert
Date:     2025-02-13 10:35:33 +0100 (Thu, 13 Feb 2025)
Log Message:
-----------
HiTeX: relaxing the bound on penalties, improving JPG info

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/hitexdir/doc/hiformat.hnt
    trunk/Build/source/texk/web2c/hitexdir/doc/hiformat.pdf
    trunk/Build/source/texk/web2c/hitexdir/hiformat.w
    trunk/Build/source/texk/web2c/hitexdir/hilexer.c
    trunk/Build/source/texk/web2c/hitexdir/hiparser.c
    trunk/Build/source/texk/web2c/hitexdir/hiparser.h
    trunk/Build/source/texk/web2c/hitexdir/hitex.w

Modified: trunk/Build/source/texk/web2c/hitexdir/doc/hiformat.hnt
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/web2c/hitexdir/doc/hiformat.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/web2c/hitexdir/hiformat.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2025-02-13 02:21:33 UTC (rev 73952)
+++ trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2025-02-13 09:35:33 UTC (rev 73953)
@@ -156,7 +156,7 @@
 First printing: August 2019\par
 Second edition: August 2021\par
 \medskip
-Last commit: Wed Oct 30 14:00:17 2024
+Last commit: Tue Feb 4 19:26:26 2025
 \par
 }
 }
@@ -5022,12 +5022,16 @@
 It is not uncommon, however, that the resolution in such a case is given
 as dots per inch. So we decide to assume the latter.
 
+If there is resolution can not be determined, we assume a resolution
+of 72dpi and negate width and height to inform the calling procedure
+of this arbitrary choice.
 
+
 @<auxiliar image functions@>=
 static bool get_PNG_info(FILE *f, char *fn, double *a, Dimen *w, Dimen *h)
 { int pos, size;
-  double wpx,hpx;
-  double xppu,yppu;
+  double wpx,hpx; /* width and height in pixel */
+  double xppu,yppu; /* pixel per unit in x and y direction */
   int unit;
   GET_IMG_BUF(24);
   if (!Match4(0, 0x89, 'P', 'N', 'G') ||
@@ -5078,71 +5082,78 @@
 For photographs, the JPEG File Interchange Format (JFIF) is more
 appropriate.  JPEG files come with all sorts of file extensions like
 {\tt .jpg}, {\tt .jpeg}, or {\tt .jfif}.  We check the file siganture:
-it starts with the the SOI (Start of Image) marker |0xFF|, |0xD8|
-followed by the JIFI-Tag. The JIFI-Tag starts with the segment marker
+it starts with the the SOI (Start of Image) marker |0xFF|, |0xD8|.
+
+Most likely it will be followed by the JIFI-Tag.
+The JIFI-Tag starts with the segment marker
 APP0 (|0xFF|, |0xE0|) followed by the 2 byte segment size, followed by
 the ASCII codes `J', `F', `I', `F' followed by a zero byte.  Next is a
 two byte version number which we do not read.  Before the resolution
 proper there is a resolution unit indicator byte (0 = no units, 1 =
 dots per inch, 2 = dots per cm) and then comes the horizontal and
-vertical resolution both as 16 Bit big-endian integers.  To find the
-actual width and height, we have to search for a start of frame marker
+vertical resolution both as 16 Bit big-endian integers.
+
+Instead of the JIFI-Tag, there might as well be a Exif-Tag
+which starts with  the segment marker
+APP1 (|0xFF|, |0xE1|) followed by the 2 byte segment size.
+Currently this tag is not decoded.
+
+To find the actual width and height,
+we have to search for a start of frame marker
 (|0xFF|, |0xC0|+$n$ with $0\le n\le 15$). Which is followed by the 2
 byte segment size, the 1 byte sample precission, the 2 byte height and
-the 2 byte width. Because here, in contrast to the PNG file format,
-the dots per inch can be specified explicitly, we will indeed treat
-the undefined unit as such.
+the 2 byte width.
 
+If the resolution was given explicitely in the JIFI-Tag,
+we use it. If there was no such tag or the uint was undefined,
+we proceed as we did for the PNG file.
 
+
 @<auxiliar image functions@>=
 static bool get_JPG_info(FILE *f, char *fn,  double *a, Dimen *w, Dimen *h)
 { int pos, size;
   double wpx,hpx;
-  double xppu,yppu;
+  double xppu=72.0,yppu=72.0;
   int unit;
   GET_IMG_BUF(18);
 
-  if (!Match4(0, 0xFF,0xD8, 0xFF, 0xE0)) return false;
-  size=BigEndian16(4);
-  if (!Match4(6,'J', 'F', 'I', 'F')) return false;
-  if (img_buf[10] != 0) return false; 
-  unit=img_buf[13];
-  xppu=(double)BigEndian16(14);
-  yppu=(double)BigEndian16(16);
-  pos=4+size;
+  if (!Match2(0, 0xFF,0xD8)) /* SOI Start of Image */
+    return false;
+  pos=2;
   while (true)
-  { if (fseek(f,pos,SEEK_SET)!=0) return false;
+  { if (fseek(f,pos,SEEK_SET)!=0)
+      return false;
     img_buf_size=0;
-    GET_IMG_BUF(10);
+    GET_IMG_BUF(16);
     if (img_buf[0] != 0xFF) return false; /* Not the start of a segment */
-    if ( (img_buf[1]&0xF0) == 0xC0) /* Start of Frame */
-    { hpx =(double)BigEndian16(5);  
-      wpx =(double)BigEndian16(7);
-      if (unit==0)
-      { *a = (wpx/xppu)/(hpx/yppu);
-        *w=-floor(0.5+ONE*72.27*wpx/xppu);
-	*h=-floor(0.5+ONE*72.27*hpx/yppu);
-        return true;
-      }
-      else if (unit==1)
-      { *w = floor(0.5+ONE*72.27*wpx/xppu);
-        *h = floor(0.5+ONE*72.27*hpx/yppu);
-        *a = (wpx/xppu)/(hpx/yppu);
-        return true;
-      }
+    if ( img_buf[1] == 0xE0 && 
+         Match4(4,'J', 'F', 'I', 'F')) /* APP0 JFIF Tag */
+    { unit=img_buf[11];
+      xppu=(double)BigEndian16(12);
+      yppu=(double)BigEndian16(14);
+      if (unit==1)  
+      ; /* allready in dpi */
       else if (unit==2)
-      { *w = floor(0.5+ONE*(72.27/2.54)*wpx/xppu);
-        *h = floor(0.5+ONE*(72.27/2.54)*hpx/yppu);
-        *a = (wpx/xppu)/(hpx/yppu);
-        return true;
+      { xppu=xppu*2.54; /* convert dot per cm to dpi */
+        yppu=yppu*2.54;
       }
       else
-        return false;
+      { yppu=72.0*yppu/xppu; /* assume 72dpi */
+        xppu=72.0;
+      }
     }
-    else
-    { size=  BigEndian16(2);
-      pos=pos+2+size;
+    else if (img_buf[1] == 0xC0 || img_buf[1] == 0xC2) /* SOF Start of Frame */
+    { hpx =(double)BigEndian16(5);  
+      wpx =(double)BigEndian16(7);
+      *w = floor(0.5+ONE*72.27*wpx/xppu);
+      *h = floor(0.5+ONE*72.27*hpx/yppu);
+      *a = (wpx/xppu)/(hpx/yppu);
+      return true;
     }
+    else if (img_buf[1] == 0xD9) /* EOI End of Image */
+      return false;
+    size=  BigEndian16(2);
+    pos=pos+2+size;
   }
   return false;
 }

Modified: trunk/Build/source/texk/web2c/hitexdir/hilexer.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2025-02-13 02:21:33 UTC (rev 73952)
+++ trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2025-02-13 09:35:33 UTC (rev 73953)
@@ -856,7 +856,7 @@
 #line 1 "lexer.l"
 #line 2 "lexer.l"
 	/*552:*/
-	#line 11587 "format.w"
+	#line 11598 "format.w"
 	
 #include "hibasetypes.h"
 #include "hierror.h"
@@ -992,7 +992,7 @@
 	}
 	/*:62*/
 int yywrap(void){
-	#line 11598 "format.w"
+	#line 11609 "format.w"
 	return 1;}
 #ifdef _MSC_VER
 #pragma  warning( disable : 4267)

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2025-02-13 02:21:33 UTC (rev 73952)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2025-02-13 09:35:33 UTC (rev 73953)
@@ -69,7 +69,7 @@
 /* First part of user prologue.  */
 #line 2 "parser.y"
 
-	#line 11628 "format.w"
+	#line 11639 "format.w"
 	
 #include "hibasetypes.h"
 #include <string.h>
@@ -81,7 +81,7 @@
 
 	/*390:*/
 uint32_t definition_bits[0x100/32][32]= {
-	#line 8757 "format.w"
+	#line 8768 "format.w"
 	{0}};
 
 #define SET_DBIT(N,K) ((N)>0xFF?1:(definition_bits[N/32][K]	|= (1<<((N)&(32-1)))))
@@ -113,7 +113,7 @@
 	/*386:*/
 void hset_max(Kind k,int n)
 {
-	#line 8598 "format.w"
+	#line 8609 "format.w"
 	DBG(DBGDEF,"Setting max %s to %d\n",definition_name[k],n);
 	RNG("Maximum",n,max_fixed[k]+1,MAX_REF(k));
 	if(n>max_ref[k])
@@ -122,7 +122,7 @@
 	/*:386*/	/*397:*/
 void check_param_def(Ref*df)
 {
-	#line 8918 "format.w"
+	#line 8929 "format.w"
 	if(df->k!=int_kind&&df->k!=dimen_kind&&df->k!=glue_kind)
 	QUIT("Kind %s not allowed in parameter list",definition_name[df->k]);
 	if(df->n<=max_fixed[df->k]||max_default[df->k]<df->n)
@@ -132,7 +132,7 @@
 extern int yylineno;
 int yyerror(const char*msg)
 {
-	#line 10097 "format.w"
+	#line 10108 "format.w"
 	QUIT(" in line %d %s",yylineno,msg);
 	return 0;
 	}
@@ -3225,7 +3225,7 @@
   case 159: /* max_value: "outline" UNSIGNED  */
 #line 771 "parser.y"
                           {
-	#line 5383 "format.w"
+	#line 5394 "format.w"
 	max_outline= (yyvsp[0].u);
 	RNG("max outline",max_outline,0,0xFFFF);
 	DBG(DBGDEF	|DBGLABEL,"Setting max outline to %d\n",max_outline);
@@ -3236,7 +3236,7 @@
   case 160: /* placement: "top"  */
 #line 778 "parser.y"
              {
-	#line 5476 "format.w"
+	#line 5487 "format.w"
 	(yyval.i)= LABEL_TOP;}
 #line 3242 "parser.c"
     break;
@@ -3244,7 +3244,7 @@
   case 161: /* placement: "bot"  */
 #line 780 "parser.y"
                             {
-	#line 5476 "format.w"
+	#line 5487 "format.w"
 	(yyval.i)= LABEL_BOT;}
 #line 3250 "parser.c"
     break;
@@ -3252,7 +3252,7 @@
   case 162: /* placement: "mid"  */
 #line 782 "parser.y"
                             {
-	#line 5476 "format.w"
+	#line 5487 "format.w"
 	(yyval.i)= LABEL_MID;}
 #line 3258 "parser.c"
     break;
@@ -3260,7 +3260,7 @@
   case 163: /* placement: %empty  */
 #line 784 "parser.y"
                          {
-	#line 5476 "format.w"
+	#line 5487 "format.w"
 	(yyval.i)= LABEL_MID;}
 #line 3266 "parser.c"
     break;
@@ -3268,7 +3268,7 @@
   case 164: /* content_node: "<" "label" REFERENCE placement ">"  */
 #line 788 "parser.y"
 {
-	#line 5478 "format.w"
+	#line 5489 "format.w"
 	hset_label((yyvsp[-2].u),(yyvsp[-1].i));}
 #line 3274 "parser.c"
     break;
@@ -3276,7 +3276,7 @@
   case 165: /* content_node: start "link" REFERENCE on_off ">"  */
 #line 793 "parser.y"
 {
-	#line 5767 "format.w"
+	#line 5778 "format.w"
 	hput_tags((yyvsp[-4].u),hput_link((yyvsp[-2].u),(yyvsp[-1].i)?1:0xFF,(yyvsp[-1].i)));}
 #line 3282 "parser.c"
     break;
@@ -3284,7 +3284,7 @@
   case 166: /* content_node: start "link" REFERENCE on_off REFERENCE ">"  */
 #line 797 "parser.y"
 {
-	#line 5769 "format.w"
+	#line 5780 "format.w"
 	hput_tags((yyvsp[-5].u),hput_link((yyvsp[-3].u),(yyvsp[-1].u),(yyvsp[-2].i)));}
 #line 3290 "parser.c"
     break;
@@ -3292,7 +3292,7 @@
   case 167: /* def_node: "<" "outline" REFERENCE integer position list ">"  */
 #line 801 "parser.y"
                                                           {
-	#line 5901 "format.w"
+	#line 5912 "format.w"
 	
 	static int outline_no= -1;
 	(yyval.rf).k= outline_kind;(yyval.rf).n= (yyvsp[-4].u);
@@ -3306,7 +3306,7 @@
   case 168: /* color: "<" UNSIGNED UNSIGNED UNSIGNED UNSIGNED ">"  */
 #line 812 "parser.y"
 {
-	#line 6191 "format.w"
+	#line 6202 "format.w"
 	RNG("red",(yyvsp[-4].u),0,0xFF);RNG("green",(yyvsp[-3].u),0,0xFF);
 	RNG("blue",(yyvsp[-2].u),0,0xFF);RNG("alpha",(yyvsp[-1].u),0,0xFF);
 	colors_n[colors_i++]= ((yyvsp[-4].u)<<24)	|((yyvsp[-3].u)<<16)	|((yyvsp[-2].u)<<8)	|(yyvsp[-1].u);
@@ -3317,7 +3317,7 @@
   case 169: /* color: "<" UNSIGNED UNSIGNED UNSIGNED ">"  */
 #line 819 "parser.y"
 {
-	#line 6196 "format.w"
+	#line 6207 "format.w"
 	RNG("red",(yyvsp[-3].u),0,0xFF);RNG("green",(yyvsp[-2].u),0,0xFF);
 	RNG("blue",(yyvsp[-1].u),0,0xFF);
 	colors_n[colors_i++]= ((yyvsp[-3].u)<<24)	|((yyvsp[-2].u)<<16)	|((yyvsp[-1].u)<<8)	|0xFF;
@@ -3328,7 +3328,7 @@
   case 170: /* color: UNSIGNED  */
 #line 825 "parser.y"
               {
-	#line 6200 "format.w"
+	#line 6211 "format.w"
 	colors_n[colors_i++]= (yyvsp[0].u);}
 #line 3334 "parser.c"
     break;
@@ -3336,7 +3336,7 @@
   case 172: /* color_pair: "<" color ">"  */
 #line 830 "parser.y"
                         {
-	#line 6210 "format.w"
+	#line 6221 "format.w"
 	colors_n[colors_i++]= 0;}
 #line 3342 "parser.c"
     break;
@@ -3344,7 +3344,7 @@
   case 173: /* color_unset: %empty  */
 #line 833 "parser.y"
             {
-	#line 6211 "format.w"
+	#line 6222 "format.w"
 	colors_i+= 2;}
 #line 3350 "parser.c"
     break;
@@ -3352,7 +3352,7 @@
   case 179: /* $@8: %empty  */
 #line 845 "parser.y"
                         {
-	#line 6241 "format.w"
+	#line 6252 "format.w"
 	HPUT8(6);color_init();}
 #line 3358 "parser.c"
     break;
@@ -3360,7 +3360,7 @@
   case 180: /* def_node: start "color" ref $@8 color_set ">"  */
 #line 848 "parser.y"
 {
-	#line 6242 "format.w"
+	#line 6253 "format.w"
 	DEF((yyval.rf),color_kind,(yyvsp[-3].u));hput_color_def((yyvsp[-5].u),(yyvsp[-3].u));}
 #line 3366 "parser.c"
     break;
@@ -3368,7 +3368,7 @@
   case 181: /* content_node: start "color" ref ">"  */
 #line 853 "parser.y"
 {
-	#line 6296 "format.w"
+	#line 6307 "format.w"
 	REF_RNG(color_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(color_kind,b000));}
 #line 3374 "parser.c"
     break;
@@ -3376,7 +3376,7 @@
   case 182: /* content_node: start "color" "off" ">"  */
 #line 857 "parser.y"
 {
-	#line 6298 "format.w"
+	#line 6309 "format.w"
 	HPUT8(0xFF);hput_tags((yyvsp[-3].u),TAG(color_kind,b000));}
 #line 3382 "parser.c"
     break;
@@ -3384,7 +3384,7 @@
   case 183: /* def_node: start "unknown" UNSIGNED UNSIGNED ">"  */
 #line 861 "parser.y"
                                             {
-	#line 6426 "format.w"
+	#line 6437 "format.w"
 	hput_tags((yyvsp[-4].u),hput_unknown_def((yyvsp[-2].u),(yyvsp[-1].u),0));}
 #line 3390 "parser.c"
     break;
@@ -3392,7 +3392,7 @@
   case 184: /* def_node: start "unknown" UNSIGNED UNSIGNED UNSIGNED ">"  */
 #line 864 "parser.y"
                                                      {
-	#line 6427 "format.w"
+	#line 6438 "format.w"
 	hput_tags((yyvsp[-5].u),hput_unknown_def((yyvsp[-3].u),(yyvsp[-2].u),(yyvsp[-1].u)));}
 #line 3398 "parser.c"
     break;
@@ -3400,7 +3400,7 @@
   case 185: /* content_node: start "unknown" UNSIGNED unknown_bytes unknown_nodes ">"  */
 #line 868 "parser.y"
                                                                    {
-	#line 6439 "format.w"
+	#line 6450 "format.w"
 	hput_tags((yyvsp[-5].u),hput_unknown((yyvsp[-5].u),(yyvsp[-3].u),(yyvsp[-2].u),(yyvsp[-1].u)));}
 #line 3406 "parser.c"
     break;
@@ -3408,7 +3408,7 @@
   case 186: /* unknown_bytes: %empty  */
 #line 871 "parser.y"
               {
-	#line 6440 "format.w"
+	#line 6451 "format.w"
 	(yyval.u)= 0;}
 #line 3414 "parser.c"
     break;
@@ -3416,7 +3416,7 @@
   case 187: /* unknown_bytes: unknown_bytes UNSIGNED  */
 #line 873 "parser.y"
                                        {
-	#line 6440 "format.w"
+	#line 6451 "format.w"
 	RNG("byte",(yyvsp[0].u),0,0xFF);HPUT8((yyvsp[0].u));(yyval.u)= (yyvsp[-1].u)+1;}
 #line 3422 "parser.c"
     break;
@@ -3424,7 +3424,7 @@
   case 192: /* unknown_nodes: %empty  */
 #line 877 "parser.y"
               {
-	#line 6442 "format.w"
+	#line 6453 "format.w"
 	(yyval.u)= 0;}
 #line 3430 "parser.c"
     break;
@@ -3432,7 +3432,7 @@
   case 193: /* unknown_nodes: unknown_nodes unknown_node  */
 #line 879 "parser.y"
                                            {
-	#line 6442 "format.w"
+	#line 6453 "format.w"
 	RNG("unknown subnodes",(yyvsp[-1].u),0,3);(yyval.u)= (yyvsp[-1].u)+1;}
 #line 3438 "parser.c"
     break;
@@ -3440,7 +3440,7 @@
   case 194: /* stream_link: ref  */
 #line 883 "parser.y"
                {
-	#line 6877 "format.w"
+	#line 6888 "format.w"
 	REF_RNG(stream_kind,(yyvsp[0].u));}
 #line 3446 "parser.c"
     break;
@@ -3448,7 +3448,7 @@
   case 195: /* stream_link: "*"  */
 #line 885 "parser.y"
                                                     {
-	#line 6877 "format.w"
+	#line 6888 "format.w"
 	HPUT8(255);}
 #line 3454 "parser.c"
     break;
@@ -3456,7 +3456,7 @@
   case 196: /* stream_split: stream_link stream_link UNSIGNED  */
 #line 888 "parser.y"
                                              {
-	#line 6878 "format.w"
+	#line 6889 "format.w"
 	RNG("split ratio",(yyvsp[0].u),0,1000);HPUT16((yyvsp[0].u));}
 #line 3462 "parser.c"
     break;
@@ -3464,7 +3464,7 @@
   case 197: /* $@9: %empty  */
 #line 891 "parser.y"
                                 {
-	#line 6879 "format.w"
+	#line 6890 "format.w"
 	RNG("magnification factor",(yyvsp[0].u),0,1000);HPUT16((yyvsp[0].u));}
 #line 3470 "parser.c"
     break;
@@ -3472,7 +3472,7 @@
   case 199: /* stream_type: stream_info  */
 #line 895 "parser.y"
                        {
-	#line 6881 "format.w"
+	#line 6892 "format.w"
 	(yyval.info)= 0;}
 #line 3478 "parser.c"
     break;
@@ -3480,7 +3480,7 @@
   case 200: /* stream_type: "first"  */
 #line 897 "parser.y"
                       {
-	#line 6881 "format.w"
+	#line 6892 "format.w"
 	(yyval.info)= 1;}
 #line 3486 "parser.c"
     break;
@@ -3488,7 +3488,7 @@
   case 201: /* stream_type: "last"  */
 #line 899 "parser.y"
                      {
-	#line 6881 "format.w"
+	#line 6892 "format.w"
 	(yyval.info)= 2;}
 #line 3494 "parser.c"
     break;
@@ -3496,7 +3496,7 @@
   case 202: /* stream_type: "top"  */
 #line 901 "parser.y"
                     {
-	#line 6881 "format.w"
+	#line 6892 "format.w"
 	(yyval.info)= 3;}
 #line 3502 "parser.c"
     break;
@@ -3504,7 +3504,7 @@
   case 203: /* stream_def_node: start "stream (definition)" ref stream_type list xdimen_node glue_node list glue_node ">"  */
 #line 907 "parser.y"
 {
-	#line 6885 "format.w"
+	#line 6896 "format.w"
 	DEF((yyval.rf),stream_kind,(yyvsp[-7].u));hput_tags((yyvsp[-9].u),TAG(stream_kind,(yyvsp[-6].info)	|b100));}
 #line 3510 "parser.c"
     break;
@@ -3512,7 +3512,7 @@
   case 204: /* stream_ins_node: start "stream (definition)" ref ">"  */
 #line 912 "parser.y"
 {
-	#line 6888 "format.w"
+	#line 6899 "format.w"
 	RNG("Stream insertion",(yyvsp[-1].u),0,max_ref[stream_kind]);hput_tags((yyvsp[-3].u),TAG(stream_kind,b100));}
 #line 3518 "parser.c"
     break;
@@ -3520,7 +3520,7 @@
   case 207: /* stream: param_list list  */
 #line 918 "parser.y"
                       {
-	#line 6983 "format.w"
+	#line 6994 "format.w"
 	(yyval.info)= b010;}
 #line 3526 "parser.c"
     break;
@@ -3528,7 +3528,7 @@
   case 208: /* stream: param_ref list  */
 #line 921 "parser.y"
                        {
-	#line 6984 "format.w"
+	#line 6995 "format.w"
 	(yyval.info)= b000;}
 #line 3534 "parser.c"
     break;
@@ -3536,7 +3536,7 @@
   case 209: /* content_node: start "stream" stream_ref stream ">"  */
 #line 925 "parser.y"
 {
-	#line 6986 "format.w"
+	#line 6997 "format.w"
 	hput_tags((yyvsp[-4].u),TAG(stream_kind,(yyvsp[-1].info)));}
 #line 3542 "parser.c"
     break;
@@ -3544,7 +3544,7 @@
   case 210: /* page_priority: %empty  */
 #line 929 "parser.y"
               {
-	#line 7089 "format.w"
+	#line 7100 "format.w"
 	HPUT8(1);}
 #line 3550 "parser.c"
     break;
@@ -3552,7 +3552,7 @@
   case 211: /* page_priority: UNSIGNED  */
 #line 932 "parser.y"
                  {
-	#line 7090 "format.w"
+	#line 7101 "format.w"
 	RNG("page priority",(yyvsp[0].u),0,255);HPUT8((yyvsp[0].u));}
 #line 3558 "parser.c"
     break;
@@ -3560,7 +3560,7 @@
   case 214: /* $@10: %empty  */
 #line 938 "parser.y"
            {
-	#line 7094 "format.w"
+	#line 7105 "format.w"
 	hput_string((yyvsp[0].s));}
 #line 3566 "parser.c"
     break;
@@ -3568,7 +3568,7 @@
   case 215: /* $@11: %empty  */
 #line 940 "parser.y"
                                                           {
-	#line 7094 "format.w"
+	#line 7105 "format.w"
 	HPUT32((yyvsp[0].d));}
 #line 3574 "parser.c"
     break;
@@ -3576,7 +3576,7 @@
   case 217: /* content_node: "<" "range" REFERENCE "on" ">"  */
 #line 947 "parser.y"
                                          {
-	#line 7207 "format.w"
+	#line 7218 "format.w"
 	REF(page_kind,(yyvsp[-2].u));hput_range((yyvsp[-2].u),true);}
 #line 3582 "parser.c"
     break;
@@ -3584,7 +3584,7 @@
   case 218: /* content_node: "<" "range" REFERENCE "off" ">"  */
 #line 950 "parser.y"
                                       {
-	#line 7208 "format.w"
+	#line 7219 "format.w"
 	REF(page_kind,(yyvsp[-2].u));hput_range((yyvsp[-2].u),false);}
 #line 3590 "parser.c"
     break;
@@ -3592,7 +3592,7 @@
   case 220: /* $@12: %empty  */
 #line 956 "parser.y"
                                           {
-	#line 7906 "format.w"
+	#line 7917 "format.w"
 	new_directory((yyvsp[0].u)+1);new_output_buffers();}
 #line 3598 "parser.c"
     break;
@@ -3600,7 +3600,7 @@
   case 224: /* entry: "<" "entry" UNSIGNED string ">"  */
 #line 961 "parser.y"
 {
-	#line 7909 "format.w"
+	#line 7920 "format.w"
 	RNG("Section number",(yyvsp[-2].u),3,max_section_no);hset_entry(&(dir[(yyvsp[-2].u)]),(yyvsp[-2].u),0,0,(yyvsp[-1].s));}
 #line 3606 "parser.c"
     break;
@@ -3608,7 +3608,7 @@
   case 225: /* $@13: %empty  */
 #line 965 "parser.y"
                                     {
-	#line 8453 "format.w"
+	#line 8464 "format.w"
 	hput_definitions_start();}
 #line 3614 "parser.c"
     break;
@@ -3616,7 +3616,7 @@
   case 226: /* definition_section: "<" "definitions" $@13 max_definitions definition_list ">"  */
 #line 969 "parser.y"
    {
-	#line 8455 "format.w"
+	#line 8466 "format.w"
 	hput_definitions_end();}
 #line 3622 "parser.c"
     break;
@@ -3624,7 +3624,7 @@
   case 229: /* max_definitions: "<" "max" max_list ">"  */
 #line 975 "parser.y"
 {
-	#line 8571 "format.w"
+	#line 8582 "format.w"
 		/*253:*/
 	if(max_ref[label_kind]>=0)
 	ALLOCATE(labels,max_ref[label_kind]+1,Label);
@@ -3660,7 +3660,7 @@
   case 232: /* max_value: "font" UNSIGNED  */
 #line 1009 "parser.y"
                        {
-	#line 8575 "format.w"
+	#line 8586 "format.w"
 	hset_max(font_kind,(yyvsp[0].u));}
 #line 3666 "parser.c"
     break;
@@ -3668,7 +3668,7 @@
   case 233: /* max_value: "int" UNSIGNED  */
 #line 1012 "parser.y"
                          {
-	#line 8576 "format.w"
+	#line 8587 "format.w"
 	hset_max(int_kind,(yyvsp[0].u));}
 #line 3674 "parser.c"
     break;
@@ -3676,7 +3676,7 @@
   case 234: /* max_value: "dimen" UNSIGNED  */
 #line 1015 "parser.y"
                        {
-	#line 8577 "format.w"
+	#line 8588 "format.w"
 	hset_max(dimen_kind,(yyvsp[0].u));}
 #line 3682 "parser.c"
     break;
@@ -3684,7 +3684,7 @@
   case 235: /* max_value: "ligature" UNSIGNED  */
 #line 1018 "parser.y"
                           {
-	#line 8578 "format.w"
+	#line 8589 "format.w"
 	hset_max(ligature_kind,(yyvsp[0].u));}
 #line 3690 "parser.c"
     break;
@@ -3692,7 +3692,7 @@
   case 236: /* max_value: "disc" UNSIGNED  */
 #line 1021 "parser.y"
                       {
-	#line 8579 "format.w"
+	#line 8590 "format.w"
 	hset_max(disc_kind,(yyvsp[0].u));}
 #line 3698 "parser.c"
     break;
@@ -3700,7 +3700,7 @@
   case 237: /* max_value: "glue" UNSIGNED  */
 #line 1024 "parser.y"
                       {
-	#line 8580 "format.w"
+	#line 8591 "format.w"
 	hset_max(glue_kind,(yyvsp[0].u));}
 #line 3706 "parser.c"
     break;
@@ -3708,7 +3708,7 @@
   case 238: /* max_value: "language" UNSIGNED  */
 #line 1027 "parser.y"
                           {
-	#line 8581 "format.w"
+	#line 8592 "format.w"
 	hset_max(language_kind,(yyvsp[0].u));}
 #line 3714 "parser.c"
     break;
@@ -3716,7 +3716,7 @@
   case 239: /* max_value: "rule" UNSIGNED  */
 #line 1030 "parser.y"
                       {
-	#line 8582 "format.w"
+	#line 8593 "format.w"
 	hset_max(rule_kind,(yyvsp[0].u));}
 #line 3722 "parser.c"
     break;
@@ -3724,7 +3724,7 @@
   case 240: /* max_value: "image" UNSIGNED  */
 #line 1033 "parser.y"
                        {
-	#line 8583 "format.w"
+	#line 8594 "format.w"
 	hset_max(image_kind,(yyvsp[0].u));}
 #line 3730 "parser.c"
     break;
@@ -3732,7 +3732,7 @@
   case 241: /* max_value: "leaders" UNSIGNED  */
 #line 1036 "parser.y"
                          {
-	#line 8584 "format.w"
+	#line 8595 "format.w"
 	hset_max(leaders_kind,(yyvsp[0].u));}
 #line 3738 "parser.c"
     break;
@@ -3740,7 +3740,7 @@
   case 242: /* max_value: "baseline" UNSIGNED  */
 #line 1039 "parser.y"
                           {
-	#line 8585 "format.w"
+	#line 8596 "format.w"
 	hset_max(baseline_kind,(yyvsp[0].u));}
 #line 3746 "parser.c"
     break;
@@ -3748,7 +3748,7 @@
   case 243: /* max_value: "xdimen" UNSIGNED  */
 #line 1042 "parser.y"
                         {
-	#line 8586 "format.w"
+	#line 8597 "format.w"
 	hset_max(xdimen_kind,(yyvsp[0].u));}
 #line 3754 "parser.c"
     break;
@@ -3756,7 +3756,7 @@
   case 244: /* max_value: "param" UNSIGNED  */
 #line 1045 "parser.y"
                        {
-	#line 8587 "format.w"
+	#line 8598 "format.w"
 	hset_max(param_kind,(yyvsp[0].u));}
 #line 3762 "parser.c"
     break;
@@ -3764,7 +3764,7 @@
   case 245: /* max_value: "stream (definition)" UNSIGNED  */
 #line 1048 "parser.y"
                            {
-	#line 8588 "format.w"
+	#line 8599 "format.w"
 	hset_max(stream_kind,(yyvsp[0].u));}
 #line 3770 "parser.c"
     break;
@@ -3772,7 +3772,7 @@
   case 246: /* max_value: "page" UNSIGNED  */
 #line 1051 "parser.y"
                       {
-	#line 8589 "format.w"
+	#line 8600 "format.w"
 	hset_max(page_kind,(yyvsp[0].u));}
 #line 3778 "parser.c"
     break;
@@ -3780,7 +3780,7 @@
   case 247: /* max_value: "range" UNSIGNED  */
 #line 1054 "parser.y"
                        {
-	#line 8590 "format.w"
+	#line 8601 "format.w"
 	hset_max(range_kind,(yyvsp[0].u));}
 #line 3786 "parser.c"
     break;
@@ -3788,7 +3788,7 @@
   case 248: /* max_value: "label" UNSIGNED  */
 #line 1057 "parser.y"
                        {
-	#line 8591 "format.w"
+	#line 8602 "format.w"
 	hset_max(label_kind,(yyvsp[0].u));}
 #line 3794 "parser.c"
     break;
@@ -3796,7 +3796,7 @@
   case 249: /* max_value: "color" UNSIGNED  */
 #line 1060 "parser.y"
                        {
-	#line 8592 "format.w"
+	#line 8603 "format.w"
 	hset_max(color_kind,(yyvsp[0].u));}
 #line 3802 "parser.c"
     break;
@@ -3804,7 +3804,7 @@
   case 250: /* def_node: start "font" ref font ">"  */
 #line 1066 "parser.y"
                        {
-	#line 8794 "format.w"
+	#line 8805 "format.w"
 	DEF((yyval.rf),font_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),(yyvsp[-1].info));}
 #line 3810 "parser.c"
     break;
@@ -3812,7 +3812,7 @@
   case 251: /* def_node: start "int" ref integer ">"  */
 #line 1069 "parser.y"
                                       {
-	#line 8795 "format.w"
+	#line 8806 "format.w"
 	DEF((yyval.rf),int_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
 #line 3818 "parser.c"
     break;
@@ -3820,7 +3820,7 @@
   case 252: /* def_node: start "dimen" ref dimension ">"  */
 #line 1072 "parser.y"
                                       {
-	#line 8796 "format.w"
+	#line 8807 "format.w"
 	DEF((yyval.rf),dimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_dimen((yyvsp[-1].d)));}
 #line 3826 "parser.c"
     break;
@@ -3828,7 +3828,7 @@
   case 253: /* def_node: start "language" ref string ">"  */
 #line 1075 "parser.y"
                                       {
-	#line 8797 "format.w"
+	#line 8808 "format.w"
 	DEF((yyval.rf),language_kind,(yyvsp[-2].u));hput_string((yyvsp[-1].s));hput_tags((yyvsp[-4].u),TAG(language_kind,0));}
 #line 3834 "parser.c"
     break;
@@ -3836,7 +3836,7 @@
   case 254: /* def_node: start "glue" ref glue ">"  */
 #line 1078 "parser.y"
                                 {
-	#line 8798 "format.w"
+	#line 8809 "format.w"
 	DEF((yyval.rf),glue_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
 #line 3842 "parser.c"
     break;
@@ -3844,7 +3844,7 @@
   case 255: /* def_node: start "xdimen" ref xdimen ">"  */
 #line 1081 "parser.y"
                                     {
-	#line 8799 "format.w"
+	#line 8810 "format.w"
 	DEF((yyval.rf),xdimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_xdimen(&((yyvsp[-1].xd))));}
 #line 3850 "parser.c"
     break;
@@ -3852,7 +3852,7 @@
   case 256: /* def_node: start "rule" ref rule ">"  */
 #line 1084 "parser.y"
                                 {
-	#line 8800 "format.w"
+	#line 8811 "format.w"
 	DEF((yyval.rf),rule_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
 #line 3858 "parser.c"
     break;
@@ -3860,7 +3860,7 @@
   case 257: /* def_node: start "leaders" ref leaders ">"  */
 #line 1087 "parser.y"
                                       {
-	#line 8801 "format.w"
+	#line 8812 "format.w"
 	DEF((yyval.rf),leaders_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(leaders_kind,(yyvsp[-1].info)));}
 #line 3866 "parser.c"
     break;
@@ -3868,7 +3868,7 @@
   case 258: /* def_node: start "baseline" ref baseline ">"  */
 #line 1090 "parser.y"
                                         {
-	#line 8802 "format.w"
+	#line 8813 "format.w"
 	DEF((yyval.rf),baseline_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(baseline_kind,(yyvsp[-1].info)));}
 #line 3874 "parser.c"
     break;
@@ -3876,7 +3876,7 @@
   case 259: /* def_node: start "ligature" ref ligature ">"  */
 #line 1093 "parser.y"
                                         {
-	#line 8803 "format.w"
+	#line 8814 "format.w"
 	DEF((yyval.rf),ligature_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
 #line 3882 "parser.c"
     break;
@@ -3884,7 +3884,7 @@
   case 260: /* def_node: start "disc" ref disc ">"  */
 #line 1096 "parser.y"
                                 {
-	#line 8804 "format.w"
+	#line 8815 "format.w"
 	DEF((yyval.rf),disc_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
 #line 3890 "parser.c"
     break;
@@ -3892,7 +3892,7 @@
   case 261: /* def_node: start "image" ref image ">"  */
 #line 1099 "parser.y"
                                   {
-	#line 8805 "format.w"
+	#line 8816 "format.w"
 	DEF((yyval.rf),image_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(image_kind,(yyvsp[-1].info)));}
 #line 3898 "parser.c"
     break;
@@ -3900,7 +3900,7 @@
   case 262: /* def_node: start "param" ref parameters ">"  */
 #line 1102 "parser.y"
                                        {
-	#line 8806 "format.w"
+	#line 8817 "format.w"
 	DEF((yyval.rf),param_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_list((yyvsp[-4].u)+2,&((yyvsp[-1].l))));}
 #line 3906 "parser.c"
     break;
@@ -3908,7 +3908,7 @@
   case 263: /* def_node: start "page" ref page ">"  */
 #line 1105 "parser.y"
                                 {
-	#line 8807 "format.w"
+	#line 8818 "format.w"
 	DEF((yyval.rf),page_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(page_kind,0));}
 #line 3914 "parser.c"
     break;
@@ -3916,7 +3916,7 @@
   case 264: /* def_node: start "int" ref ref ">"  */
 #line 1110 "parser.y"
                          {
-	#line 8826 "format.w"
+	#line 8837 "format.w"
 	DEF_REF((yyval.rf),int_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(int_kind,0));}
 #line 3922 "parser.c"
     break;
@@ -3924,7 +3924,7 @@
   case 265: /* def_node: start "dimen" ref ref ">"  */
 #line 1113 "parser.y"
                                 {
-	#line 8827 "format.w"
+	#line 8838 "format.w"
 	DEF_REF((yyval.rf),dimen_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(dimen_kind,0));}
 #line 3930 "parser.c"
     break;
@@ -3932,7 +3932,7 @@
   case 266: /* def_node: start "glue" ref ref ">"  */
 #line 1116 "parser.y"
                                {
-	#line 8828 "format.w"
+	#line 8839 "format.w"
 	DEF_REF((yyval.rf),glue_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(glue_kind,0));}
 #line 3938 "parser.c"
     break;
@@ -3940,7 +3940,7 @@
   case 268: /* def_list: def_list def_node  */
 #line 1121 "parser.y"
                           {
-	#line 8951 "format.w"
+	#line 8962 "format.w"
 	check_param_def(&((yyvsp[0].rf)));}
 #line 3946 "parser.c"
     break;
@@ -3948,7 +3948,7 @@
   case 269: /* parameters: estimate def_list  */
 #line 1124 "parser.y"
                             {
-	#line 8952 "format.w"
+	#line 8963 "format.w"
 	(yyval.l).p= (yyvsp[0].u);(yyval.l).t= TAG(param_kind,b001);(yyval.l).s= (hpos-hstart)-(yyvsp[0].u);}
 #line 3954 "parser.c"
     break;
@@ -3956,7 +3956,7 @@
   case 270: /* named_param_list: start "param" parameters ">"  */
 #line 1129 "parser.y"
 {
-	#line 8965 "format.w"
+	#line 8976 "format.w"
 	hput_tags((yyvsp[-3].u),hput_list((yyvsp[-3].u)+1,&((yyvsp[-1].l))));}
 #line 3962 "parser.c"
     break;
@@ -3964,7 +3964,7 @@
   case 272: /* param_list: start parameters ">"  */
 #line 1133 "parser.y"
 {
-	#line 8967 "format.w"
+	#line 8978 "format.w"
 	hput_tags((yyvsp[-2].u),hput_list((yyvsp[-2].u)+1,&((yyvsp[-1].l))));}
 #line 3970 "parser.c"
     break;
@@ -3972,7 +3972,7 @@
   case 274: /* font_head: string dimension UNSIGNED UNSIGNED  */
 #line 1141 "parser.y"
 {
-	#line 9113 "format.w"
+	#line 9124 "format.w"
 	uint8_t f= (yyvsp[-4].u);SET_DBIT(f,font_kind);hfont_name[f]= strdup((yyvsp[-3].s));(yyval.info)= hput_font_head(f,hfont_name[f],(yyvsp[-2].d),(yyvsp[-1].u),(yyvsp[0].u));}
 #line 3978 "parser.c"
     break;
@@ -3980,7 +3980,7 @@
   case 277: /* font_param: start "penalty" fref penalty ">"  */
 #line 1148 "parser.y"
                               {
-	#line 9118 "format.w"
+	#line 9129 "format.w"
 	hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
 #line 3986 "parser.c"
     break;
@@ -3988,7 +3988,7 @@
   case 278: /* font_param: start "kern" fref kern ">"  */
 #line 1151 "parser.y"
                                  {
-	#line 9119 "format.w"
+	#line 9130 "format.w"
 	hput_tags((yyvsp[-4].u),hput_kern(&((yyvsp[-1].kt))));}
 #line 3994 "parser.c"
     break;
@@ -3996,7 +3996,7 @@
   case 279: /* font_param: start "ligature" fref ligature ">"  */
 #line 1154 "parser.y"
                                          {
-	#line 9120 "format.w"
+	#line 9131 "format.w"
 	hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
 #line 4002 "parser.c"
     break;
@@ -4004,7 +4004,7 @@
   case 280: /* font_param: start "disc" fref disc ">"  */
 #line 1157 "parser.y"
                                  {
-	#line 9121 "format.w"
+	#line 9132 "format.w"
 	hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
 #line 4010 "parser.c"
     break;
@@ -4012,7 +4012,7 @@
   case 281: /* font_param: start "glue" fref glue ">"  */
 #line 1160 "parser.y"
                                  {
-	#line 9122 "format.w"
+	#line 9133 "format.w"
 	hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
 #line 4018 "parser.c"
     break;
@@ -4020,7 +4020,7 @@
   case 282: /* font_param: start "language" fref string ">"  */
 #line 1163 "parser.y"
                                        {
-	#line 9123 "format.w"
+	#line 9134 "format.w"
 	hput_string((yyvsp[-1].s));hput_tags((yyvsp[-4].u),TAG(language_kind,0));}
 #line 4026 "parser.c"
     break;
@@ -4028,7 +4028,7 @@
   case 283: /* font_param: start "rule" fref rule ">"  */
 #line 1166 "parser.y"
                                  {
-	#line 9124 "format.w"
+	#line 9135 "format.w"
 	hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
 #line 4034 "parser.c"
     break;
@@ -4036,7 +4036,7 @@
   case 284: /* font_param: start "image" fref image ">"  */
 #line 1169 "parser.y"
                                    {
-	#line 9125 "format.w"
+	#line 9136 "format.w"
 	hput_tags((yyvsp[-4].u),TAG(image_kind,(yyvsp[-1].info)));}
 #line 4042 "parser.c"
     break;
@@ -4044,7 +4044,7 @@
   case 285: /* fref: ref  */
 #line 1173 "parser.y"
         {
-	#line 9127 "format.w"
+	#line 9138 "format.w"
 	RNG("Font parameter",(yyvsp[0].u),0,MAX_FONT_PARAMS);}
 #line 4050 "parser.c"
     break;
@@ -4052,7 +4052,7 @@
   case 286: /* xdimen_ref: ref  */
 #line 1177 "parser.y"
               {
-	#line 9204 "format.w"
+	#line 9215 "format.w"
 	REF(xdimen_kind,(yyvsp[0].u));}
 #line 4058 "parser.c"
     break;
@@ -4060,7 +4060,7 @@
   case 287: /* param_ref: ref  */
 #line 1180 "parser.y"
              {
-	#line 9205 "format.w"
+	#line 9216 "format.w"
 	REF(param_kind,(yyvsp[0].u));}
 #line 4066 "parser.c"
     break;
@@ -4068,7 +4068,7 @@
   case 288: /* stream_ref: ref  */
 #line 1183 "parser.y"
               {
-	#line 9206 "format.w"
+	#line 9217 "format.w"
 	REF_RNG(stream_kind,(yyvsp[0].u));}
 #line 4074 "parser.c"
     break;
@@ -4076,7 +4076,7 @@
   case 289: /* content_node: start "penalty" ref ">"  */
 #line 1189 "parser.y"
                      {
-	#line 9210 "format.w"
+	#line 9221 "format.w"
 	REF(penalty_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(penalty_kind,0));}
 #line 4082 "parser.c"
     break;
@@ -4084,7 +4084,7 @@
   case 290: /* content_node: start "kern" explicit ref ">"  */
 #line 1193 "parser.y"
 {
-	#line 9212 "format.w"
+	#line 9223 "format.w"
 	REF(dimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(kern_kind,((yyvsp[-2].b))?b100:b000));}
 #line 4090 "parser.c"
     break;
@@ -4092,7 +4092,7 @@
   case 291: /* content_node: start "kern" explicit "xdimen" ref ">"  */
 #line 1197 "parser.y"
 {
-	#line 9214 "format.w"
+	#line 9225 "format.w"
 	REF(xdimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-5].u),TAG(kern_kind,((yyvsp[-3].b))?b101:b001));}
 #line 4098 "parser.c"
     break;
@@ -4100,7 +4100,7 @@
   case 292: /* content_node: start "glue" ref ">"  */
 #line 1200 "parser.y"
                            {
-	#line 9215 "format.w"
+	#line 9226 "format.w"
 	REF(glue_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(glue_kind,0));}
 #line 4106 "parser.c"
     break;
@@ -4108,7 +4108,7 @@
   case 293: /* content_node: start "ligature" ref ">"  */
 #line 1203 "parser.y"
                                {
-	#line 9216 "format.w"
+	#line 9227 "format.w"
 	REF(ligature_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(ligature_kind,0));}
 #line 4114 "parser.c"
     break;
@@ -4116,7 +4116,7 @@
   case 294: /* content_node: start "disc" ref ">"  */
 #line 1206 "parser.y"
                            {
-	#line 9217 "format.w"
+	#line 9228 "format.w"
 	REF(disc_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(disc_kind,0));}
 #line 4122 "parser.c"
     break;
@@ -4124,7 +4124,7 @@
   case 295: /* content_node: start "rule" ref ">"  */
 #line 1209 "parser.y"
                            {
-	#line 9218 "format.w"
+	#line 9229 "format.w"
 	REF(rule_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(rule_kind,0));}
 #line 4130 "parser.c"
     break;
@@ -4132,7 +4132,7 @@
   case 296: /* content_node: start "image" ref ">"  */
 #line 1212 "parser.y"
                             {
-	#line 9219 "format.w"
+	#line 9230 "format.w"
 	REF(image_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(image_kind,0));}
 #line 4138 "parser.c"
     break;
@@ -4140,7 +4140,7 @@
   case 297: /* content_node: start "leaders" ref ">"  */
 #line 1215 "parser.y"
                               {
-	#line 9220 "format.w"
+	#line 9231 "format.w"
 	REF(leaders_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(leaders_kind,0));}
 #line 4146 "parser.c"
     break;
@@ -4148,7 +4148,7 @@
   case 298: /* content_node: start "baseline" ref ">"  */
 #line 1218 "parser.y"
                                {
-	#line 9221 "format.w"
+	#line 9232 "format.w"
 	REF(baseline_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(baseline_kind,0));}
 #line 4154 "parser.c"
     break;
@@ -4156,7 +4156,7 @@
   case 299: /* content_node: start "language" REFERENCE ">"  */
 #line 1221 "parser.y"
                                      {
-	#line 9222 "format.w"
+	#line 9233 "format.w"
 	REF(language_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),hput_language((yyvsp[-1].u)));}
 #line 4162 "parser.c"
     break;
@@ -4164,7 +4164,7 @@
   case 300: /* glue_node: start "glue" ref ">"  */
 #line 1225 "parser.y"
                             {
-	#line 9224 "format.w"
+	#line 9235 "format.w"
 	REF(glue_kind,(yyvsp[-1].u));
 	if((yyvsp[-1].u)==zero_skip_no){hpos= hpos-2;(yyval.b)= false;}
 	else{hput_tags((yyvsp[-3].u),TAG(glue_kind,0));(yyval.b)= true;}}
@@ -4174,7 +4174,7 @@
   case 301: /* $@14: %empty  */
 #line 1232 "parser.y"
                              {
-	#line 9710 "format.w"
+	#line 9721 "format.w"
 	hput_content_start();}
 #line 4180 "parser.c"
     break;
@@ -4182,7 +4182,7 @@
   case 302: /* content_section: "<" "content" $@14 content_list ">"  */
 #line 1235 "parser.y"
 {
-	#line 9711 "format.w"
+	#line 9722 "format.w"
 	hput_content_end();hput_range_defs();hput_label_defs();}
 #line 4188 "parser.c"
     break;

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2025-02-13 02:21:33 UTC (rev 73952)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2025-02-13 09:35:33 UTC (rev 73953)
@@ -151,7 +151,7 @@
 {
 #line 79 "parser.y"
 
-	#line 11653 "format.w"
+	#line 11664 "format.w"
 	uint32_t u;  int32_t i;  char *s;  float64_t f;  Glyph c;
 	Dimen d;Stretch st;Xdimen xd;Kern kt;
 	Rule r;Glue g;Image x;

Modified: trunk/Build/source/texk/web2c/hitexdir/hitex.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hitex.w	2025-02-13 02:21:33 UTC (rev 73952)
+++ trunk/Build/source/texk/web2c/hitexdir/hitex.w	2025-02-13 09:35:33 UTC (rev 73953)
@@ -33996,8 +33996,8 @@
    case penalty_node:
      { int n,i;
        i = penalty(p);
-       if (i>10000) i=10000;
-       else if (i<-10000) i=-10000;
+       if (i>20000) i=20000;
+       else if (i<-20000) i=-20000;
        n=hget_int_no(i);
        if (n<0) tag=hput_int(i);
        else  { HPUT8(n); tag=TAG(penalty_kind,0);}
@@ -35170,7 +35170,9 @@
 if (ARGUMENT_IS("help")) usage_help();
 else if (ARGUMENT_IS("version")){@+
        printf(banner@, "\n"@/
+#ifdef HINT_VERSION_STRING
               "HINT version "@,HINT_VERSION_STRING@,"\n"@/
+#endif
               "Prote version "@, Prote_version_string@, "\n");
        exit(0);@+
 }



More information about the tex-live-commits mailing list.