texlive[62150] Build/source/texk/web2c/hitexdir: upgrading hitex to

commits+mruckert at tug.org commits+mruckert at tug.org
Wed Feb 23 18:27:53 CET 2022


Revision: 62150
          http://tug.org/svn/texlive?view=revision&revision=62150
Author:   mruckert
Date:     2022-02-23 18:27:52 +0100 (Wed, 23 Feb 2022)
Log Message:
-----------
upgrading hitex to version 1.4 of the HINT file format

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/hitexdir/hiformat.hnt
    trunk/Build/source/texk/web2c/hitexdir/hiformat.pdf
    trunk/Build/source/texk/web2c/hitexdir/hiformat.w
    trunk/Build/source/texk/web2c/hitexdir/hilexer.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/error.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/rendernative.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/tables.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
    trunk/Build/source/texk/web2c/hitexdir/hitexman.pdf

Added Paths:
-----------
    trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt

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

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

Modified: trunk/Build/source/texk/web2c/hitexdir/hiformat.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2022-02-23 17:27:52 UTC (rev 62150)
@@ -47,9 +47,9 @@
 
 
 \def\setrevision$#1: #2 ${\gdef\lastrevision{#2}}
-\setrevision$Revision: 2655 $
+\setrevision$Revision: 2690 $
 \def\setdate$#1(#2) ${\gdef\lastdate{#2}}
-\setdate$Date: 2022-01-24 09:01:21 +0100 (Mon, 24 Jan 2022) $
+\setdate$Date: 2022-02-22 16:40:16 +0100 (Tue, 22 Feb 2022) $
 
 \null
 
@@ -85,7 +85,7 @@
 {
   \baselineskip=1cm\parindent=0pt
   {\largetitlefont\raggedright HINT: The File Format}\par
-  \leftline{\smalltitlefont Version 1.3}
+  \leftline{\smalltitlefont Version 1.4}
   \vskip 10pt plus 0.5fill
   \leftline{\smalltitlefont Reflowable} 
   \vskip-3pt
@@ -334,20 +334,25 @@
 
 
 \subsection{Scanning the Long Format}
-First, \.{shrink} reads the input file and extracts a sequence of tokens. This is called ``scanning''\index{scanning}.
-We generate the procedure to do the scanning using the program \.{flex}\cite{JL:flexbison}\index{flex+{\tt flex}} which is the 
-GNU version of the common UNIX tool \.{lex}\cite{JL:lexyacc}\index{lex+{\tt lex}}.
+First, \.{shrink} reads the input file and extracts a sequence of
+tokens. This is called ``scanning''\index{scanning}.  We generate the
+procedure to do the scanning using the program
+\.{flex}\cite{JL:flexbison}\index{flex+{\tt flex}} which is the GNU
+version of the common UNIX tool \.{lex}\cite{JL:lexyacc}\index{lex+{\tt lex}}.
 
-The input to \.{flex} is a list of pattern/\kern -1pt action rules where the pattern is a regular
-expression and the action is a piece of \CEE\ code. 
-Most of the time, the \CEE\ code is very simple: it just returns the right token\index{token} number
-to the parser which we consider shortly.
+The input to \.{flex} is a list of pattern/\kern -1pt action rules
+where the pattern is a regular expression and the action is a piece of
+\CEE\ code.  Most of the time, the \CEE\ code is very simple: it just
+returns the right token\index{token} number to the parser which we
+consider shortly.
 
-The code that defines the tokens will be marked with a line ending in ``\redsymbol''.
-This symbol\index{symbol} stands for ``{\it Reading the long format\/}''. 
-These code sequences define the syntactical elements of the long format and at the same time
-implement the reading process. All sections where that happens are preceded by a similar heading
-and for reference they are conveniently listed together starting on page~\pageref{codeindex}.
+The code that defines the tokens will be marked with a line ending in
+``\redsymbol''.  This symbol\index{symbol} stands for ``{\it Reading
+the long format\/}''.  These code sequences define the syntactical
+elements of the long format and at the same time implement the reading
+process. All sections where that happens are preceded by a similar
+heading and for reference they are conveniently listed together
+starting on page~\pageref{codeindex}.
 
 \codesection{\redsymbol}{Reading the Long Format}\redindex{1}{2}{Glyphs}
 @s START symbol
@@ -1269,8 +1274,9 @@
 @
 
 \subsection{Floating Point Numbers}
-You know a floating point numbers\index{floating point number} when you see it because it features a radix\index{radix point} point.
-The optional exponent\index{exponent} allows you to ``float'' the point.
+You know a floating point numbers\index{floating point number} when
+you see it because it features a radix\index{radix point} point.  The
+optional exponent\index{exponent} allows you to ``float'' the point.
 
 \readcode
 @s FPNUM symbol
@@ -1285,7 +1291,8 @@
 @
 
 The layout of floating point variables of type |double| 
-or |float| typically follows the IEEE754\index{IEEE754} standard\cite{IEEE754-1985}\cite{IEEE754-2008}. 
+or |float| typically follows the IEEE754\index{IEEE754} 
+standard\cite{IEEE754-1985}\cite{IEEE754-2008}. 
 We use the following definitions:
 
 \index{float32 t+\&{float32\_t}}
@@ -1306,27 +1313,26 @@
 @s float32_t int
 @s float64_t int
 
-We expect a variable of type |float64_t| to have a binary representation using 64 bit.
-The most significant bit is the sign bit, then follow $|DBL_E_BITS|=11$ bits for
-the exponent\index{exponent}, and  $|DBL_M_BITS|=52$ bits for the mantissa\index{mantissa}.
-The sign\index{sign bit} bit is 1 for a negative number and 0 for a positive number.
-A floating point number is stored in normalized\index{normalization} form which means that
-the mantissa is shifted such that it has exactly 52+1 bit not counting leading zeros.
-The leading bit is then always 1 and there is no need to store it. So 52 bits suffice.
-To store the exponent, the excess $q=1023$ is added and the result is stored as an
-unsigned 11 bit number.
-For example if we regard the exponent bits and the mantissa bits as unsigned binary numbers 
-$e$ and $m$ then the absolute value of such a floating point number can be expressed 
-as $(1+m*2^{-52})\cdot2^{e-1023}$.
-We make similar assumptions about variables of type |float32_t| using the constants as defined above.
+We expect a variable of type |float64_t| to have a binary
+representation using 64 bit.  The most significant bit is the sign
+bit, then follow $|DBL_E_BITS|=11$ bits for the
+exponent\index{exponent}, and $|DBL_M_BITS|=52$ bits for the
+mantissa\index{mantissa}.  The sign\index{sign bit} bit is 1 for a
+negative number and 0 for a positive number.  A floating point number
+is stored in normalized\index{normalization} form which means that the
+mantissa is shifted such that it has exactly 52+1 bit not counting
+leading zeros.  The leading bit is then always 1 and there is no need
+to store it. So 52 bits suffice.  To store the exponent, the excess
+$q=1023$ is added and the result is stored as an unsigned 11 bit
+number.  For example if we regard the exponent bits and the mantissa
+bits as unsigned binary numbers $e$ and $m$ then the absolute value of
+such a floating point number can be expressed as
+$(1+m*2^{-52})\cdot2^{e-1023}$.  We make similar assumptions about
+variables of type |float32_t| using the constants as defined above.
 
+To convert the decimal representation of a floating point number to
+binary values of type |float64_t|, we use a \CEE\ library function.
 
-
-
-
-To convert the decimal representation of a floating point number to binary values of type |float64_t|,
-we use a \CEE\ library function.
-
 @<scanning macros@>=
 #define SCAN_DECFLOAT       @[yylval.f=atof(yytext)@]
 @
@@ -1339,17 +1345,21 @@
 number: UNSIGNED {$$=(float64_t)$1; } | SIGNED {$$=(float64_t)$1; } | FPNUM;
 @
 
-Unfortunately the decimal representation is not optimal for floating point numbers
-since even simple numbers in decimal notation like $0.1$ do not have an exact 
-representation as a binary floating point number.
-So if we want a notation that allows an exact representation
-of binary floating point numbers, we must use a hexadecimal\index{hexadecimal} representation.
-Hexadecimal floating point numbers start with an optional sign, then as usual the two characters ``{\tt 0x}'',
-then follows a sequence of hex digits, a radix point, more hex digits, and an optional exponent.
-The optional exponent starts with the character ``{\tt x}'', followed by an optional sign, and some more
-hex digits. The hexadecimal exponent is given as a base 16 number and it is interpreted as an exponent
-with the base 16. As an example an exponent of ``{\tt x10}'', would multiply the mantissa by $16^{16}$.
-In other words it would shift any mantissa 16 hexadecimal digits to the left. Here are the exact rules:
+Unfortunately the decimal representation is not optimal for floating
+point numbers since even simple numbers in decimal notation like $0.1$
+do not have an exact representation as a binary floating point number.
+So if we want a notation that allows an exact representation of binary
+floating point numbers, we must use a hexadecimal\index{hexadecimal}
+representation.  Hexadecimal floating point numbers start with an
+optional sign, then as usual the two characters ``{\tt 0x}'', then
+follows a sequence of hex digits, a radix point, more hex digits, and
+an optional exponent.  The optional exponent starts with the character
+``{\tt x}'', followed by an optional sign, and some more hex
+digits. The hexadecimal exponent is given as a base 16 number and it
+is interpreted as an exponent with the base 16. As an example an
+exponent of ``{\tt x10}'', would multiply the mantissa by $16^{16}$.
+In other words it would shift any mantissa 16 hexadecimal digits to
+the left. Here are the exact rules:
 
 @<scanning rules@>=
 ::@=[+-]?0x{HEX}+\.{HEX}+(x[+-]?{HEX}+)?@>  :< SCAN_HEXFLOAT; return FPNUM;  >:
@@ -1609,12 +1619,16 @@
 @
 
 \subsection{Fixed Point Numbers}
-\TeX\ internally represents most real numbers as fixed\index{fixed point number} point numbers or ``scaled integers''\index{scaled integer}.
-The type {\bf Scaled} is defined as a signed 32 bit integer, but we consider it as a fixed point number
-with the binary radix point just in the middle with sixteen bits before and sixteen bits after it.
-To convert an integer into a scaled number, we multiply it by |ONE|; to convert a floating point number
-into a scaled number, we multiply it by |ONE| and |ROUND| the result to the nearest integer; 
-to convert a scaled number to a floating point number we divide it by |(float64_t)ONE|.
+\TeX\ internally represents most real numbers as fixed\index{fixed
+point number} point numbers or ``scaled integers''\index{scaled
+integer}.  The type {\bf Scaled} is defined as a signed 32 bit
+integer, but we consider it as a fixed point number with the binary
+radix point just in the middle with sixteen bits before and sixteen
+bits after it.  To convert an integer into a scaled number, we
+multiply it by |ONE|; to convert a floating point number into a scaled
+number, we multiply it by |ONE| and |ROUND| the result to the nearest
+integer; to convert a scaled number to a floating point number we
+divide it by |(float64_t)ONE|.
 
 \noindent
 @<hint basic types@>=
@@ -1764,8 +1778,6 @@
       | dimension number V          { $$.w=$1; @+$$.h=0.0; @+$$.v=$2; }
       | dimension                   { $$.w=$1; @+$$.h=0.0; @+$$.v=0.0; };
 
-
-
 xdimen_node: start XDIMEN xdimen END { hput_tags($1,hput_xdimen(&($3))); };
 @
 
@@ -1810,7 +1822,8 @@
 Note that the info value |b000|, usually indicating a reference,
 is not supported for extended dimensions.
 Most nodes that need an extended dimension offer the opportunity to give
-a reference directly without the start and end byte. An exception is the glue node,
+a reference directly without the start and end byte. 
+An exception is the glue node,
 but glue nodes that need an extended width are rare.
 
 @<get functions@>=
@@ -3733,7 +3746,7 @@
 if ((I)&b010)  { Dimen a; @+HGET32(a); hwritef(" shifted"); @+hwrite_dimension(a);@+}\
  { Stretch p; @+HGET_STRETCH(p);@+hwrite_plus(&p);@+}\
  { Stretch m; @+HGET_STRETCH(m);@+hwrite_minus(&m);@+}\
- if ((I)&b100) {Xdimen x;@+ hget_xdimen_node(&x); @+hwrite_xdimen_node(&x);@+} else HGET_REF(xdimen_kind)@;\
+ if ((I)&b100) {Xdimen x;@+ hget_xdimen_node(&x); @+hwrite_xdimen_node(&x);@+} else HGET_REF(xdimen_kind);\
  { List l; @+hget_list(&l);@+ hwrite_list(&l); @+} 
 @#
 
@@ -4258,12 +4271,14 @@
 @
 
 
-The following parsing rules are slightly more complicated than I would like them to be, but it seems more important
-to achieve a regular layout of the short format nodes where all sub nodes are located at the end of a node.
-In this case, I want to put a |param_ref| before an |xdimen| node, but otherwise have
-the |xdimen_ref| before a |param_list|.
-The |par_dimen| rule is introduced only to avoid a reduce/reduce conflict in the parser.
-The parsing of |empty_param_list| and |non_empty_param_list| is explained in
+The following parsing rules are slightly more complicated than I would
+like them to be, but it seems more important to achieve a regular
+layout of the short format nodes where all sub nodes are located at
+the end of a node.  In this case, I want to put a |param_ref| before
+an |xdimen| node, but otherwise have the |xdimen_ref| before a
+|param_list|.  The |par_dimen| rule is introduced only to avoid a
+reduce/reduce conflict in the parser.  The parsing of
+|empty_param_list| and |non_empty_param_list| is explained in
 section~\secref{paramlist}.
 
 @<parsing rules@>=
@@ -4588,28 +4603,64 @@
 \section{Extensions to \TeX}\hascode
 
 \subsection{Images}
-Images behave pretty much like glue\index{glue}. They can stretch (or shrink)
-together with the surrounding glue to fill a horizontal or vertical box.
-Like glue, they stretch in the horizontal direction when filling an horizontal box
-and they stretch in the vertical direction as part of a vertical box.
-Stretchability and shrinkability are optional parts of an image node.
+In the first implementation attempt, images behaved pretty much
+like glue\index{glue}. They could stretch (or shrink) together with
+the surrounding glue to fill a horizontal or vertical box.  While I
+thought this would be in line with \TeX's concepts, it proved to be a
+bad decission because images, as opposed to glue, would stretch or
+shrink horizontaly {\it and} vertically at the same time.
+This would require a two pass algorithm to pack boxes: first to
+determine the glue setting and a secondf pass to determine the proper
+image dimensions. Otherwise incorrect width or height values would
+propagate all the way through a sequence of nested boxes. Even worse
+so, this two pass algorithm would be needed in the viewer if images
+were contained in boxes that had extended dimensions.
 
-Unlike glue, images have both a width and a height.
-The relation of height to width, the aspect ratio, is preserved by stretching and shrinking.
+The new design described below allows images with extended dimensions.
+This covers the case of stretchable or shrinkable images inside of
+extended boxes.  The given extended dimensions are considered maximum
+values. The stretching or shrinking of images will always preserve the
+relation of width${}/{}$height, the aspect ratio.
 
-While glue often has a zero width, images usually have a nonzero natural size and making
-them much smaller is undesirable. 
-The natural width and height of an image are optional parts of an image node;
-typically this information is contained in the image data.
+For convenience, we allow missing values in the long format, for
+example the aspect ratio, if they can be determined from the image
+data.  In the short format, the necessary information for a correct
+layout must be available without using the image data.
 
-The only required part of an image node is the number of the auxiliary section 
-where the image data can be found. 
+In the long format, the only required parts of an image node are the
+number of the auxiliary section where the image data can be found and
+the descriptive text which is there to make the document more
+accessible.  The section number is followed by the optional aspect
+ratio, width, and height of the image.  If some of these values are
+missing, it must be possible to determine them from the image
+data. The node ends with the description.
 
+The short format, starts with the section number of the image data and
+ends with the description. Missing values for aspect ratio, width, and
+height are only allowed if they can be recomputed from the given data.
+A missing width or height is represented by a reference to the zero
+extended dimension.  If the |b100| bit is set, the aspect ratio is
+present as a 32 bit floating point value followed by extended
+dimensions for width and height.  The info value |b100| indicates a
+width reference followed by a height reference; the value |b111|
+indicates a width node followed by a height node; the value |b110|
+indicates a height reference followed by a width node; and the value
+|b101| indicates a width reference followed by a height node.  The
+last two rules reflect the requirement that subnodes are always
+located at the end of a node.
+
+The remaining info values are used as follows:
+The value |b000| is used for a reference to an image.
+The value |b011| indicates an immediate width and an immediate height.
+The value |b010| indicates an aspect ratio and an immediate width.
+The value |b001| indicates an aspect ratio and an immediate height.
+
 @<hint types@>=
 typedef struct {@+
 uint16_t n;@+
-Dimen w,h;@+
-Stretch p,m;@+
+float32_t a;@+
+Xdimen w,h;@+
+uint8_t wr,hr;@+
 } Image;
 @
 
@@ -4617,29 +4668,58 @@
 \readcode
 @s IMAGE symbol
 @s image symbol
- at s image_dimen symbol
+ at s image_aspect symbol
+ at s image_aspect symbol
+ at s image_width symbol
+ at s image_height symbol
+ at s image_spec symbol
 @<symbols@>=
 %token IMAGE "image"
-%type <x> image image_dimen
+%token WIDTH "width"
+%token HEIGHT "height"
+%type <xd> image_width image_height
+%type <f> image_aspect
+%type <info> image_spec image
 @
 
 @<scanning rules@>=
 ::@=image@>       :< return IMAGE; >:
+::@=width@>       :< return WIDTH; >:
+::@=height@>       :< return HEIGHT; >:
 @
 
 @<parsing rules@>=
-image_dimen: dimension dimension {$$.w=$1; $$.h=$2;} | {$$.w=$$.h=0; };
-image: UNSIGNED image_dimen plus minus { $$.w=$2.w; $$.h=$2.h; $$.p=$3; $$.m=$4;  RNG("Section number",$1,3,max_section_no);$$.n=$1; };
-content_node: start IMAGE image END { hput_tags($1,hput_image(&($3)));}
+image_aspect: number {$$=$1;} | {$$=0.0;};
+image_width: WIDTH xdimen { $$=$2;}
+           | { $$=xdimen_defaults[zero_xdimen_no];};
+image_height: HEIGHT xdimen { $$=$2; }
+           | { $$=xdimen_defaults[zero_xdimen_no];};
+
+image_spec: UNSIGNED image_aspect image_width image_height 
+            {$$=hput_image_spec($1,$2,0,&($3),0,&($4));}
+          | UNSIGNED image_aspect WIDTH REFERENCE image_height 
+            {$$=hput_image_spec($1,$2,$4,NULL,0,&($5));}
+          | UNSIGNED image_aspect image_width HEIGHT REFERENCE 
+            {$$=hput_image_spec($1,$2,0,&($3),$5,NULL);}
+          | UNSIGNED image_aspect WIDTH REFERENCE HEIGHT REFERENCE 
+            {$$=hput_image_spec($1,$2,$4,NULL,$6,NULL);};
+  
+image: image_spec list {$$=$1;};
+
+content_node: start IMAGE image END { hput_tags($1,TAG(image_kind,$3));};
 @
 
 \writecode
 @<write functions@>=
 void hwrite_image(Image *x)
-{ hwritef(" %u",x->n);
-  if (x->w!=0 ||x->h!=0) { hwrite_dimension(x->w); hwrite_dimension(x->h);@+}
-  hwrite_plus(&x->p);
-  hwrite_minus(&x->m);
+{ RNG("Section number",x->n,3,max_section_no); hwritef(" %u",x->n);
+  if (x->a!=0.0) hwrite_float64(x->a);
+  if (x->wr!=0) hwritef(" width *%u",x->wr);
+  else if (x->w.w!=0 ||x->w.h!=0.0 || x->w.v!=0.0)
+  { hwritef(" width"); hwrite_xdimen(&x->w); }
+  if (x->hr!=0) hwritef(" height *%u",x->hr);
+  else if (x->h.w!=0 || x->h.h!=0.0 || x->h.v!=0.0)
+  { hwritef(" height"); hwrite_xdimen(&x->h); }
 }
 @
 
@@ -4646,35 +4726,394 @@
 \getcode
 @<cases to get content@>=
 @t\1\kern1em@>
-case TAG(image_kind,b100): @+ { Image x;@+HGET_IMAGE(b100,x);@+}@+break;
-case TAG(image_kind,b101): @+ { Image x;@+HGET_IMAGE(b101,x);@+}@+break;
-case TAG(image_kind,b110): @+ { Image x;@+HGET_IMAGE(b110,x);@+}@+break;
-case TAG(image_kind,b111): @+ { Image x;@+HGET_IMAGE(b111,x);@+}@+break;
+case TAG(image_kind,b001): @+ HGET_IMAGE(b001);@+break;
+case TAG(image_kind,b010): @+ HGET_IMAGE(b010);@+break;
+case TAG(image_kind,b011): @+ HGET_IMAGE(b011);@+break;
+case TAG(image_kind,b100): @+ HGET_IMAGE(b100);@+break;
+case TAG(image_kind,b101): @+ HGET_IMAGE(b101);@+break;
+case TAG(image_kind,b110): @+ HGET_IMAGE(b110);@+break;
+case TAG(image_kind,b111): @+ HGET_IMAGE(b111);@+break;
 @
 
 @<get macros@>=
-#define @[HGET_IMAGE(I,X)@] @/\
-HGET16((X).n);RNG("Section number",(X).n,3,max_section_no);  \
-if (I&b010) {HGET32((X).w);HGET32((X).h);@+} \
-else (X).w=(X).h=0;\
-if (I&b001) {HGET_STRETCH((X).p);HGET_STRETCH((X).m);@+}\
-else { (X).p.f=(X).m.f=0.0; (X).p.o=(X).m.o=normal_o;@+}\
-hwrite_image(&(X));
+#define @[HGET_IMAGE(I)@] @/\
+{ Image x={0};\
+HGET16(x.n);\
+if ((I)&b100) { x.a=hget_float32();\
+ if ((I)==b111) {hget_xdimen_node(&x.w);hget_xdimen_node(&x.h);}\
+ else if ((I)==b110) {x.hr=HGET8;hget_xdimen_node(&x.w);}\
+ else if ((I)==b101) {x.wr=HGET8;hget_xdimen_node(&x.h);}\
+ else  {x.wr=HGET8;x.hr=HGET8;}}\
+else if((I)==b011) {HGET32(x.w.w);HGET32(x.h.w);} \
+else if((I)==b010) { x.a=hget_float32(); HGET32(x.w.w);}\
+else if((I)==b001){ x.a=hget_float32(); HGET32(x.h.w);}\
+hwrite_image(&x);\
+{List d;  hget_list(&d);hwrite_list(&d);}}@/
 @
 
 
+
+Because the long format can omit part of the image specification
+which is required for the short format if the necessary information 
+is contained in the image data, we have to implement the extraction
+of image information before we can implement the |hput_image_spec|
+function.
+
 \putcode
 @<put functions@>=
-uint8_t hput_image(Image *x)
-{ Info i=b100;
-  HPUT16(x->n);
-  if (x->w!=0 || x->h!=0)@+  {HPUT32(x->w); HPUT32(x->h); i|=b010;@+ }
-  if (x->p.f!=0.0 || x->m.f!=0.0)@+  {hput_stretch(&x->p); hput_stretch(&x->m); i|=b001;@+ }
-  return TAG(image_kind,i);
+@<image functions@>@;
+Info hput_image_spec(uint32_t n, float32_t a, 
+                     uint32_t wr, Xdimen *w, uint32_t hr, Xdimen *h)
+{ HPUT16(n);
+  if (w!=NULL && h!=NULL)
+  { if (w->h==0.0 && w->v==0.0 && h->h==0.0 && h->v==0.0)
+     return hput_image_dimens(n,a,w->w,h->w);
+    else
+    { hput_image_aspect(n,a);
+      hput_xdimen_node(w);hput_xdimen_node(h);
+      return b111;
+    }
+  }
+  else if (w!=NULL && h==NULL)
+  { if (w->h==0.0 && w->v==0.0 && hr==zero_xdimen_no)
+     return hput_image_dimens(n,a,w->w,0);
+    else
+    { hput_image_aspect(n,a);
+      HPUT8(hr);hput_xdimen_node(w);
+      return b110;
+    }
+  } 
+  else if (w==NULL && h!=NULL)
+  { if (wr==zero_xdimen_no && h->h==0.0 && h->v==0.0)
+     return hput_image_dimens(n,a,0,h->w);
+    else
+    { hput_image_aspect(n,a);
+      HPUT8(wr);hput_xdimen_node(h);
+      return b101;
+    }
+  }
+  else
+  { if (wr==zero_xdimen_no && hr==zero_xdimen_no)
+     return hput_image_dimens(n,a,0,0);
+    else
+    { hput_image_aspect(n,a);
+      HPUT8(wr);HPUT8(hr);
+      return b100;
+    }
+  }
 }
 @
 
+If no extended dimensions are involved in an image specification,
+we use |hput_image_dimen|.
 
+@<image functions@>=
+@<auxiliar image functions@>@;
+static Info hput_image_dimens(int n,float32_t a, Dimen w, Dimen h)
+{ Dimen iw,ih;
+  double ia;
+  hget_image_dimens(n,&ia,&iw,&ih);
+  @<merge stored image dimensions with dimensions given@>@;
+  if (w!=0 && h!=0)
+  { HPUT32(iw); HPUT32(ih); return b011; }
+  else if (a!=0.0)
+  { if (h!=0)
+    { hput_float32((float32_t)ia); HPUT32(ih); return b001; }
+    else
+    { hput_float32((float32_t)ia); HPUT32(iw); return b010; }
+  }
+  else 
+  { HPUT32(iw); HPUT32(ih); return b011; }
+}
+@
+
+If extended dimensions are involved, we need |hput_image_aspect|.
+@<image functions@>=
+static void hput_image_aspect(int n,double a)
+{ 
+  if (a==0.0) {Dimen w,h; hget_image_dimens(n,&a,&w,&h);}
+  if (a!=0.0) hput_float32(a);
+  else  QUIT("Unable to determine aspect ratio of image %d",n);
+}
+@
+
+
+When we have found the width, height or aspect ratio of the stored
+image, we can merge this information with the information given by the
+user.  Note that from width and height the aspect ratio can always be
+determined.  The user might very well specify different values than
+stored in the image.  In this case the user given dimensions are
+interpreted as maximum dimensions and the aspect ratio as given in the
+image file takes precedence over an user specified value.  This is
+accomplished by the following:
+
+@<merge stored image dimensions with dimensions given@>=
+{ if (ia==0.0)
+  { if (a!=0.0) ia=a;
+    else if(w!=0 && h!=0) ia=(double)w/(double)h;
+    else QUIT("Unable to determine dimensions of image %d",n);
+  }
+  if (w==0 && h==0)
+  { if (iw==0) iw=round(ih * ia);
+    else if (ih==0) ih=round(iw/ia);
+  }
+  else if (h==0) 
+  { iw=w; ih=round(w/ia); }
+  else if (w==0) 
+  { ih=h; iw=round(h*ia);}
+  else 
+  { Dimen x;
+    x =  round(h*ia);
+    if (w>x) w = x;
+    x =  round(w/ia);
+    if (h>x) h=x;
+    ih = h;
+    iw = w;
+  }
+}
+@
+
+We define a few macros and variables for the reading of image files.
+
+@<auxiliar image functions@>=
+#define IMG_BUF_MAX 54
+#define IMG_HEAD_MAX 2
+static unsigned char img_buf[IMG_BUF_MAX];
+static size_t img_buf_size;
+#define @[LittleEndian32(X)@]   (img_buf[(X)]+(img_buf[(X)+1]<<8)+\
+                                (img_buf[(X)+2]<<16)+(img_buf[(X)+3]<<24))
+
+#define @[BigEndian16(X)@]   (img_buf[(X)+1]+(img_buf[(X)]<<8))
+
+#define @[BigEndian32(X)@]   (img_buf[(X)+3]+(img_buf[(X)+2]<<8)+\
+                                (img_buf[(X)+1]<<16)+(img_buf[(X)]<<24))
+
+#define Match2(X,A,B)  ((img_buf[(X)]==(A)) && (img_buf[(X)+1]==(B)))
+#define Match4(X,A,B,C,D)  (Match2(X,A,B)&&Match2((X)+2,C,D))
+
+#define @[GET_IMG_BUF(X)@] \
+if (img_buf_size<X) \
+  { size_t i=fread(img_buf+img_buf_size,1,(X)-img_buf_size,f); \
+    if (i<0) QUIT("Unable to read image %s",fn); \
+    else if (i==0) QUIT("Unable to read image header %s",fn); \
+    else img_buf_size+=i; \
+  }
+@
+
+Considering the different image formats, we start with Windows
+Bitmaps.  A Windows bitmap file usually has the extension {\tt .bmp}
+but the better way to check for a Windows bitmap file ist to examine
+the first two byte of the file: the ASCII codes for `B' and `M'.  Once
+we have verified the file type, we find the width and height of the
+bitmap in pixels at offsets |0x12| and |0x16| stored as little-endian
+32 bit integers. At offsets |0x26| and |0x2A|, we find the horizontal
+and vertical resolution in pixel per meter stored in the same format.
+This is sufficient to compute the true width and height of the image
+in scaled points.  If either the width or the height is already known,
+we just use the aspect ratio and compute the missing value.
+
+The Windows Bitmap format is easy to process but not very
+efficient. So the support for this format in the \HINT\ format is
+deprecated and will disappear.  You should use one of the formats
+described next.
+
+@<auxiliar image functions@>=
+static bool get_BMP_info(FILE *f, char *fn, double *a, Dimen *w, Dimen *h)
+{ double wpx,hpx;
+  double xppm,yppm;
+  GET_IMG_BUF(2);
+  if (!Match2(0,'B','M')) return false;
+  GET_IMG_BUF(0x2E);
+  wpx=(double)LittleEndian32(0x12); /*width in pixel*/
+  hpx=(double)LittleEndian32(0x16); /*height in pixel*/
+  xppm=(double)LittleEndian32(0x26); /* horizontal pixel per meter*/
+  yppm=(double)LittleEndian32(0x2A); /* vertical pixel per meter*/
+  *w= floor(0.5+ONE*(72.00*1000.0/25.4)*wpx/xppm);
+  *h= floor(0.5+ONE*(72.00*1000.0/25.4)*hpx/yppm);
+  *a = (wpx/xppm)/(hpx/yppm);
+  return true;
+}
+@ 
+
+Now we repeat this process for image files using the Portable Network
+Graphics file format. This file format is well suited to simple
+graphics that do not use color gradients.  These images usually have
+the extension {\tt .png} and start with an eight byte signature:
+|0x89| followed by the ASCII Codes `P', `N', `G', followd by a
+carriage return (|0x0D| and line feed (|0x0A|), an DOS end-of-file
+character (|0x1A|) and final line feed (|0x0A|).  After the signature
+follows a list of chunks. The first chunk is the image header chunk.
+Each chunk starts with the size of the chunk stored as big-endian 32
+bit integer, followed by the chunk name stored as four ASCII codes
+followed by the chunk data and a CRC.  The size, as stored in the
+chunk, does not include the size itself, nor the name, and neither the
+CRC.  The first chunk is the IHDR chunk.  The chunk data of the IHDR
+chunk starts with the width and the height of the image in pixels
+stored as 32 bit big-endian integers.
+
+Finding the image resolution takes some more effort. The image
+resolution is stored in an optional chunk named ``pHYs'' for the
+physical pixel dimensions.  All we know is that this chunk, if it
+exists, will appear after the IHDR chunk and before the (required)
+IDAT chunk. The pHYs chunk contains two 32 bit big-endian integers,
+giving the horizontal and vertical pixels per unit, and a one byte
+unit specifier, which is either 0 for an undefined unit or 1 for the
+meter as unit. With an undefined unit, only the aspect ratio of the
+pixels and hence the aspect ratio of the image can be determined.
+
+
+@<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;
+  int unit;
+  GET_IMG_BUF(24);
+  if (!Match4(0, 0x89, 'P', 'N', 'G') ||
+      !Match4(4, 0x0D, 0x0A, 0x1A, 0x0A)) return false;
+  size=BigEndian32(8);
+  if (!Match4(12,'I', 'H', 'D', 'R')) return false;
+  wpx=(double)BigEndian32(16);
+  hpx=(double)BigEndian32(20);
+  pos=20+size;
+  while (true)
+  { if (fseek(f,pos,SEEK_SET)!=0) return false;
+    img_buf_size=0;
+    GET_IMG_BUF(17);
+    size=BigEndian32(0);
+    if (Match4(4,'p', 'H', 'Y', 's'))
+    { xppu =(double)BigEndian32(8);  
+      yppu =(double)BigEndian32(12);
+      unit=img_buf[16];
+      if (unit==0)
+      { *a =(wpx/xppu)/(hpx/yppu);
+        return true;
+      }
+      else if (unit==1)
+      {
+        *w=floor(0.5+ONE*(72.00/0.0254)*wpx/xppu);
+        *h=floor(0.5+ONE*(72.00/0.0254)*hpx/yppu);
+        *a = (wpx/xppu)/(hpx/yppu);
+        return true;
+      }
+      else
+        return false;
+    }
+    else if  (Match4(4,'I', 'D', 'A', 'T'))
+      return false;
+    else
+      pos=pos+12+size;
+  }
+  return false;
+}
+@ 
+
+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
+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
+(|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.
+
+
+@<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;
+  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;
+  while (true)
+  { if (fseek(f,pos,SEEK_SET)!=0) return false;
+    img_buf_size=0;
+    GET_IMG_BUF(10);
+    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);
+        return true;
+      }
+      else if (unit==1)
+      { *w = floor(0.5+ONE*72.00*wpx/xppu);
+        *h = floor(0.5+ONE*72.00*hpx/yppu);
+        *a = (wpx/xppu)/(hpx/yppu);
+        return true;
+      }
+      else if (unit==2)
+      { *w = floor(0.5+ONE*(72.00/2.54)*wpx/xppu);
+        *h = floor(0.5+ONE*(72.00/2.54)*hpx/yppu);
+        *a = (wpx/xppu)/(hpx/yppu);
+        return true;
+      }
+      else
+        return false;
+    }
+    else
+    { size=  BigEndian16(2);
+      pos=pos+2+size;
+    }
+  }
+  return false;
+}
+@ 
+
+There is still one image format missing: scalable vector graphics.
+In the moment, I tend not to include a further image format into
+the definition of the \HINT\ file format but instead use the
+PostScript subset that is used for Type 1 fonts to encode
+vector graphics. Any \HINT\ viewer must support Type 1
+PostScript fonts and hence it has already the necessary interpreter.
+So it seems reasonable to put the burden of converting vector graphics
+into a Type 1 PostScript font on the generator of \HINT\ files
+and keep the \HINT\ viewer as small and simple as possible.
+Now we determine width, height
+and aspect ratio  based on an image file.
+
+
+We combine all three functions into the |hget_image_dimens|
+function.
+
+@<auxiliar image functions@>=
+static void hget_image_dimens(int n, double *a, Dimen *w, Dimen *h)
+{ char *fn;
+  FILE *f;
+  *a=0.0;
+  *w=*h=0;
+  fn=dir[n].file_name;
+  f=fopen(fn,"rb");
+  if (f!=NULL)
+  { img_buf_size=0;
+    if (!get_BMP_info(f,fn,a,w,h) &&
+      !get_PNG_info(f,fn,a,w,h) &&
+      !get_JPG_info(f,fn,a,w,h))
+    DBG(DBGDEF,"Unknown image type %s",fn);
+    fclose(f); 
+    DBG(DBGDEF,"image %d: width= %fpt height= %fpt\n",
+             n,*w/(double)ONE,*h/(double)ONE);
+  }
+}
+@
+
 \subsection{Positions, Outlines, Links, and Labels}\label{labels}
 \index{position}\index{outline}\index{link}\index{label}
 A viewer can usually not display the entire content section of
@@ -7670,7 +8109,7 @@
 | start BASELINE ref baseline END  @| { DEF($$,baseline_kind,$3);@+hput_tags($1,TAG(baseline_kind, $4));@+} 
 | start LIGATURE ref ligature END  @| { DEF($$,ligature_kind,$3);@+hput_tags($1,hput_ligature(&($4)));} 
 | start DISC ref disc END      @| { DEF($$,disc_kind,$3);@+  hput_tags($1,hput_disc(&($4)));} 
-| start IMAGE  ref image END       @| { DEF($$,image_kind,$3);@+   hput_tags($1,hput_image(&($4)));}
+| start IMAGE  ref image END       @| { DEF($$,image_kind,$3);@+   hput_tags($1,TAG(image_kind,$4));}
 | start PARAM  ref parameters END  @| { DEF($$,param_kind,$3);@+   hput_tags($1,hput_list($1+2,&($4)));} 
 | start PAGE   ref page END        @| { DEF($$,page_kind,$3);@+    hput_tags($1,TAG(page_kind,0));}; 
 @
@@ -7985,7 +8424,7 @@
 | start GLUE    fref glue END       { hput_tags($1,hput_glue(&($4)));} 
 | start LANGUAGE fref string END    { hput_string($4);hput_tags($1,TAG(language_kind,0));}
 | start RULE    fref rule END       { hput_tags($1,hput_rule(&($4)));}
-| start IMAGE   fref image END      { hput_tags($1,hput_image(&($4)));};
+| start IMAGE   fref image END      { hput_tags($1,TAG(image_kind,$4));};
 
 fref: ref @/{ RNG("Font parameter",$1,0,MAX_FONT_PARAMS); };
 @
@@ -9285,13 +9724,16 @@
 @
 
 \subsection{Images}\index{image}
-If not given by a reference, images contain a section reference and optional dimensions, stretch, and shrink.
+If not given by a reference, images contain a section reference and optional dimensions and a descriptive list.
 @<initialize the  |hnode_size| array@>=
 hnode_size[TAG(image_kind,b000)] = 1+1+1;
-hnode_size[TAG(image_kind,b100)] = 1+2+1;
-hnode_size[TAG(image_kind,b101)] = 1+2+4+4+1;
-hnode_size[TAG(image_kind,b110)] = 1+2+4+4+1;
-hnode_size[TAG(image_kind,b111)] = 1+2+4+4+4+4+1;
+hnode_size[TAG(image_kind,b001)] = I_T(1+2+4+4,1);
+hnode_size[TAG(image_kind,b010)] = I_T(1+2+4+4,1);
+hnode_size[TAG(image_kind,b011)] = I_T(1+2+4+4,1);
+hnode_size[TAG(image_kind,b100)] = I_T(1+2+4+1+1,1);
+hnode_size[TAG(image_kind,b101)] = I_T(1+2+4+1,2);
+hnode_size[TAG(image_kind,b110)] = I_T(1+2+4+1,2);
+hnode_size[TAG(image_kind,b111)] = I_T(1+2+4,3);
 @
 
 \subsection{Links}\index{link}
@@ -9789,19 +10231,29 @@
 \subsection{Images}\index{image}
 \noindent
 @<skip macros@>=
-#define @[HTEG_IMAGE(I,X)@] @/\
-if (I&b001) {HTEG_STRETCH((X).m);HTEG_STRETCH((X).p);@+}\
-else { (X).p.f=(X).m.f=0.0; (X).p.o=(X).m.o=normal_o;@+}\
-if (I&b010) {HTEG32((X).h);HTEG32((X).w);@+} \
-else (X).w=(X).h=0;\
-HTEG16((X).n);
+#define @[HTEG_IMAGE(I)@] @/\
+{ Image x={0}; List d; hteg_list(&d);\
+if ((I)&b100) {\
+ if ((I)==b111) {hteg_xdimen_node(&x.h);hteg_xdimen_node(&x.w);}\
+ else if ((I)==b110) {hteg_xdimen_node(&x.w);x.hr=HTEG8;}\
+ else if ((I)==b101) {hteg_xdimen_node(&x.h);x.wr=HTEG8;}\
+ else  {x.hr=HTEG8;x.wr=HTEG8;}\
+x.a=hteg_float32();}\
+else if((I)==b011) {HTEG32(x.h.w);HTEG32(x.w.w);} \
+else if((I)==b010) { HTEG32(x.w.w); x.a=hteg_float32();}\
+else if((I)==b001){ HTEG32(x.h.w); x.a=hteg_float32();}\
+HTEG16(x.n);}
 @
 
 @<cases to skip content@>=
- at t\1\kern1em@>case TAG(image_kind,b100): @+ { Image x;@+HTEG_IMAGE(b100,x);@+}@+break;
-case TAG(image_kind,b101): @+ { Image x;@+HTEG_IMAGE(b101,x);@+}@+break;
-case TAG(image_kind,b110): @+ { Image x;@+HTEG_IMAGE(b110,x);@+}@+break;
-case TAG(image_kind,b111): @+ { Image x;@+HTEG_IMAGE(b111,x);@+}@+break;
+ at t\1\kern1em@>
+case TAG(image_kind,b001): @+ HTEG_IMAGE(b001);@+break;
+case TAG(image_kind,b010): @+ HTEG_IMAGE(b010);@+break;
+case TAG(image_kind,b011): @+ HTEG_IMAGE(b011);@+break;
+case TAG(image_kind,b100): @+ HTEG_IMAGE(b100);@+break;
+case TAG(image_kind,b101): @+ HTEG_IMAGE(b101);@+break;
+case TAG(image_kind,b110): @+ HTEG_IMAGE(b110);@+break;
+case TAG(image_kind,b111): @+ HTEG_IMAGE(b111);@+break;
 @
 
 \subsection{Links and Labels}
@@ -9993,12 +10445,10 @@
 #error  @=float64 type must have size 8@>
 #endif
 #define HINT_VERSION 1
-#define HINT_SUB_VERSION 3
+#define HINT_SUB_VERSION 4
 #endif
 @
 
-
-
 \subsection{{\tt format.h}}\index{format.h+{\tt format.h}}
 The \.{format.h} file contains definitions of types, macros, variables and functions
 that are needed in other compilation units.
@@ -10233,7 +10683,7 @@
 extern uint8_t hput_ligature(Lig *l);
 extern uint8_t hput_disc(Disc *h);
 extern Info hput_span_count(uint32_t n);
-extern uint8_t hput_image(Image *x);
+extern Info hput_image_spec(uint32_t n, float32_t a, uint32_t wr, Xdimen *w, uint32_t hr, Xdimen *h);
 extern void hput_string(char *str);
 extern void hput_range(uint8_t pg, bool on);
 extern void hput_max_definitions(void);
@@ -10362,6 +10812,7 @@
 
 @(hishrink.c@>=
 #include "hibasetypes.h"
+#include <math.h>
 #include <string.h>
 #include <ctype.h>
 #include <sys/types.h>

Modified: trunk/Build/source/texk/web2c/hitexdir/hilexer.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,6 +1,6 @@
-#line 2 "lexer.c"
+#line 1 "lexer.c"
 
-#line 4 "lexer.c"
+#line 3 "lexer.c"
 
 #define  YY_INT_ALIGNED short int
 
@@ -7,7 +7,6 @@
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
-
 /* %if-c-only */
 /* %if-not-reentrant */
 
@@ -17,8 +16,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -27,7 +26,7 @@
 /* %endif */
 
 /* %if-c-only */
-    
+
 /* %endif */
 
 /* %if-c-only */
@@ -109,6 +108,10 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#ifndef SIZE_MAX
+#define SIZE_MAX               (~(size_t)0)
+#endif
+
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
@@ -115,44 +118,29 @@
 
 /* %endif */
 
+/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-#ifdef __cplusplus
+/* TODO: this is always defined, so inline it */
+#define yyconst const
 
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* %not-for-header */
-
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
+/* Promotes a possibly negative, possibly signed char to an
+ *   integer in range [0..255] for use as an array index.
  */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -167,7 +155,6 @@
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
-
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
@@ -174,18 +161,23 @@
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
-
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart(yyin  )
-
+#define YY_NEW_FILE yyrestart( yyin  )
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -203,7 +195,7 @@
 #endif
 
 /* %if-not-reentrant */
-extern yy_size_t yyleng;
+extern int yyleng;
 /* %endif */
 
 /* %if-c-only */
@@ -215,10 +207,10 @@
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-
+    
     /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
      *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex. 
+     *       existing scanners that call yyless() from OUTSIDE yylex.
      *       One obvious solution it to make yy_act a global. I tried that, and saw
      *       a 5% performance hit in a non-yylineno scanner, because yy_act is
      *       normally declared as a register variable-- so it is not worth it.
@@ -230,6 +222,13 @@
                     if ( yytext[yyl] == '\n' )\
                         --yylineno;\
             }while(0)
+    #define YY_LINENO_REWIND_TO(dst) \
+            do {\
+                const char *p;\
+                for ( p = yy_cp-1; p >= (dst); --p)\
+                    if ( *p == '\n' )\
+                        --yylineno;\
+            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -244,7 +243,6 @@
 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
-
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -264,12 +262,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -292,7 +290,7 @@
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-    
+
 	/* Whether to try to fill the input buffer when we reach the
 	 * end of it.
 	 */
@@ -319,13 +317,12 @@
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
-
 /* %if-not-reentrant */
 
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -340,7 +337,6 @@
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
-
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -350,14 +346,13 @@
 
 /* %if-not-reentrant */
 /* %not-for-header */
-
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
@@ -369,52 +364,48 @@
 
 /* %endif */
 
-void yyrestart (FILE *input_file  );
-void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
-void yy_delete_buffer (YY_BUFFER_STATE b  );
-void yy_flush_buffer (YY_BUFFER_STATE b  );
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state (void );
+void yyrestart ( FILE *input_file  );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
+void yy_delete_buffer ( YY_BUFFER_STATE b  );
+void yy_flush_buffer ( YY_BUFFER_STATE b  );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state ( void );
 
-static void yyensure_buffer_stack (void );
-static void yy_load_buffer_state (void );
-static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+static void yyensure_buffer_stack ( void );
+static void yy_load_buffer_state ( void );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
 
-#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
 
-YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
-
 /* %endif */
 
-void *yyalloc (yy_size_t  );
-void *yyrealloc (void *,yy_size_t  );
-void yyfree (void *  );
+void *yyalloc ( yy_size_t  );
+void *yyrealloc ( void *, yy_size_t  );
+void yyfree ( void *  );
 
 #define yy_new_buffer yy_create_buffer
-
 #define yy_set_interactive(is_interactive) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){ \
         yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+            yy_create_buffer( yyin, YY_BUF_SIZE ); \
 	} \
 	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
 	}
-
 #define yy_set_bol(at_bol) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){\
         yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+            yy_create_buffer( yyin, YY_BUF_SIZE ); \
 	} \
 	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
 	}
-
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
 /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
@@ -421,26 +412,29 @@
 /* Begin user sect3 */
 
 #define FLEX_DEBUG
+typedef flex_uint8_t YY_CHAR;
 
-typedef unsigned char YY_CHAR;
+FILE *yyin = NULL, *yyout = NULL;
 
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-
 typedef int yy_state_type;
 
 extern int yylineno;
-
 int yylineno = 1;
 
 extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
 #define yytext_ptr yytext
 
+/* %% [1.5] DFA */
+
 /* %if-c-only Standard (non-C++) definition */
 
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
+static yy_state_type yy_get_previous_state ( void );
+static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
+static int yy_get_next_buffer ( void );
+static void yynoreturn yy_fatal_error ( const char* msg  );
 
 /* %endif */
 
@@ -450,15 +444,14 @@
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
 /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyleng = (int) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
 	(yy_c_buf_p) = yy_cp;
-
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 126
-#define YY_END_OF_BUFFER 127
+#define YY_NUM_RULES 128
+#define YY_END_OF_BUFFER 129
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -466,51 +459,52 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[371] =
+static const flex_int16_t yy_accept[381] =
     {   0,
-        0,    0,    0,    0,    0,    0,  127,  125,    6,    6,
-       43,   47,   10,  125,  114,  125,    4,    4,    1,    2,
-       41,  124,  124,  124,  124,  124,  124,  124,   31,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,   32,
-      124,   40,   14,   15,   13,   11,   74,   74,   58,   72,
-       48,   73,   49,   50,   74,  126,  126,  126,  126,    0,
-        0,    0,    0,    0,    0,    0,    7,    5,    5,    9,
-        9,    0,    0,    0,    4,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,   29,  124,  124,  124,  124,  124,  124,  124,
+        0,    0,    0,    0,    0,    0,  129,  127,    6,    6,
+       43,   47,   10,  127,  116,  127,    4,    4,    1,    2,
+       41,  126,  126,  126,  126,  126,  126,  126,   31,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,   32,
+      126,  126,   40,   14,   15,   13,   11,   74,   74,   58,
+       72,   48,   73,   49,   50,   74,  128,  128,  128,  128,
+        0,    0,    0,    0,    0,    0,    0,    7,    5,    5,
+        9,    9,    0,    0,    0,    4,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,   29,  126,  126,  126,  126,  126,
 
-       28,  124,   97,  124,  124,  124,  124,   27,  124,  124,
-      124,  124,  124,  124,  124,   86,  124,  124,  124,  124,
-       12,    0,   58,   58,    0,   59,   55,   52,   56,   60,
-       53,   54,   57,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   51,   71,   75,    0,    0,   20,   20,
-       16,    0,    0,    0,    5,    0,    9,   24,    8,   85,
-      124,  124,  124,  106,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,   33,  124,  124,  124,  124,  124,  124,
-      124,  124,   37,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  120,  107,  124,   98,  124,  124,   95,  124,
+      126,  126,   28,  126,   97,  126,  126,  126,  126,   27,
+      126,  126,  126,  126,  126,  126,  126,   86,  126,  126,
+      126,  126,  126,   12,    0,   58,   58,    0,   59,   55,
+       52,   56,   60,   53,   54,   57,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   51,   71,   75,    0,
+        0,   20,   20,   16,    0,    0,    0,    5,    0,    9,
+       24,    8,   85,  126,  126,  126,  108,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,   33,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,   37,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  122,  109,  126,   98,
 
-      124,  124,  102,  124,  124,  124,  124,  124,  113,  124,
-      124,  124,  124,   59,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   76,    0,   18,   17,   21,    0,
-        0,    0,    0,    0,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,   94,  124,   34,  124,  122,   44,
-      124,   78,  124,   82,  124,  101,   42,  124,  124,  112,
-      124,  124,  108,   96,  124,  124,  115,  124,  124,   45,
-      124,   39,  124,  124,  124,  124,   79,  124,   84,  124,
-       70,   65,   61,   66,   69,   63,   64,   62,   68,   67,
-       77,   19,   22,    0,    0,   24,   25,  124,   89,  124,
+      126,  126,   95,  126,  126,  126,  102,  126,  126,  126,
+      126,  126,  115,  126,  126,  126,  126,  126,   59,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   76,
+        0,   18,   17,   21,    0,    0,    0,    0,    0,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,   94,
+      126,   34,  126,  124,   44,  126,   78,  126,  126,   82,
+      126,  101,   42,  126,  126,  114,  126,  126,  110,   96,
+      126,  126,  117,  126,  126,   45,  126,   39,  126,  126,
+      126,  126,   79,  126,   84,  126,  126,   70,   65,   61,
+       66,   69,   63,   64,   62,   68,   67,   77,   19,   22,
 
-      124,  124,  124,  124,   87,   26,  124,  124,   35,  111,
-        3,   81,  104,  105,  124,  124,  124,   46,  124,  121,
-      124,  116,  124,  124,  124,  100,   83,  124,   23,    0,
-       99,  124,   90,  103,  124,  124,  124,   91,  124,  124,
-      124,  124,  124,  124,  124,  110,   30,    0,   25,  124,
-      123,  124,  124,  124,   88,  124,  109,   36,  118,   80,
-       92,  124,  124,   38,   93,  124,  117,  124,  119,    0
+        0,    0,   24,   25,  126,   89,  126,  126,  126,  126,
+      126,   87,   26,  126,  126,   35,  113,    3,  126,   81,
+      104,  107,  126,  126,  126,   46,  126,  123,  126,  118,
+      126,  126,  126,  100,   83,  105,  126,   23,    0,   99,
+      126,   90,  103,  126,  126,  126,   91,  106,  126,  126,
+      126,  126,  126,  126,  126,  112,   30,    0,   25,  126,
+      125,  126,  126,  126,   88,  126,  111,   36,  120,   80,
+       92,  126,  126,   38,   93,  126,  119,  126,  121,    0
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static const YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         4,    4,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -542,7 +536,7 @@
        65,   65,   65,   65,   65
     } ;
 
-static yyconst flex_int32_t yy_meta[66] =
+static const YY_CHAR yy_meta[66] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -553,97 +547,99 @@
         4,    1,    1,    1,    4
     } ;
 
-static yyconst flex_int16_t yy_base[376] =
+static const flex_int16_t yy_base[386] =
     {   0,
-        0,    0,   65,  130,  194,  258,  629,  630,  630,  630,
-      630,  630,   74,   68,   64,   68,   77,   72,  630,  630,
-      630,   53,   61,   58,   59,  570,   57,  581,   65,   57,
-        0,  587,   73,   74,  100,  106,  107,  104,  112,  113,
-      587,  630,  630,  630,  630,  615,  630,  117,  148,  162,
-      630,  630,  630,  630,  322,  630,  562,  561,  560,  611,
-      610,  609,  556,  555,  554,  165,  630,  630,  107,  154,
-      162,  157,  166,  193,  170,    0,  160,  571,  560,  558,
-      563,   24,   63,  153,  560,  173,  561,  148,  559,  572,
-      567,  570,  550,  564,  550,  184,  566,  180,  168,  106,
+        0,    0,   65,  130,  194,  258,  638,  639,  639,  639,
+      639,  639,   74,   68,   64,   68,   77,   72,  639,  639,
+      639,   53,   61,   58,   59,  579,   57,  590,   65,   65,
+        0,  596,   81,   74,  100,  106,  107,   69,  108,  108,
+      591,  595,  639,  639,  639,  639,  623,  639,  144,  148,
+      161,  639,  639,  639,  639,  322,  639,  570,  569,  568,
+      619,  618,  617,  564,  563,  562,  111,  639,  639,  151,
+      157,  161,  164,  168,  187,  172,    0,  121,  579,  568,
+      566,  571,   24,  166,  170,  568,  172,  569,  143,  567,
+      572,  579,  574,  577,  557,  571,  557,  183,  573,  159,
 
-        0,  560,    0,  545,  182,  550,  542,    0,  548,  538,
-      548,  556,  549,  539,  554,  539,  539,  552,  547,  542,
-      630,  228,  233,  237,  241,  243,  247,  630,  630,  630,
-      630,  630,  630,  250,  253,  257,  263,  266,  269,  272,
-      276,  279,  282,  630,  630,  630,  523,  522,  630,  573,
-      572,  571,  518,  517,  285,  288,  299,  291,  354,    0,
-      522,  535,  536,    0,  520,  518,  518,  528,  516,  530,
-      529,  530,  531,  519,  511,  509,  523,  511,  502,  522,
-      504,  516,    0,  509,  507,  515,  512,  498,  513,  515,
-      504,  506,    0,    0,  492,    0,  500,  506,  509,  508,
+      167,  182,    0,  567,    0,  552,  185,  557,  549,    0,
+      555,  545,  555,  563,  556,  546,  561,  546,  546,  559,
+      554,  554,  548,  639,  230,  236,  240,  244,  246,  264,
+      639,  639,  639,  639,  639,  639,  236,  257,  263,  266,
+      269,  272,  276,  279,  282,  285,  639,  639,  639,  529,
+      528,  639,  579,  578,  577,  524,  523,  288,  291,  315,
+      353,  357,    0,  528,  541,  542,    0,  526,  524,  524,
+      534,  522,  536,  535,  536,  537,  525,  517,  515,  529,
+      517,  508,  524,  527,  509,  521,    0,  514,  512,  520,
+      517,  503,  518,  520,  509,  511,    0,    0,  497,    0,
 
-      489,  500,    0,  501,  485,  498,  498,  490,    0,  477,
-      497,  479,  485,  249,  357,  364,  367,  370,  375,  378,
-      388,  396,  399,  402,  630,  470,  630,  521,  630,  520,
-      467,  421,  409,  431,  474,  478,  479,  485,  476,  483,
-      473,  478,  471,  479,    0,  450,  451,  439,    0,    0,
-      450,    0,  446,    0,  451,    0,    0,  439,  429,    0,
-      444,  421,    0,    0,  421,  430,    0,  422,  416,    0,
-      422,    0,  417,  398,  416,  411,    0,  397,    0,  402,
-      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
-      630,  630,  630,  431,  315,  630,  441,  380,    0,  390,
+      505,  511,  514,  513,  494,  505,    0,  506,  490,  503,
+      503,  495,    0,  482,  502,  484,  483,  489,  266,  360,
+      367,  370,  373,  378,  381,  391,  399,  402,  405,  639,
+      474,  639,  525,  639,  524,  471,  424,  412,  434,  478,
+      482,  483,  489,  480,  487,  477,  482,  475,  485,    0,
+      471,  455,  446,    0,    0,  454,    0,  453,  449,    0,
+      454,    0,    0,  442,  432,    0,  447,  424,    0,    0,
+      424,  433,    0,  425,  419,    0,  425,    0,  420,  401,
+      419,  414,    0,  400,    0,  402,  404,  639,  639,  639,
+      639,  639,  639,  639,  639,  639,  639,  639,  639,  639,
 
-      379,  382,  380,  381,    0,    0,  356,  371,    0,    0,
-        0,    0,    0,    0,  372,  350,  346,    0,  351,    0,
-      344,    0,  340,  317,  297,    0,    0,  292,  630,  454,
-        0,  289,    0,    0,  281,  280,  279,    0,  285,  265,
-      224,  225,  203,  205,  209,    0,    0,  464,  478,  202,
-        0,  186,  172,  163,    0,  151,    0,    0,    0,    0,
-        0,  140,  100,    0,    0,  109,    0,   61,    0,  630,
-      503,  507,  511,  514,   70
+      428,  294,  639,  444,  382,    0,  391,  381,  383,  379,
+      370,    0,    0,  358,  372,    0,    0,    0,  351,    0,
+        0,    0,  369,  350,  346,    0,  308,    0,  290,    0,
+      291,  298,  288,    0,    0,    0,  286,  639,  457,    0,
+      280,    0,    0,  272,  264,  268,    0,    0,  235,  217,
+      212,  223,  191,  196,  202,    0,    0,  467,  481,  195,
+        0,  186,  176,  132,    0,  131,    0,    0,    0,    0,
+        0,  105,   66,    0,    0,   57,    0,   50,    0,  639,
+      506,  510,  514,  517,   70
     } ;
 
-static yyconst flex_int16_t yy_def[376] =
+static const flex_int16_t yy_def[386] =
     {   0,
-      370,    1,  371,  371,  372,  372,  370,  370,  370,  370,
-      370,  370,  373,  374,  370,  370,  370,  370,  370,  370,
-      370,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  374,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
+      380,    1,  381,  381,  382,  382,  380,  380,  380,  380,
+      380,  380,  383,  384,  380,  380,  380,  380,  380,  380,
+      380,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  384,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
 
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
 
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  375,  375,  375,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
 
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  370,  370,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  370,  370,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  375,  375,    0,
-      370,  370,  370,  370,  370
+      380,  380,  380,  380,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  380,  380,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  380,  380,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,    0,
+      380,  380,  380,  380,  380
     } ;
 
-static yyconst flex_int16_t yy_nxt[696] =
+static const flex_int16_t yy_nxt[705] =
     {   0,
         8,    9,   10,    9,    9,   11,   12,    8,   13,   14,
         8,   15,   16,   16,    8,   17,   18,   18,   19,   20,
@@ -650,81 +646,82 @@
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
         8,    8,    8,   21,   22,   23,   24,   25,   26,   27,
        28,   29,   30,   31,   32,   33,   34,   31,   35,   36,
-       31,   37,   38,   39,   31,   40,   31,   41,   31,   42,
-        8,    8,    8,    8,    8,   43,   43,   44,   43,  166,
-       67,  167,   76,   46,   60,   60,   60,   60,   67,   68,
-       69,   69,   62,   70,   71,   71,   72,   75,   75,   75,
-       77,   72,   73,   73,   73,   79,   81,   83,   78,   86,
+       31,   37,   38,   39,   31,   40,   41,   42,   31,   43,
+        8,    8,    8,    8,    8,   44,   44,   45,   44,  169,
+       68,  170,   77,   47,   61,   61,   61,   61,   68,   69,
+       70,   70,   63,   71,   72,   72,   73,   76,   76,   76,
+       78,   73,   74,   74,   74,   80,   82,   84,   79,   87,
 
-       89,   84,  168,   92,   93,   87,   82,   96,   99,   80,
-       94,   97,  169,  369,   90,   98,  100,   91,  122,  123,
-      101,  122,  155,  155,  155,   43,   43,   43,   43,   43,
-       43,   43,   44,   43,   74,   63,   64,   65,   46,  102,
-      105,  109,  112,  194,  106,  113,  115,  103,  117,  124,
-      123,  107,  124,  195,  104,  110,  368,  114,  367,  108,
-      116,  111,  118,  122,  123,  119,  122,   67,   72,   73,
-       73,   73,  158,  158,  158,   67,   72,  157,  157,  157,
-       72,   73,   73,   73,   72,   75,   75,   75,  366,  365,
-       43,   43,   43,   43,   43,   48,   49,  160,   50,  170,
+       90,   85,  379,   91,  378,   88,   83,  114,  101,   81,
+      115,   94,   95,   68,   92,   98,  102,   93,   96,   99,
+      103,   68,  116,  100,  377,   44,   44,   44,   44,   44,
+       44,   44,   45,   44,   75,   64,   65,   66,   47,  104,
+      107,  111,  117,  119,  108,  125,  126,  105,  125,  127,
+      126,  109,  127,  376,  106,  112,  118,  120,  163,  110,
+      121,  113,  125,  126,  164,  125,  158,  158,  158,  375,
+      374,   73,   74,   74,   74,   73,  160,  160,  160,  161,
+      161,  161,   73,   74,   74,   74,   73,   76,   76,   76,
+       44,   44,   44,   44,   44,   49,   50,  180,   51,  194,
 
-       51,  364,  177,  161,  171,  172,  178,   52,  159,  159,
-      159,  156,   53,   54,  159,  159,  159,  159,  174,  186,
-      190,  192,  198,  363,  175,  193,   55,  191,  362,  122,
-      123,  187,  122,  199,  124,  123,  188,  124,  124,  123,
-      361,  124,  125,  126,  214,  125,  360,  214,  125,  126,
-      214,  125,  359,  214,   56,   57,   58,   59,   56,   48,
-       49,  358,   50,  357,   51,  215,  215,  215,  216,  216,
-      216,   52,  217,  217,  217,  356,   53,   54,  218,  218,
-      218,  219,  219,  219,  220,  220,  220,  221,  221,  221,
-       55,  222,  222,  222,  223,  223,  223,  224,  224,  224,
+       52,  181,  162,  162,  162,  171,  195,   53,  162,  162,
+      162,  162,   54,   55,  159,  172,  173,  177,  190,  198,
+      196,  174,  175,  178,  197,  202,   56,  373,  372,  199,
+      191,  125,  126,  371,  125,  192,  203,  127,  126,  370,
+      127,  127,  126,  369,  127,  128,  129,  219,  128,  368,
+      219,  220,  220,  220,   57,   58,   59,   60,   57,   49,
+       50,  367,   51,  366,   52,  128,  129,  219,  128,  365,
+      219,   53,  221,  221,  221,  364,   54,   55,  222,  222,
+      222,  223,  223,  223,  224,  224,  224,  225,  225,  225,
+       56,  226,  226,  226,  227,  227,  227,  228,  228,  228,
 
-      155,  155,  155,  232,  232,  232,  158,  158,  158,  232,
-      232,  232,  232,   72,  157,  157,  157,  355,   56,   57,
-       58,   59,   56,  125,  126,  354,  127,  353,  128,  233,
-      296,  296,  296,  352,  351,  129,  350,  130,  130,  347,
-      131,  132,  133,  346,  134,  135,  136,  137,  138,  139,
-      140,  141,  142,  143,  144,  345,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  234,  159,
-      159,  159,  215,  215,  215,  159,  159,  159,  159,  216,
-      216,  216,  217,  217,  217,  218,  218,  218,  344,  281,
-      219,  219,  219,  220,  220,  220,  282,  343,  342,  283,
+      229,  229,  229,  158,  158,  158,  237,  237,  237,  303,
+      303,  303,  237,  237,  237,  237,  363,  362,   57,   58,
+       59,   60,   57,  128,  129,  361,  130,  360,  131,   73,
+      160,  160,  160,  357,  356,  132,  355,  133,  133,  354,
+      134,  135,  136,  353,  137,  138,  139,  140,  141,  142,
+      143,  144,  145,  146,  147,  352,  148,  148,  148,  148,
+      148,  148,  148,  148,  148,  148,  148,  148,  161,  161,
+      161,  239,  162,  162,  162,  220,  220,  220,  162,  162,
+      162,  162,  221,  221,  221,  222,  222,  222,  223,  223,
+      223,  238,  288,  224,  224,  224,  225,  225,  225,  289,
 
-      341,  340,  284,  221,  221,  221,  339,  285,  338,  337,
-      286,  222,  222,  222,  223,  223,  223,  224,  224,  224,
-      287,  295,  295,  336,  296,  296,  296,  335,  288,  334,
-      333,  289,  332,  331,  290,  234,  232,  232,  232,  329,
-      328,  327,  232,  232,  232,  232,  297,  297,  297,  326,
-      325,  324,  297,  297,  297,  297,  297,  297,  297,  323,
-      322,  321,  297,  297,  297,  297,  348,  348,  320,  349,
-      349,  349,  319,  318,  317,  349,  349,  349,  349,  349,
-      349,  349,  316,  315,  314,  349,  349,  349,  349,  313,
-      312,  311,  310,  349,  349,  349,  309,  308,  330,  349,
+      351,  350,  290,  349,  348,  291,  226,  226,  226,  347,
+      292,  346,  345,  293,  227,  227,  227,  228,  228,  228,
+      229,  229,  229,  294,  302,  302,  344,  303,  303,  303,
+      343,  295,  342,  341,  296,  340,  338,  297,  239,  237,
+      237,  237,  337,  336,  335,  237,  237,  237,  237,  304,
+      304,  304,  334,  333,  332,  304,  304,  304,  304,  304,
+      304,  304,  331,  330,  329,  304,  304,  304,  304,  358,
+      358,  328,  359,  359,  359,  327,  326,  325,  359,  359,
+      359,  359,  359,  359,  359,  324,  323,  322,  359,  359,
+      359,  359,  321,  320,  319,  318,  359,  359,  359,  317,
 
-      349,  349,  349,   45,   45,   45,   45,   47,   47,   47,
-       47,   61,   61,   61,   66,  307,   66,   66,  306,  305,
-      304,  303,  302,  301,  300,  299,  298,  294,  293,  292,
-      291,  280,  279,  278,  277,  276,  275,  274,  273,  272,
-      271,  270,  269,  268,  267,  266,  265,  264,  263,  262,
-      261,  260,  259,  258,  257,  256,  255,  254,  253,  252,
-      251,  250,  249,  248,  247,  246,  245,  244,  243,  242,
-      241,  240,  239,  238,  237,  236,  235,  231,  230,  229,
-      228,  227,  226,  225,  213,  212,  211,  210,  209,  208,
-      207,  206,  205,  204,  203,  202,  201,  200,  197,  196,
+      316,  339,  359,  359,  359,  359,   46,   46,   46,   46,
+       48,   48,   48,   48,   62,   62,   62,   67,  315,   67,
+       67,  314,  313,  312,  311,  310,  309,  308,  307,  306,
+      305,  301,  300,  299,  298,  287,  286,  285,  284,  283,
+      282,  281,  280,  279,  278,  277,  276,  275,  274,  273,
+      272,  271,  270,  269,  268,  267,  266,  265,  264,  263,
+      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
+      242,  241,  240,  236,  235,  234,  233,  232,  231,  230,
+      218,  217,  216,  215,  214,  213,  212,  211,  210,  209,
 
-      189,  185,  184,  183,  182,  181,  180,  179,  176,  173,
-      165,  164,  163,  162,  154,  153,  152,  151,  150,  149,
-      148,  147,  146,  121,  120,   95,   88,   85,  370,    7,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370
+      208,  207,  206,  205,  204,  201,  200,  193,  189,  188,
+      187,  186,  185,  184,  183,  182,  179,  176,  168,  167,
+      166,  165,  157,  156,  155,  154,  153,  152,  151,  150,
+      149,  124,  123,  122,   97,   89,   86,  380,    7,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
 
+      380,  380,  380,  380
     } ;
 
-static yyconst flex_int16_t yy_chk[696] =
+static const flex_int16_t yy_chk[705] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -732,81 +729,82 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    3,    3,    3,    3,   82,
-       14,   82,  375,    3,   13,   13,   13,   13,   14,   15,
+        1,    1,    1,    1,    1,    3,    3,    3,    3,   83,
+       14,   83,  385,    3,   13,   13,   13,   13,   14,   15,
        15,   15,   13,   16,   16,   16,   18,   18,   18,   18,
        22,   17,   17,   17,   17,   23,   24,   25,   22,   27,
 
-       29,   25,   83,   30,   30,   27,   24,   33,   34,   23,
-       30,   33,   83,  368,   29,   33,   34,   29,   48,   48,
-       34,   48,   69,   69,   69,    3,    3,    3,    3,    3,
+       29,   25,  378,   29,  376,   27,   24,   38,   34,   23,
+       38,   30,   30,   67,   29,   33,   34,   29,   30,   33,
+       34,   67,   38,   33,  373,    3,    3,    3,    3,    3,
         4,    4,    4,    4,   17,   13,   13,   13,    4,   35,
-       36,   37,   38,  100,   36,   38,   39,   35,   40,   49,
-       49,   36,   49,  100,   35,   37,  366,   38,  363,   36,
-       39,   37,   40,   50,   50,   40,   50,   66,   70,   70,
-       70,   70,   72,   72,   72,   66,   71,   71,   71,   71,
-       73,   73,   73,   73,   75,   75,   75,   75,  362,  356,
-        4,    4,    4,    4,    4,    5,    5,   77,    5,   84,
+       36,   37,   39,   40,   36,   49,   49,   35,   49,   50,
+       50,   36,   50,  372,   35,   37,   39,   40,   78,   36,
+       40,   37,   51,   51,   78,   51,   70,   70,   70,  366,
+      364,   71,   71,   71,   71,   72,   72,   72,   72,   73,
+       73,   73,   74,   74,   74,   74,   76,   76,   76,   76,
+        4,    4,    4,    4,    4,    5,    5,   89,    5,  100,
 
-        5,  354,   88,   77,   84,   84,   88,    5,   74,   74,
-       74,   70,    5,    5,   74,   74,   74,   74,   86,   96,
-       98,   99,  105,  353,   86,   99,    5,   98,  352,  122,
-      122,   96,  122,  105,  123,  123,   96,  123,  124,  124,
-      350,  124,  125,  125,  126,  125,  345,  126,  127,  127,
-      214,  127,  344,  214,    5,    5,    5,    5,    5,    6,
-        6,  343,    6,  342,    6,  134,  134,  134,  135,  135,
-      135,    6,  136,  136,  136,  341,    6,    6,  137,  137,
-      137,  138,  138,  138,  139,  139,  139,  140,  140,  140,
-        6,  141,  141,  141,  142,  142,  142,  143,  143,  143,
+        5,   89,   75,   75,   75,   84,  100,    5,   75,   75,
+       75,   75,    5,    5,   71,   84,   85,   87,   98,  102,
+      101,   85,   85,   87,  101,  107,    5,  363,  362,  102,
+       98,  125,  125,  360,  125,   98,  107,  126,  126,  355,
+      126,  127,  127,  354,  127,  128,  128,  129,  128,  353,
+      129,  137,  137,  137,    5,    5,    5,    5,    5,    6,
+        6,  352,    6,  351,    6,  130,  130,  219,  130,  350,
+      219,    6,  138,  138,  138,  349,    6,    6,  139,  139,
+      139,  140,  140,  140,  141,  141,  141,  142,  142,  142,
+        6,  143,  143,  143,  144,  144,  144,  145,  145,  145,
 
-      155,  155,  155,  156,  156,  156,  158,  158,  158,  156,
-      156,  156,  156,  157,  157,  157,  157,  340,    6,    6,
-        6,    6,    6,   55,   55,  339,   55,  337,   55,  158,
-      295,  295,  295,  336,  335,   55,  332,   55,   55,  328,
-       55,   55,   55,  325,   55,   55,   55,   55,   55,   55,
-       55,   55,   55,   55,   55,  324,   55,   55,   55,   55,
-       55,   55,   55,   55,   55,   55,   55,   55,  159,  159,
-      159,  159,  215,  215,  215,  159,  159,  159,  159,  216,
-      216,  216,  217,  217,  217,  218,  218,  218,  323,  215,
-      219,  219,  219,  220,  220,  220,  216,  321,  319,  217,
+      146,  146,  146,  158,  158,  158,  159,  159,  159,  302,
+      302,  302,  159,  159,  159,  159,  346,  345,    6,    6,
+        6,    6,    6,   56,   56,  344,   56,  341,   56,  160,
+      160,  160,  160,  337,  333,   56,  332,   56,   56,  331,
+       56,   56,   56,  329,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,  327,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,  161,  161,
+      161,  162,  162,  162,  162,  220,  220,  220,  162,  162,
+      162,  162,  221,  221,  221,  222,  222,  222,  223,  223,
+      223,  161,  220,  224,  224,  224,  225,  225,  225,  221,
 
-      317,  316,  218,  221,  221,  221,  315,  219,  308,  307,
-      220,  222,  222,  222,  223,  223,  223,  224,  224,  224,
-      221,  233,  233,  304,  233,  233,  233,  303,  222,  302,
-      301,  223,  300,  298,  224,  232,  232,  232,  232,  294,
-      280,  278,  232,  232,  232,  232,  234,  234,  234,  276,
-      275,  274,  234,  234,  234,  234,  297,  297,  297,  273,
-      271,  269,  297,  297,  297,  297,  330,  330,  268,  330,
-      330,  330,  266,  265,  262,  330,  330,  330,  330,  348,
-      348,  348,  261,  259,  258,  348,  348,  348,  348,  255,
-      253,  251,  248,  349,  349,  349,  247,  246,  297,  349,
+      325,  324,  222,  323,  319,  223,  226,  226,  226,  315,
+      224,  314,  311,  225,  227,  227,  227,  228,  228,  228,
+      229,  229,  229,  226,  238,  238,  310,  238,  238,  238,
+      309,  227,  308,  307,  228,  305,  301,  229,  237,  237,
+      237,  237,  287,  286,  284,  237,  237,  237,  237,  239,
+      239,  239,  282,  281,  280,  239,  239,  239,  239,  304,
+      304,  304,  279,  277,  275,  304,  304,  304,  304,  339,
+      339,  274,  339,  339,  339,  272,  271,  268,  339,  339,
+      339,  339,  358,  358,  358,  267,  265,  264,  358,  358,
+      358,  358,  261,  259,  258,  256,  359,  359,  359,  253,
 
-      349,  349,  349,  371,  371,  371,  371,  372,  372,  372,
-      372,  373,  373,  373,  374,  244,  374,  374,  243,  242,
-      241,  240,  239,  238,  237,  236,  235,  231,  230,  228,
-      226,  213,  212,  211,  210,  208,  207,  206,  205,  204,
-      202,  201,  200,  199,  198,  197,  195,  192,  191,  190,
-      189,  188,  187,  186,  185,  184,  182,  181,  180,  179,
-      178,  177,  176,  175,  174,  173,  172,  171,  170,  169,
-      168,  167,  166,  165,  163,  162,  161,  154,  153,  152,
-      151,  150,  148,  147,  120,  119,  118,  117,  116,  115,
-      114,  113,  112,  111,  110,  109,  107,  106,  104,  102,
+      252,  304,  359,  359,  359,  359,  381,  381,  381,  381,
+      382,  382,  382,  382,  383,  383,  383,  384,  251,  384,
+      384,  249,  248,  247,  246,  245,  244,  243,  242,  241,
+      240,  236,  235,  233,  231,  218,  217,  216,  215,  214,
+      212,  211,  210,  209,  208,  206,  205,  204,  203,  202,
+      201,  199,  196,  195,  194,  193,  192,  191,  190,  189,
+      188,  186,  185,  184,  183,  182,  181,  180,  179,  178,
+      177,  176,  175,  174,  173,  172,  171,  170,  169,  168,
+      166,  165,  164,  157,  156,  155,  154,  153,  151,  150,
+      123,  122,  121,  120,  119,  118,  117,  116,  115,  114,
 
-       97,   95,   94,   93,   92,   91,   90,   89,   87,   85,
-       81,   80,   79,   78,   65,   64,   63,   62,   61,   60,
-       59,   58,   57,   46,   41,   32,   28,   26,    7,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370
+      113,  112,  111,  109,  108,  106,  104,   99,   97,   96,
+       95,   94,   93,   92,   91,   90,   88,   86,   82,   81,
+       80,   79,   66,   65,   64,   63,   62,   61,   60,   59,
+       58,   47,   42,   41,   32,   28,   26,    7,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
 
+      380,  380,  380,  380
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[127] =
+static const flex_int32_t yy_rule_can_match_eol[129] =
     {   0,
 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -814,7 +812,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -822,22 +820,22 @@
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[126] =
+static const flex_int16_t yy_rule_linenum[128] =
     {   0,
-      170,  171,  172,  173,  174,  175,  176,  178,  180,  182,
-      184,  185,  186,  187,  188,  193,  194,  195,  196,  197,
-      198,  199,  200,  202,  204,  206,  207,  208,  209,  211,
-      212,  213,  215,  216,  217,  219,  220,  222,  224,  225,
-      226,  228,  229,  231,  232,  233,  235,  238,  240,  241,
-      243,  244,  245,  246,  247,  248,  249,  251,  252,  254,
-      256,  257,  258,  259,  260,  261,  262,  263,  264,  267,
-      269,  270,  271,  273,  274,  275,  276,  279,  280,  281,
-      283,  284,  285,  286,  287,  288,  289,  291,  292,  293,
-      294,  296,  298,  300,  302,  304,  306,  307,  309,  311,
+      171,  172,  173,  174,  175,  176,  177,  179,  181,  183,
+      185,  186,  187,  188,  189,  194,  195,  196,  197,  198,
+      199,  200,  201,  203,  205,  207,  208,  209,  210,  212,
+      213,  214,  216,  217,  218,  220,  221,  223,  225,  226,
+      227,  229,  230,  232,  233,  234,  236,  239,  241,  242,
+      244,  245,  246,  247,  248,  249,  250,  252,  253,  255,
+      257,  258,  259,  260,  261,  262,  263,  264,  265,  268,
+      270,  271,  272,  274,  275,  276,  277,  280,  281,  282,
+      284,  285,  286,  287,  288,  289,  290,  292,  293,  294,
+      295,  297,  299,  301,  303,  305,  307,  308,  310,  312,
 
-      312,  313,  314,  316,  318,  319,  320,  322,  324,  326,
-      327,  328,  329,  330,  332,  334,  336,  337,  339,  341,
-      343,  345,  347,  349,  350
+      313,  314,  315,  317,  318,  319,  321,  322,  323,  325,
+      327,  329,  330,  331,  332,  333,  335,  337,  339,  340,
+      342,  344,  346,  348,  350,  352,  353
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -849,9 +847,9 @@
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "lexer.l"
-/*511:*/
-#line 3 "lexer.l"
-	#line 10275 "format.w"
+#line 2 "lexer.l"
+	/*519:*/
+	#line 10725 "format.w"
 	
 #include "hibasetypes.h"
 #include "hierror.h"
@@ -858,7 +856,7 @@
 #include "hiformat.h"
 #include "hiput.h"
 
-	/*425:*/
+	/*433:*/
 #ifdef DEBUG
 #define  YYDEBUG 1
 extern int yydebug;
@@ -865,7 +863,7 @@
 #else
 #define YYDEBUG 0
 #endif
-	/*:425*/
+	/*:433*/
 #include "hiparser.h"
 
 	/*22:*/
@@ -907,7 +905,7 @@
 
 float64_t xtof(char*x)
 {
-	#line 1369 "format.w"
+	#line 1379 "format.w"
 	int sign,digits,exp;
 	uint64_t mantissa= 0;
 	DBG(DBGFLOAT,"converting %s:\n",x);
@@ -987,25 +985,27 @@
 	}
 	/*:61*/
 int yywrap(void){
-	#line 10286 "format.w"
+	#line 10736 "format.w"
 	return 1;}
 #ifdef _MSC_VER
 #pragma  warning( disable : 4267)
 #endif
 
+#line 994 "lexer.c"
 #define YY_NO_UNISTD_H 1
 #define YY_NO_INPUT 1
-/*23:*/
-/*:23*/	/*32:*/
+#line 152 "lexer.l"
+	/*23:*/
+	/*:23*/	/*32:*/
 
-/*:32*/	/*39:*/
-/*:39*/	/*41:*/
-/*:41*/	/*43:*/
-/*:43*/	/*45:*/
-/*:45*/	/*149:*/
+	/*:32*/	/*39:*/
+	/*:39*/	/*41:*/
+	/*:41*/	/*43:*/
+	/*:43*/	/*45:*/
+	/*:45*/	/*149:*/
 
-/*:149*/
-#line 1009 "lexer.c"
+	/*:149*/
+#line 1008 "lexer.c"
 
 #define INITIAL 0
 #define STR 1
@@ -1031,7 +1031,7 @@
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals (void );
+static int yy_init_globals ( void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1041,31 +1041,31 @@
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy (void );
+int yylex_destroy ( void );
 
-int yyget_debug (void );
+int yyget_debug ( void );
 
-void yyset_debug (int debug_flag  );
+void yyset_debug ( int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra (void );
+YY_EXTRA_TYPE yyget_extra ( void );
 
-void yyset_extra (YY_EXTRA_TYPE user_defined  );
+void yyset_extra ( YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in (void );
+FILE *yyget_in ( void );
 
-void yyset_in  (FILE * in_str  );
+void yyset_in  ( FILE * _in_str  );
 
-FILE *yyget_out (void );
+FILE *yyget_out ( void );
 
-void yyset_out  (FILE * out_str  );
+void yyset_out  ( FILE * _out_str  );
 
-yy_size_t yyget_leng (void );
+			int yyget_leng ( void );
 
-char *yyget_text (void );
+char *yyget_text ( void );
 
-int yyget_lineno (void );
+int yyget_lineno ( void );
 
-void yyset_lineno (int line_number  );
+void yyset_lineno ( int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1076,34 +1076,35 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap (void );
+extern "C" int yywrap ( void );
 #else
-extern int yywrap (void );
+extern int yywrap ( void );
 #endif
 #endif
 
 /* %not-for-header */
-
+#ifndef YY_NO_UNPUT
+    
+#endif
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy ( char *, const char *, int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen ( const char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
-
 #ifdef __cplusplus
-static int yyinput (void );
+static int yyinput ( void );
 #else
-static int input (void );
+static int input ( void );
 #endif
 /* %ok-for-header */
 
@@ -1116,15 +1117,20 @@
         static int yy_start_stack_depth = 0;
         static int *yy_start_stack = NULL;
     
-    static void yy_push_state (int new_state );
+    static void yy_push_state ( int _new_state );
     
-    static void yy_pop_state (void );
+    static void yy_pop_state ( void );
     
 /* %endif */
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1133,7 +1139,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1148,7 +1154,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1161,7 +1167,7 @@
 	else \
 		{ \
 		errno=0; \
-		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1202,11 +1208,9 @@
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
-
 /* %ok-for-header */
 
 /* %not-for-header */
-
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1237,7 +1241,7 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1245,22 +1249,14 @@
 	YY_USER_ACTION
 
 /* %not-for-header */
-
 /** The main scanner function which does all the work.
  */
 YY_DECL
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	int yy_act;
     
-/* %% [7.0] user's declarations go here */
-#line 167 "lexer.l"
-
-
-	/*3:*/
-#line 1263 "lexer.c"
-
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -1289,13 +1285,21 @@
 		if ( ! YY_CURRENT_BUFFER ) {
 			yyensure_buffer_stack ();
 			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer(yyin,YY_BUF_SIZE );
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 		}
 
-		yy_load_buffer_state( );
+		yy_load_buffer_state(  );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+/* %% [7.0] user's declarations go here */
+#line 168 "lexer.l"
+
+
+	/*3:*/
+#line 1300 "lexer.c"
+
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 /* %% [8.0] yymore()-related code goes here */
 		yy_cp = (yy_c_buf_p);
@@ -1313,7 +1317,7 @@
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
 			if ( yy_accept[yy_current_state] )
 				{
 				(yy_last_accepting_state) = yy_current_state;
@@ -1322,13 +1326,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 371 )
-					yy_c = yy_meta[(unsigned int) yy_c];
+				if ( yy_current_state >= 381 )
+					yy_c = yy_meta[yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 370 );
+		while ( yy_current_state != 380 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1345,7 +1349,7 @@
 			int yyl;
 			for ( yyl = 0; yyl < yyleng; ++yyl )
 				if ( yytext[yyl] == '\n' )
-					   
+					
     yylineno++;
 ;
 			}
@@ -1357,13 +1361,13 @@
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 126 )
+			else if ( yy_act < 128 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
 				         (long)yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 126 )
+			else if ( yy_act == 128 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         yytext );
-			else if ( yy_act == 127 )
+			else if ( yy_act == 129 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1381,84 +1385,84 @@
 
 case 1:
 YY_RULE_SETUP
-#line 170 "lexer.l"
+#line 171 "lexer.l"
 SCAN_START;return START;
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 171 "lexer.l"
+#line 172 "lexer.l"
 SCAN_END;return END;
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 172 "lexer.l"
+#line 173 "lexer.l"
 return GLYPH;
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 173 "lexer.l"
+#line 174 "lexer.l"
 SCAN_UDEC(yytext);return UNSIGNED;
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 174 "lexer.l"
+#line 175 "lexer.l"
 SCAN_UDEC(yytext+1);return REFERENCE;
 	YY_BREAK
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
-#line 175 "lexer.l"
+#line 176 "lexer.l"
 ;
 	YY_BREAK
 case 7:
 /* rule 7 can match eol */
 YY_RULE_SETUP
-#line 176 "lexer.l"
+#line 177 "lexer.l"
 ;
 	YY_BREAK
 /*:3*/	/*24:*/
 case 8:
 YY_RULE_SETUP
-#line 178 "lexer.l"
+#line 179 "lexer.l"
 SCAN_HEX(yytext+2);return UNSIGNED;
 	YY_BREAK
 /*:24*/	/*27:*/
 case 9:
 YY_RULE_SETUP
-#line 180 "lexer.l"
+#line 181 "lexer.l"
 SCAN_DEC(yytext);return SIGNED;
 	YY_BREAK
 /*:27*/	/*34:*/
 case 10:
 YY_RULE_SETUP
-#line 182 "lexer.l"
+#line 183 "lexer.l"
 STR_START;BEGIN(STR);
 	YY_BREAK
 
 case 11:
 YY_RULE_SETUP
-#line 184 "lexer.l"
+#line 185 "lexer.l"
 STR_END;SCAN_STR;BEGIN(INITIAL);return STRING;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 185 "lexer.l"
+#line 186 "lexer.l"
 STR_ADD('\'');
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 186 "lexer.l"
+#line 187 "lexer.l"
 STR_ADD(yytext[0]);
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 187 "lexer.l"
+#line 188 "lexer.l"
 RNG("String character",yytext[0],0x20,0x7E);
 	YY_BREAK
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-#line 188 "lexer.l"
+#line 189 "lexer.l"
 QUIT("Unterminated String in line %d",yylineno);
 	YY_BREAK
 
@@ -1465,328 +1469,328 @@
 /*:34*/	/*48:*/
 case 16:
 YY_RULE_SETUP
-#line 193 "lexer.l"
+#line 194 "lexer.l"
 STR_START;STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 194 "lexer.l"
+#line 195 "lexer.l"
 SCAN_UTF8_1(yytext+1);return CHARCODE;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 195 "lexer.l"
+#line 196 "lexer.l"
 STR_START;STR_PUT(yytext[1]);STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 196 "lexer.l"
+#line 197 "lexer.l"
 STR_START;STR_PUT('\'');STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 20:
 /* rule 20 can match eol */
 YY_RULE_SETUP
-#line 197 "lexer.l"
+#line 198 "lexer.l"
 SCAN_UTF8_1(yytext+1);return CHARCODE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 198 "lexer.l"
+#line 199 "lexer.l"
 SCAN_UTF8_2(yytext+1);return CHARCODE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 199 "lexer.l"
+#line 200 "lexer.l"
 SCAN_UTF8_3(yytext+1);return CHARCODE;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 200 "lexer.l"
+#line 201 "lexer.l"
 SCAN_UTF8_4(yytext+1);return CHARCODE;
 	YY_BREAK
 /*:48*/	/*55:*/
 case 24:
 YY_RULE_SETUP
-#line 202 "lexer.l"
+#line 203 "lexer.l"
 SCAN_DECFLOAT;return FPNUM;
 	YY_BREAK
 /*:55*/	/*59:*/
 case 25:
 YY_RULE_SETUP
-#line 204 "lexer.l"
+#line 205 "lexer.l"
 SCAN_HEXFLOAT;return FPNUM;
 	YY_BREAK
 /*:59*/	/*80:*/
 case 26:
 YY_RULE_SETUP
-#line 206 "lexer.l"
+#line 207 "lexer.l"
 return DIMEN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 207 "lexer.l"
+#line 208 "lexer.l"
 return PT;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 208 "lexer.l"
+#line 209 "lexer.l"
 return MM;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 209 "lexer.l"
+#line 210 "lexer.l"
 return INCH;
 	YY_BREAK
 /*:80*/	/*88:*/
 case 30:
 YY_RULE_SETUP
-#line 211 "lexer.l"
+#line 212 "lexer.l"
 return XDIMEN;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 212 "lexer.l"
+#line 213 "lexer.l"
 return H;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 213 "lexer.l"
+#line 214 "lexer.l"
 return V;
 	YY_BREAK
 /*:88*/	/*99:*/
 case 33:
 YY_RULE_SETUP
-#line 215 "lexer.l"
+#line 216 "lexer.l"
 return FIL;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 216 "lexer.l"
+#line 217 "lexer.l"
 return FILL;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 217 "lexer.l"
+#line 218 "lexer.l"
 return FILLL;
 	YY_BREAK
 /*:99*/	/*103:*/
 case 36:
 YY_RULE_SETUP
-#line 219 "lexer.l"
+#line 220 "lexer.l"
 return PENALTY;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 220 "lexer.l"
+#line 221 "lexer.l"
 return INTEGER;
 	YY_BREAK
 /*:103*/	/*109:*/
 case 38:
 YY_RULE_SETUP
-#line 222 "lexer.l"
+#line 223 "lexer.l"
 return LANGUAGE;
 	YY_BREAK
 /*:109*/	/*115:*/
 case 39:
 YY_RULE_SETUP
-#line 224 "lexer.l"
+#line 225 "lexer.l"
 return RULE;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 225 "lexer.l"
+#line 226 "lexer.l"
 return RUNNING;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 226 "lexer.l"
+#line 227 "lexer.l"
 return RUNNING;
 	YY_BREAK
 /*:115*/	/*124:*/
 case 42:
 YY_RULE_SETUP
-#line 228 "lexer.l"
+#line 229 "lexer.l"
 return KERN;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 229 "lexer.l"
+#line 230 "lexer.l"
 return EXPLICIT;
 	YY_BREAK
 /*:124*/	/*133:*/
 case 44:
 YY_RULE_SETUP
-#line 231 "lexer.l"
+#line 232 "lexer.l"
 return GLUE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 232 "lexer.l"
+#line 233 "lexer.l"
 return PLUS;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 233 "lexer.l"
+#line 234 "lexer.l"
 return MINUS;
 	YY_BREAK
 /*:133*/	/*151:*/
 case 47:
 YY_RULE_SETUP
-#line 235 "lexer.l"
+#line 236 "lexer.l"
 SCAN_TXT_START;return TXT_START;
 	YY_BREAK
 
 case 48:
 YY_RULE_SETUP
-#line 238 "lexer.l"
+#line 239 "lexer.l"
 SCAN_TXT_END;return TXT_END;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 240 "lexer.l"
+#line 241 "lexer.l"
 SCAN_START;return START;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 241 "lexer.l"
+#line 242 "lexer.l"
 QUIT("> not allowed in text mode");
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 243 "lexer.l"
+#line 244 "lexer.l"
 yylval.u= '\\';return TXT_CC;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 244 "lexer.l"
+#line 245 "lexer.l"
 yylval.u= '"';return TXT_CC;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 245 "lexer.l"
+#line 246 "lexer.l"
 yylval.u= '<';return TXT_CC;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 246 "lexer.l"
+#line 247 "lexer.l"
 yylval.u= '>';return TXT_CC;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 247 "lexer.l"
+#line 248 "lexer.l"
 yylval.u= ' ';return TXT_CC;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 248 "lexer.l"
+#line 249 "lexer.l"
 yylval.u= '-';return TXT_CC;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 249 "lexer.l"
+#line 250 "lexer.l"
 return TXT_IGNORE;
 	YY_BREAK
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
-#line 251 "lexer.l"
+#line 252 "lexer.l"
 return TXT_FONT_GLUE;
 	YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 252 "lexer.l"
+#line 253 "lexer.l"
 ;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 254 "lexer.l"
+#line 255 "lexer.l"
 yylval.u= yytext[1]-'0';return TXT_FONT;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 256 "lexer.l"
+#line 257 "lexer.l"
 SCAN_REF(font_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 257 "lexer.l"
+#line 258 "lexer.l"
 SCAN_REF(penalty_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 258 "lexer.l"
+#line 259 "lexer.l"
 SCAN_REF(kern_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 259 "lexer.l"
+#line 260 "lexer.l"
 SCAN_REF(ligature_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 260 "lexer.l"
+#line 261 "lexer.l"
 SCAN_REF(disc_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 261 "lexer.l"
+#line 262 "lexer.l"
 SCAN_REF(glue_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 262 "lexer.l"
+#line 263 "lexer.l"
 SCAN_REF(language_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 263 "lexer.l"
+#line 264 "lexer.l"
 SCAN_REF(rule_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 264 "lexer.l"
+#line 265 "lexer.l"
 SCAN_REF(image_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 267 "lexer.l"
+#line 268 "lexer.l"
 SCAN_UDEC(yytext+2);return TXT_CC;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 269 "lexer.l"
+#line 270 "lexer.l"
 yylval.u= yytext[1]-'a';return TXT_LOCAL;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 270 "lexer.l"
+#line 271 "lexer.l"
 return TXT_FONT_GLUE;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 271 "lexer.l"
+#line 272 "lexer.l"
 return TXT_FONT_HYPHEN;
 	YY_BREAK
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
-#line 273 "lexer.l"
+#line 274 "lexer.l"
 SCAN_UTF8_1(yytext);return TXT_CC;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 274 "lexer.l"
+#line 275 "lexer.l"
 SCAN_UTF8_2(yytext);return TXT_CC;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 275 "lexer.l"
+#line 276 "lexer.l"
 SCAN_UTF8_3(yytext);return TXT_CC;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 276 "lexer.l"
+#line 277 "lexer.l"
 SCAN_UTF8_4(yytext);return TXT_CC;
 	YY_BREAK
 
@@ -1793,274 +1797,284 @@
 /*:151*/	/*162:*/
 case 78:
 YY_RULE_SETUP
-#line 279 "lexer.l"
+#line 280 "lexer.l"
 return HBOX;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 280 "lexer.l"
+#line 281 "lexer.l"
 return VBOX;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 281 "lexer.l"
+#line 282 "lexer.l"
 return SHIFTED;
 	YY_BREAK
 /*:162*/	/*170:*/
 case 81:
 YY_RULE_SETUP
-#line 283 "lexer.l"
+#line 284 "lexer.l"
 return HPACK;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 284 "lexer.l"
+#line 285 "lexer.l"
 return HSET;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 285 "lexer.l"
+#line 286 "lexer.l"
 return VPACK;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 286 "lexer.l"
+#line 287 "lexer.l"
 return VSET;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 287 "lexer.l"
+#line 288 "lexer.l"
 return ADD;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 288 "lexer.l"
+#line 289 "lexer.l"
 return TO;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 289 "lexer.l"
+#line 290 "lexer.l"
 return DEPTH;
 	YY_BREAK
 /*:170*/	/*175:*/
 case 88:
 YY_RULE_SETUP
-#line 291 "lexer.l"
+#line 292 "lexer.l"
 return LEADERS;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 292 "lexer.l"
+#line 293 "lexer.l"
 return ALIGN;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 293 "lexer.l"
+#line 294 "lexer.l"
 return CENTER;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 294 "lexer.l"
+#line 295 "lexer.l"
 return EXPAND;
 	YY_BREAK
 /*:175*/	/*182:*/
 case 92:
 YY_RULE_SETUP
-#line 296 "lexer.l"
+#line 297 "lexer.l"
 return BASELINE;
 	YY_BREAK
 /*:182*/	/*189:*/
 case 93:
 YY_RULE_SETUP
-#line 298 "lexer.l"
+#line 299 "lexer.l"
 return LIGATURE;
 	YY_BREAK
 /*:189*/	/*197:*/
 case 94:
 YY_RULE_SETUP
-#line 300 "lexer.l"
+#line 301 "lexer.l"
 return DISC;
 	YY_BREAK
 /*:197*/	/*205:*/
 case 95:
 YY_RULE_SETUP
-#line 302 "lexer.l"
+#line 303 "lexer.l"
 return PAR;
 	YY_BREAK
 /*:205*/	/*210:*/
 case 96:
 YY_RULE_SETUP
-#line 304 "lexer.l"
+#line 305 "lexer.l"
 return MATH;
 	YY_BREAK
 /*:210*/	/*215:*/
 case 97:
 YY_RULE_SETUP
-#line 306 "lexer.l"
+#line 307 "lexer.l"
 return ON;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 307 "lexer.l"
+#line 308 "lexer.l"
 return OFF;
 	YY_BREAK
 /*:215*/	/*219:*/
 case 99:
 YY_RULE_SETUP
-#line 309 "lexer.l"
+#line 310 "lexer.l"
 return ADJUST;
 	YY_BREAK
 /*:219*/	/*223:*/
 case 100:
 YY_RULE_SETUP
-#line 311 "lexer.l"
+#line 312 "lexer.l"
 return TABLE;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 312 "lexer.l"
+#line 313 "lexer.l"
 return ITEM;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 313 "lexer.l"
+#line 314 "lexer.l"
 return ITEM;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 314 "lexer.l"
+#line 315 "lexer.l"
 return ITEM;
 	YY_BREAK
 /*:223*/	/*230:*/
 case 104:
 YY_RULE_SETUP
-#line 316 "lexer.l"
+#line 317 "lexer.l"
 return IMAGE;
 	YY_BREAK
-/*:230*/	/*247:*/
 case 105:
 YY_RULE_SETUP
 #line 318 "lexer.l"
-return LABEL;
+return WIDTH;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 319 "lexer.l"
-return BOT;
+return HEIGHT;
 	YY_BREAK
+/*:230*/	/*255:*/
 case 107:
 YY_RULE_SETUP
-#line 320 "lexer.l"
-return MID;
+#line 321 "lexer.l"
+return LABEL;
 	YY_BREAK
-/*:247*/	/*261:*/
 case 108:
 YY_RULE_SETUP
 #line 322 "lexer.l"
-return LINK;
+return BOT;
 	YY_BREAK
-/*:261*/	/*271:*/
 case 109:
 YY_RULE_SETUP
-#line 324 "lexer.l"
-return OUTLINE;
+#line 323 "lexer.l"
+return MID;
 	YY_BREAK
-/*:271*/	/*278:*/
+/*:255*/	/*269:*/
 case 110:
 YY_RULE_SETUP
-#line 326 "lexer.l"
-if(section_no==1)return STREAMDEF;else return STREAM;
+#line 325 "lexer.l"
+return LINK;
 	YY_BREAK
+/*:269*/	/*279:*/
 case 111:
 YY_RULE_SETUP
 #line 327 "lexer.l"
-return FIRST;
+return OUTLINE;
 	YY_BREAK
+/*:279*/	/*286:*/
 case 112:
 YY_RULE_SETUP
-#line 328 "lexer.l"
-return LAST;
+#line 329 "lexer.l"
+if(section_no==1)return STREAMDEF;else return STREAM;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 329 "lexer.l"
-return TOP;
+#line 330 "lexer.l"
+return FIRST;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 330 "lexer.l"
-return NOREFERENCE;
+#line 331 "lexer.l"
+return LAST;
 	YY_BREAK
-/*:278*/	/*288:*/
 case 115:
 YY_RULE_SETUP
 #line 332 "lexer.l"
-return PAGE;
+return TOP;
 	YY_BREAK
-/*:288*/	/*296:*/
 case 116:
 YY_RULE_SETUP
-#line 334 "lexer.l"
-return RANGE;
+#line 333 "lexer.l"
+return NOREFERENCE;
 	YY_BREAK
-/*:296*/	/*323:*/
+/*:286*/	/*296:*/
 case 117:
 YY_RULE_SETUP
-#line 336 "lexer.l"
-return DIRECTORY;
+#line 335 "lexer.l"
+return PAGE;
 	YY_BREAK
+/*:296*/	/*304:*/
 case 118:
 YY_RULE_SETUP
 #line 337 "lexer.l"
-return SECTION;
+return RANGE;
 	YY_BREAK
-/*:323*/	/*344:*/
+/*:304*/	/*331:*/
 case 119:
 YY_RULE_SETUP
 #line 339 "lexer.l"
-return DEFINITIONS;
+return DIRECTORY;
 	YY_BREAK
-/*:344*/	/*352:*/
 case 120:
 YY_RULE_SETUP
-#line 341 "lexer.l"
-return MAX;
+#line 340 "lexer.l"
+return SECTION;
 	YY_BREAK
-/*:352*/	/*367:*/
+/*:331*/	/*352:*/
 case 121:
 YY_RULE_SETUP
-#line 343 "lexer.l"
-return PARAM;
+#line 342 "lexer.l"
+return DEFINITIONS;
 	YY_BREAK
-/*:367*/	/*376:*/
+/*:352*/	/*360:*/
 case 122:
 YY_RULE_SETUP
-#line 345 "lexer.l"
-return FONT;
+#line 344 "lexer.l"
+return MAX;
 	YY_BREAK
-/*:376*/	/*404:*/
+/*:360*/	/*375:*/
 case 123:
 YY_RULE_SETUP
-#line 347 "lexer.l"
-return CONTENT;
+#line 346 "lexer.l"
+return PARAM;
 	YY_BREAK
-/*:404*/
+/*:375*/	/*384:*/
 case 124:
 YY_RULE_SETUP
-#line 349 "lexer.l"
-QUIT("Unexpected keyword '%s' in line %d",yytext,yylineno);
+#line 348 "lexer.l"
+return FONT;
 	YY_BREAK
+/*:384*/	/*412:*/
 case 125:
 YY_RULE_SETUP
 #line 350 "lexer.l"
-QUIT("Unexpected character '%c' (0x%02X) in line %d",yytext[0]>' '?yytext[0]:' ',yytext[0],yylineno);
+return CONTENT;
 	YY_BREAK
+/*:412*/
 case 126:
 YY_RULE_SETUP
 #line 352 "lexer.l"
+QUIT("Unexpected keyword '%s' in line %d",yytext,yylineno);
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 353 "lexer.l"
+QUIT("Unexpected character '%c' (0x%02X) in line %d",yytext[0]>' '?yytext[0]:' ',yytext[0],yylineno);
+	YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 355 "lexer.l"
 ECHO;
 	YY_BREAK
-#line 2064 "lexer.c"
+#line 2077 "lexer.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(STR):
 case YY_STATE_EOF(TXT):
@@ -2087,7 +2101,11 @@
 			 * back-up) that will match for the new input source.
 			 */
 			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+/* %if-c-only */
 			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
@@ -2142,7 +2160,7 @@
 				{
 				(yy_did_buffer_switch_on_eof) = 0;
 
-				if ( yywrap( ) )
+				if ( yywrap(  ) )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
@@ -2195,12 +2213,12 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
+	} /* end of user's declarations */
 } /* end of yylex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
-
 /* %ok-for-header */
 
 /* %endif */
@@ -2218,9 +2236,9 @@
 /* %if-c++-only */
 /* %endif */
 {
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
+    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = (yytext_ptr);
+	int number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -2249,7 +2267,7 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -2262,7 +2280,7 @@
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -2276,7 +2294,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2285,11 +2303,12 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyrealloc( (void *) b->yy_ch_buf,
+							 (yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -2317,7 +2336,7 @@
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart(yyin  );
+			yyrestart( yyin  );
 			}
 
 		else
@@ -2331,12 +2350,15 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
 		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+		/* "- 2" to take care of EOB's */
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
 	}
 
 	(yy_n_chars) += number_to_move;
@@ -2352,14 +2374,13 @@
 
 /* %if-c-only */
 /* %not-for-header */
-
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
 	yy_current_state = (yy_start);
@@ -2367,7 +2388,7 @@
 	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
 		{
 /* %% [16.0] code to find the next state goes here */
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -2376,10 +2397,10 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 371 )
-				yy_c = yy_meta[(unsigned int) yy_c];
+			if ( yy_current_state >= 381 )
+				yy_c = yy_meta[yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 		}
 
 	return yy_current_state;
@@ -2396,11 +2417,11 @@
 /* %if-c++-only */
 /* %endif */
 {
-	register int yy_is_jam;
+	int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	register char *yy_cp = (yy_c_buf_p);
+	char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 1;
+	YY_CHAR yy_c = 1;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -2409,18 +2430,20 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 371 )
-			yy_c = yy_meta[(unsigned int) yy_c];
+		if ( yy_current_state >= 381 )
+			yy_c = yy_meta[yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 370);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+	yy_is_jam = (yy_current_state == 380);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
+#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -2450,7 +2473,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2467,14 +2490,14 @@
 					 */
 
 					/* Reset buffer status. */
-					yyrestart(yyin );
+					yyrestart( yyin );
 
 					/*FALLTHROUGH*/
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( yywrap( ) )
-						return EOF;
+					if ( yywrap(  ) )
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2498,7 +2521,7 @@
 
 /* %% [19.0] update BOL and yylineno */
 	if ( c == '\n' )
-		   
+		
     yylineno++;
 ;
 
@@ -2523,13 +2546,16 @@
 	if ( ! YY_CURRENT_BUFFER ){
         yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer(yyin,YY_BUF_SIZE );
+            yy_create_buffer( yyin, YY_BUF_SIZE );
 	}
 
-	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
-	yy_load_buffer_state( );
+	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+	yy_load_buffer_state(  );
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
@@ -2559,7 +2585,7 @@
 		}
 
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state( );
+	yy_load_buffer_state(  );
 
 	/* We don't actually know whether we did this switch during
 	 * EOF (yywrap()) processing, but the only time this flag
@@ -2577,7 +2603,11 @@
 {
     	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
 	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+/* %if-c-only */
 	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	(yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -2595,7 +2625,7 @@
 {
 	YY_BUFFER_STATE b;
     
-	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
@@ -2604,17 +2634,20 @@
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
 	 */
-	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	yy_init_buffer(b,file );
+	yy_init_buffer( b, file );
 
 	return b;
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Destroy the buffer.
  * @param b a buffer created with yy_create_buffer()
  * 
@@ -2633,9 +2666,9 @@
 		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		yyfree((void *) b->yy_ch_buf  );
+		yyfree( (void *) b->yy_ch_buf  );
 
-	yyfree((void *) b  );
+	yyfree( (void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
@@ -2651,9 +2684,13 @@
 {
 	int oerrno = errno;
     
-	yy_flush_buffer(b );
+	yy_flush_buffer( b );
 
+/* %if-c-only */
 	b->yy_input_file = file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then yy_init_buffer was _probably_
@@ -2703,7 +2740,7 @@
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
 	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state( );
+		yy_load_buffer_state(  );
 }
 
 /* %if-c-or-c++ */
@@ -2739,7 +2776,7 @@
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
 	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state( );
+	yy_load_buffer_state(  );
 	(yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -2764,7 +2801,7 @@
 		--(yy_buffer_stack_top);
 
 	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state( );
+		yy_load_buffer_state(  );
 		(yy_did_buffer_switch_on_eof) = 1;
 	}
 }
@@ -2788,15 +2825,15 @@
 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
 		 * immediate realloc on the next call.
          */
-		num_to_alloc = 1;
+      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
 		if ( ! (yy_buffer_stack) )
 			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
+
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
+
 		(yy_buffer_stack_max) = num_to_alloc;
 		(yy_buffer_stack_top) = 0;
 		return;
@@ -2805,7 +2842,7 @@
 	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
 		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
+		yy_size_t grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@@ -2827,7 +2864,7 @@
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object. 
+ * @return the newly allocated buffer state object.
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
@@ -2837,16 +2874,16 @@
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
-		return 0;
+		return NULL;
 
-	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
+	b->yy_input_file = NULL;
 	b->yy_n_chars = b->yy_buf_size;
 	b->yy_is_interactive = 0;
 	b->yy_at_bol = 1;
@@ -2853,7 +2890,7 @@
 	b->yy_fill_buffer = 0;
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
-	yy_switch_to_buffer(b  );
+	yy_switch_to_buffer( b  );
 
 	return b;
 }
@@ -2868,10 +2905,10 @@
  * @note If you want to scan bytes that may contain NUL values, then use
  *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
 {
     
-	return yy_scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes( yystr, (int) strlen(yystr) );
 }
 /* %endif */
 
@@ -2883,7 +2920,7 @@
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -2891,8 +2928,8 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) yyalloc(n  );
+	n = (yy_size_t) (_yybytes_len + 2);
+	buf = (char *) yyalloc( n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 
@@ -2901,7 +2938,7 @@
 
 	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-	b = yy_scan_buffer(buf,n );
+	b = yy_scan_buffer( buf, n );
 	if ( ! b )
 		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
 
@@ -2915,7 +2952,7 @@
 /* %endif */
 
 /* %if-c-only */
-    static void yy_push_state (int  new_state )
+    static void yy_push_state (int  _new_state )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2925,13 +2962,14 @@
 		yy_size_t new_size;
 
 		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_start_stack_depth) * sizeof( int );
+		new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );
 
 		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) yyalloc(new_size  );
+			(yy_start_stack) = (int *) yyalloc( new_size  );
 
 		else
-			(yy_start_stack) = (int *) yyrealloc((void *) (yy_start_stack),new_size  );
+			(yy_start_stack) = (int *) yyrealloc(
+					(void *) (yy_start_stack), new_size  );
 
 		if ( ! (yy_start_stack) )
 			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
@@ -2939,7 +2977,7 @@
 
 	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
 
-	BEGIN(new_state);
+	BEGIN(_new_state);
 }
 
 /* %if-c-only */
@@ -2959,9 +2997,9 @@
 #endif
 
 /* %if-c-only */
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (const char* msg )
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+			fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -2996,7 +3034,7 @@
  */
 int yyget_lineno  (void)
 {
-        
+    
     return yylineno;
 }
 
@@ -3019,7 +3057,7 @@
 /** Get the length of the current token.
  * 
  */
-yy_size_t yyget_leng  (void)
+int yyget_leng  (void)
 {
         return yyleng;
 }
@@ -3037,29 +3075,29 @@
 /* %endif */
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void yyset_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    yylineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
  * @see yy_switch_to_buffer
  */
-void yyset_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        yyin = in_str ;
+        yyin = _in_str ;
 }
 
-void yyset_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        yyout = out_str ;
+        yyout = _out_str ;
 }
 
 int yyget_debug  (void)
@@ -3067,9 +3105,9 @@
         return yy_flex_debug;
 }
 
-void yyset_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        yy_flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -3089,10 +3127,10 @@
     /* We do not touch yylineno unless the option is enabled. */
     yylineno =  1;
     
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -3105,8 +3143,8 @@
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -3123,7 +3161,7 @@
     
     /* Pop the buffer stack, destroying each element. */
 	while(YY_CURRENT_BUFFER){
-		yy_delete_buffer(YY_CURRENT_BUFFER  );
+		yy_delete_buffer( YY_CURRENT_BUFFER  );
 		YY_CURRENT_BUFFER_LVALUE = NULL;
 		yypop_buffer_state();
 	}
@@ -3133,7 +3171,7 @@
 	(yy_buffer_stack) = NULL;
 
     /* Destroy the start condition stack. */
-        yyfree((yy_start_stack)  );
+        yyfree( (yy_start_stack)  );
         (yy_start_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
@@ -3151,9 +3189,10 @@
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
 {
-	register int i;
+		
+	int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
@@ -3160,9 +3199,9 @@
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
+static int yy_flex_strlen (const char * s )
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -3172,11 +3211,12 @@
 
 void *yyalloc (yy_size_t  size )
 {
-	return (void *) malloc( size );
+			return malloc(size);
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
 {
+		
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -3184,12 +3224,12 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
 void yyfree (void * ptr )
 {
-	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -3199,8 +3239,7 @@
 
 /* %ok-for-header */
 
-#line 352 "lexer.l"
+#line 355 "lexer.l"
 
+	/*:519*/
 
-	/*:511*/
-

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
-	/*503:*/
-	#line 9954 "format.w"
+	/*511:*/
+	#line 10407 "format.w"
 
 #ifndef __BASETYPES_H__
 #define __BASETYPES_H__
@@ -42,6 +42,6 @@
 #error  float64 type must have size 8
 #endif
 #define HINT_VERSION 1
-#define HINT_SUB_VERSION 3
+#define HINT_SUB_VERSION 4
 #endif
-	/*:503*/
+	/*:511*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/error.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/error.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/error.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
 /*358:*/
-#line 7159 "hint.w"
+#line 7154 "hint.w"
 
 #ifndef _ERROR_H
 #define _ERROR_H

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,19 +1,19 @@
-	/*504:*/
-	#line 10006 "format.w"
+	/*512:*/
+	#line 10457 "format.w"
 
 #ifndef _HFORMAT_H_
 #define _HFORMAT_H_
-	/*349:*/
-	#line 7408 "format.w"
+	/*357:*/
+	#line 7848 "format.w"
 
 #define REF_RNG(K,N) if ((int)(N)>max_ref[K]) QUIT("Reference %d to %s out of range [0 - %d]",\
   (N),definition_name[K],max_ref[K])
-	/*:349*/	/*350:*/
-	#line 7422 "format.w"
+	/*:357*/	/*358:*/
+	#line 7862 "format.w"
 
 #define MAX_REF(K) ((K)==label_kind?0xFFFF:0xFF)
-	/*:350*/	/*423:*/
-	#line 8877 "format.w"
+	/*:358*/	/*431:*/
+	#line 9317 "format.w"
 
 #ifdef WIN32
 #define SIZE_F "0x%x"
@@ -31,11 +31,11 @@
   if ((int)(N)<(int)(A)||(int)(N)>(int)(Z)) QUIT(S " %d out of range [%d - %d]",N,A,Z)
 
 #define TAGERR(A) QUIT("Unknown tag [%s,%d] at " SIZE_F "\n",NAME(A),INFO(A),hpos-hstart)
-	/*:423*/
-	#line 10009 "format.w"
+	/*:431*/
+	#line 10460 "format.w"
 
-	/*410:*/
-	#line 8615 "format.w"
+	/*418:*/
+	#line 9055 "format.w"
 
 #define DBGNONE     0x0
 #define DBGBASIC    0x1
@@ -54,11 +54,11 @@
 #define DBGFONT     0x2000
 #define DBGRENDER   0x4000
 #define DBGLABEL    0x8000
-	/*:410*/
-	#line 10010 "format.w"
+	/*:418*/
+	#line 10461 "format.w"
 
 	/*12:*/
-	#line 635 "format.w"
+	#line 640 "format.w"
 
 #define KIND(T)      (((T)>>3)&0x1F)
 #define NAME(T)      content_name[KIND(T)]
@@ -65,52 +65,52 @@
 #define INFO(T)      ((T)&0x7)
 #define TAG(K,I)     (((K)<<3)|(I))
 	/*:12*/	/*77:*/
-	#line 1625 "format.w"
+	#line 1639 "format.w"
 
 #define ROUND(X)     ((int)((X)>=0.0?floor((X)+0.5):ceil((X)-0.5)))
 	/*:77*/	/*112:*/
-	#line 2126 "format.w"
+	#line 2139 "format.w"
 
 #define RUNNING_DIMEN 0xC0000000
 	/*:112*/	/*131:*/
-	#line 2468 "format.w"
+	#line 2481 "format.w"
 
 #define ZERO_GLUE(G) ((G).w.w==0  && (G).w.h==0.0  && (G).w.v==0.0  && (G).p.f==0.0 && (G).m.f==0.0)
-	/*:131*/	/*236:*/
-	#line 4700 "format.w"
+	/*:131*/	/*244:*/
+	#line 5140 "format.w"
 
 #define HINT_NO_POS 0xFFFFFFFF
-	/*:236*/	/*243:*/
-	#line 4898 "format.w"
+	/*:244*/	/*251:*/
+	#line 5338 "format.w"
 
 #define LABEL_UNDEF 0
 #define LABEL_TOP 1
 #define LABEL_BOT 2
 #define LABEL_MID 3
-	/*:243*/	/*294:*/
-	#line 6079 "format.w"
+	/*:251*/	/*302:*/
+	#line 6519 "format.w"
 
 #define ALLOCATE(R,S,T) ((R)= (T *)calloc((S),sizeof(T)),\
         (((R)==NULL)?QUIT("Out of memory for " #R):0))
 #define REALLOCATE(R,S,T) ((R)= (T *)realloc((R),(S)*sizeof(T)),\
         (((R)==NULL)?QUIT("Out of memory for " #R):0))
-	/*:294*/	/*302:*/
-	#line 6244 "format.w"
+	/*:302*/	/*310:*/
+	#line 6684 "format.w"
 
 #define MAX_BANNER 256
-	/*:302*/	/*315:*/
-	#line 6448 "format.w"
+	/*:310*/	/*323:*/
+	#line 6888 "format.w"
 
 #define MAX_TAG_DISTANCE 32
-	/*:315*/
-	#line 10011 "format.w"
+	/*:323*/
+	#line 10462 "format.w"
 
 	/*6:*/
-	#line 487 "format.w"
+	#line 492 "format.w"
 
 #define DEF_KIND(C,D,N) C##_kind= N
 typedef enum{	/*9:*/
-	#line 556 "format.w"
+	#line 561 "format.w"
 
 DEF_KIND(text,text,0),
 DEF_KIND(list,list,1),
@@ -146,21 +146,21 @@
 DEF_KIND(penalty,int,31)
 
 	/*:9*/
-	#line 489 "format.w"
+	#line 494 "format.w"
 ,	/*10:*/
-	#line 595 "format.w"
+	#line 600 "format.w"
 
 font_kind= glyph_kind,int_kind= penalty_kind,dimen_kind= kern_kind,label_kind= link_kind,outline_kind= link_kind
 	/*:10*/
-	#line 489 "format.w"
+	#line 494 "format.w"
 }Kind;
 #undef DEF_KIND
 	/*:6*/	/*11:*/
-	#line 621 "format.w"
+	#line 626 "format.w"
 
 typedef enum{b000= 0,b001= 1,b010= 2,b011= 3,b100= 4,b101= 5,b110= 6,b111= 7}Info;
 	/*:11*/	/*56:*/
-	#line 1294 "format.w"
+	#line 1301 "format.w"
 
 
 #define FLT_M_BITS 23
@@ -172,29 +172,29 @@
 #define DBL_EXCESS 1023
 
 	/*:56*/	/*76:*/
-	#line 1620 "format.w"
+	#line 1634 "format.w"
 
 typedef int32_t Scaled;
 #define ONE ((Scaled)(1<<16))
 	/*:76*/	/*81:*/
-	#line 1676 "format.w"
+	#line 1690 "format.w"
 
 typedef Scaled Dimen;
 #define MAX_DIMEN ((Dimen)(0x3FFFFFFF))
 	/*:81*/	/*86:*/
-	#line 1732 "format.w"
+	#line 1746 "format.w"
 
 typedef struct{
 Dimen w;float32_t h,v;
 }Xdimen;
 	/*:86*/	/*95:*/
-	#line 1877 "format.w"
+	#line 1890 "format.w"
 
 typedef enum{normal_o= 0,fil_o= 1,fill_o= 2,filll_o= 3}Order;
 typedef struct{float64_t f;Order o;}Stretch;
 typedef union{float32_t f;uint32_t u;}Stch;
 	/*:95*/	/*130:*/
-	#line 2458 "format.w"
+	#line 2471 "format.w"
 
 typedef struct{
 Xdimen w;
@@ -201,14 +201,14 @@
 Stretch p,m;
 }Glue;
 	/*:130*/	/*180:*/
-	#line 3881 "format.w"
+	#line 3894 "format.w"
 
 typedef struct{
 Glue bs,ls;
 Dimen lsl;
 }Baseline;
-	/*:180*/	/*242:*/
-	#line 4883 "format.w"
+	/*:180*/	/*250:*/
+	#line 5323 "format.w"
 
 typedef struct
 {uint32_t pos;
@@ -217,15 +217,15 @@
 int next;
 uint32_t pos0;uint8_t f;
 }Label;
-	/*:242*/	/*373:*/
-	#line 7942 "format.w"
+	/*:250*/	/*381:*/
+	#line 8382 "format.w"
 
 #define MAX_FONT_PARAMS 11
-	/*:373*/
-	#line 10012 "format.w"
+	/*:381*/
+	#line 10463 "format.w"
 
-	/*385:*/
-	#line 8177 "format.w"
+	/*393:*/
+	#line 8617 "format.w"
 
 typedef enum{
 zero_int_no= 0,
@@ -253,8 +253,8 @@
 floating_penalty_no= 22
 }Int_no;
 #define MAX_INT_DEFAULT floating_penalty_no
-	/*:385*/	/*387:*/
-	#line 8250 "format.w"
+	/*:393*/	/*395:*/
+	#line 8690 "format.w"
 
 typedef enum{
 zero_dimen_no= 0,
@@ -269,8 +269,8 @@
 math_quad_no= 9
 }Dimen_no;
 #define MAX_DIMEN_DEFAULT math_quad_no
-	/*:387*/	/*389:*/
-	#line 8295 "format.w"
+	/*:395*/	/*397:*/
+	#line 8735 "format.w"
 
 typedef enum{
 zero_xdimen_no= 0,
@@ -278,8 +278,8 @@
 vsize_xdimen_no= 2
 }Xdimen_no;
 #define MAX_XDIMEN_DEFAULT vsize_xdimen_no
-	/*:389*/	/*391:*/
-	#line 8319 "format.w"
+	/*:397*/	/*399:*/
+	#line 8759 "format.w"
 
 typedef enum{
 zero_skip_no= 0,
@@ -299,43 +299,43 @@
 par_fill_skip_no= 14
 }Glue_no;
 #define MAX_GLUE_DEFAULT par_fill_skip_no
-	/*:391*/	/*393:*/
-	#line 8405 "format.w"
+	/*:399*/	/*401:*/
+	#line 8845 "format.w"
 
 typedef enum{
 zero_baseline_no= 0
 }Baseline_no;
 #define MAX_BASELINE_DEFAULT zero_baseline_no
-	/*:393*/	/*395:*/
-	#line 8430 "format.w"
+	/*:401*/	/*403:*/
+	#line 8870 "format.w"
 
 typedef enum{
 zero_label_no= 0
 }Label_no;
 #define MAX_LABEL_DEFAULT zero_label_no
-	/*:395*/	/*397:*/
-	#line 8444 "format.w"
+	/*:403*/	/*405:*/
+	#line 8884 "format.w"
 
 typedef enum{
 zero_stream_no= 0
 }Stream_no;
 #define MAX_STREAM_DEFAULT zero_stream_no
-	/*:397*/	/*399:*/
-	#line 8460 "format.w"
+	/*:405*/	/*407:*/
+	#line 8900 "format.w"
 
 typedef enum{
 zero_page_no= 0
 }Page_no;
 #define MAX_PAGE_DEFAULT zero_page_no
-	/*:399*/	/*401:*/
-	#line 8477 "format.w"
+	/*:407*/	/*409:*/
+	#line 8917 "format.w"
 
 typedef enum{
 zero_range_no= 0
 }Range_no;
 #define MAX_RANGE_DEFAULT zero_range_no
-	/*:401*/
-	#line 10013 "format.w"
+	/*:409*/
+	#line 10464 "format.w"
 
 
 extern const char*content_name[32];
@@ -352,4 +352,4 @@
 extern signed char hnode_size[0x100];
 
 #endif
-	/*:504*/
+	/*:512*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
-	/*508:*/
-	#line 10153 "format.w"
+	/*516:*/
+	#line 10604 "format.w"
 
 #include "basetypes.h"
 #include <string.h>
@@ -13,39 +13,39 @@
 #include "format.h"
 #include "get.h"
 
-	/*244:*/
-	#line 4905 "format.w"
+	/*252:*/
+	#line 5345 "format.w"
 
 Label*labels;
 int first_label= -1;
-	/*:244*/	/*292:*/
-	#line 6068 "format.w"
+	/*:252*/	/*300:*/
+	#line 6508 "format.w"
 
 RangePos*range_pos;
 int next_range= 1,max_range;
 int*page_on;
-	/*:292*/	/*303:*/
-	#line 6252 "format.w"
+	/*:300*/	/*311:*/
+	#line 6692 "format.w"
 
 char hbanner[MAX_BANNER+1];
 int hbanner_size= 0;
-	/*:303*/	/*310:*/
-	#line 6393 "format.w"
+	/*:311*/	/*318:*/
+	#line 6833 "format.w"
 
 uint8_t*hpos= NULL,*hstart= NULL,*hend= NULL,*hpos0= NULL;
-	/*:310*/	/*316:*/
-	#line 6474 "format.w"
+	/*:318*/	/*324:*/
+	#line 6914 "format.w"
 
 char*hin_name= NULL;
 uint64_t hin_size= 0;
 uint8_t*hin_addr= NULL;
 uint64_t hin_time= 0;
-	/*:316*/	/*372:*/
-	#line 7938 "format.w"
+	/*:324*/	/*380:*/
+	#line 8378 "format.w"
 
 char**hfont_name;
-	/*:372*/	/*411:*/
-	#line 8638 "format.w"
+	/*:380*/	/*419:*/
+	#line 9078 "format.w"
 
 unsigned int debugflags= DBGNONE;
 int option_utf8= false;
@@ -56,16 +56,16 @@
 int option_compress= false;
 char*stem_name= NULL;
 int stem_length= 0;
-	/*:411*/	/*414:*/
-	#line 8772 "format.w"
+	/*:419*/	/*422:*/
+	#line 9212 "format.w"
 
 FILE*hin= NULL,*hout= NULL,*hlog= NULL;
-	/*:414*/
-	#line 10166 "format.w"
+	/*:422*/
+	#line 10617 "format.w"
 
 
-	/*317:*/
-	#line 6481 "format.w"
+	/*325:*/
+	#line 6921 "format.w"
 
 #ifndef USE_MMAP
 void hget_unmap(void)
@@ -158,11 +158,11 @@
 }
 #endif
 
-	/*:317*/
-	#line 10168 "format.w"
+	/*:325*/
+	#line 10619 "format.w"
 
-	/*304:*/
-	#line 6257 "format.w"
+	/*312:*/
+	#line 6697 "format.w"
 
 
 bool hcheck_banner(char*magic)
@@ -193,11 +193,11 @@
 DBG(DBGDIR,"banner size=0x%x\n",hbanner_size);
 return true;
 }
-	/*:304*/
-	#line 10169 "format.w"
+	/*:312*/
+	#line 10620 "format.w"
 
-	/*326:*/
-	#line 6814 "format.w"
+	/*334:*/
+	#line 7254 "format.w"
 
 Entry*dir= NULL;
 uint16_t section_no,max_section_no;
@@ -208,8 +208,8 @@
 ALLOCATE(dir,entries,Entry);
 dir[0].section_no= 0;dir[1].section_no= 1;dir[2].section_no= 2;
 }
-	/*:326*/	/*327:*/
-	#line 6827 "format.w"
+	/*:334*/	/*335:*/
+	#line 7267 "format.w"
 
 void hset_entry(Entry*e,uint16_t i,uint32_t size,uint32_t xsize,char*file_name)
 {e->section_no= i;
@@ -220,12 +220,12 @@
 e->file_name= strdup(file_name);
 DBG(DBGDIR,"Creating entry %d: \"%s\" size=0x%x xsize=0x%x\n",i,file_name,size,xsize);
 }
-	/*:327*/
-	#line 10170 "format.w"
+	/*:335*/
+	#line 10621 "format.w"
 
 
-	/*305:*/
-	#line 6296 "format.w"
+	/*313:*/
+	#line 6736 "format.w"
 
 void hget_banner(void)
 {hbanner_size= 0;
@@ -236,8 +236,8 @@
 }
 hbanner[hbanner_size]= 0;
 }
-	/*:305*/	/*318:*/
-	#line 6586 "format.w"
+	/*:313*/	/*326:*/
+	#line 7026 "format.w"
 
 
 static void hdecompress(uint16_t n)
@@ -273,8 +273,8 @@
 hpos0= hpos= hstart= buffer;
 hend= hstart+dir[n].xsize;
 }
-	/*:318*/	/*320:*/
-	#line 6674 "format.w"
+	/*:326*/	/*328:*/
+	#line 7114 "format.w"
 
 void hget_section(uint16_t n)
 {DBG(DBGDIR,"Reading section %d\n",n);
@@ -289,12 +289,12 @@
 if(dir[n].xsize>0)hdecompress(n);
 }
 }
-	/*:320*/	/*337:*/
-	#line 7052 "format.w"
+	/*:328*/	/*345:*/
+	#line 7492 "format.w"
 
 void hget_entry(Entry*e)
 {	/*15:*/
-	#line 712 "format.w"
+	#line 717 "format.w"
 
 uint8_t a,z;
 uint32_t node_pos= hpos-hstart;
@@ -301,7 +301,7 @@
 if(hpos>=hend)QUIT("Attempt to read a start byte at the end of the section");
 HGETTAG(a);
 	/*:15*/
-	#line 7054 "format.w"
+	#line 7494 "format.w"
 
 DBG(DBGDIR,"Reading directory entry\n");
 switch(a)
@@ -316,7 +316,7 @@
 default:TAGERR(a);break;
 }
 	/*16:*/
-	#line 719 "format.w"
+	#line 724 "format.w"
 
 HGETTAG(z);
 if(a!=z)
@@ -323,11 +323,11 @@
 QUIT("Tag mismatch [%s,%d]!=[%s,%d] at 0x%x to "SIZE_F"\n",
 NAME(a),INFO(a),NAME(z),INFO(z),node_pos,hpos-hstart-1);
 	/*:16*/
-	#line 7067 "format.w"
+	#line 7507 "format.w"
 
 }
-	/*:337*/	/*338:*/
-	#line 7084 "format.w"
+	/*:345*/	/*346:*/
+	#line 7524 "format.w"
 
 static void hget_root(Entry*root)
 {DBG(DBGDIR,"Root entry at "SIZE_F"\n",hpos-hstart);
@@ -362,13 +362,13 @@
 free(dir);dir= NULL;
 }
 
-	/*:338*/	/*356:*/
-	#line 7500 "format.w"
+	/*:346*/	/*364:*/
+	#line 7940 "format.w"
 
 void hget_max_definitions(void)
 {Kind k;
 	/*15:*/
-	#line 712 "format.w"
+	#line 717 "format.w"
 
 uint8_t a,z;
 uint32_t node_pos= hpos-hstart;
@@ -375,7 +375,7 @@
 if(hpos>=hend)QUIT("Attempt to read a start byte at the end of the section");
 HGETTAG(a);
 	/*:15*/
-	#line 7503 "format.w"
+	#line 7943 "format.w"
 
 if(a!=TAG(list_kind,0))QUIT("Start of maximum list expected");
 for(k= 0;k<32;k++)max_ref[k]= max_default[k];max_outline= -1;
@@ -388,15 +388,15 @@
 if(k==list_kind)break;
 if(INFO(a)&b001)HGET16(n);else n= HGET8;
 switch(a)
-{	/*238:*/
-	#line 4835 "format.w"
+{	/*246:*/
+	#line 5275 "format.w"
 
 
 case TAG(outline_kind,b100):
 case TAG(outline_kind,b101):max_outline= n;
 DBG(DBGDEF|DBGLABEL,"max(outline) = %d\n",max_outline);break;
-	/*:238*/
-	#line 7515 "format.w"
+	/*:246*/
+	#line 7955 "format.w"
 
 default:
 if(max_fixed[k]>max_default[k])
@@ -407,7 +407,7 @@
 break;
 }
 	/*16:*/
-	#line 719 "format.w"
+	#line 724 "format.w"
 
 HGETTAG(z);
 if(a!=z)
@@ -414,16 +414,16 @@
 QUIT("Tag mismatch [%s,%d]!=[%s,%d] at 0x%x to "SIZE_F"\n",
 NAME(a),INFO(a),NAME(z),INFO(z),node_pos,hpos-hstart-1);
 	/*:16*/
-	#line 7524 "format.w"
+	#line 7964 "format.w"
 
 }
 if(INFO(a)!=0)QUIT("End of maximum list with info %d",INFO(a));
 }
-	/*:356*/
-	#line 10172 "format.w"
+	/*:364*/
+	#line 10623 "format.w"
 
 	/*52:*/
-	#line 1228 "format.w"
+	#line 1233 "format.w"
 
 #define HGET_UTF8C(X)  (X)= HGET8; if ((X&0xC0)!=0x80) \
   QUIT("UTF8 continuation byte expected at " SIZE_F " got 0x%02X\n",hpos-hstart-1,X)
@@ -449,7 +449,7 @@
 }
 }
 	/*:52*/	/*75:*/
-	#line 1603 "format.w"
+	#line 1613 "format.w"
 
 float32_t hget_float32(void)
 {union{float32_t d;uint32_t bits;}u;
@@ -457,7 +457,7 @@
 return u.d;
 }
 	/*:75*/	/*145:*/
-	#line 2822 "format.w"
+	#line 2835 "format.w"
 
 void hget_size_boundary(Info info)
 {uint32_t n;
@@ -485,7 +485,7 @@
 else
 {
 	/*15:*/
-	#line 712 "format.w"
+	#line 717 "format.w"
 
 uint8_t a,z;
 uint32_t node_pos= hpos-hstart;
@@ -492,12 +492,12 @@
 if(hpos>=hend)QUIT("Attempt to read a start byte at the end of the section");
 HGETTAG(a);
 	/*:15*/
-	#line 2848 "format.w"
+	#line 2861 "format.w"
 
 l->k= KIND(a);
 HGET_LIST(INFO(a),*l);
 	/*16:*/
-	#line 719 "format.w"
+	#line 724 "format.w"
 
 HGETTAG(z);
 if(a!=z)
@@ -504,16 +504,16 @@
 QUIT("Tag mismatch [%s,%d]!=[%s,%d] at 0x%x to "SIZE_F"\n",
 NAME(a),INFO(a),NAME(z),INFO(z),node_pos,hpos-hstart-1);
 	/*:16*/
-	#line 2851 "format.w"
+	#line 2864 "format.w"
 
 DBG(DBGNODE,"Get list at 0x%x size=%u\n",l->p,l->s);
 }
 }
 	/*:145*/
-	#line 10173 "format.w"
+	#line 10624 "format.w"
 
-	/*426:*/
-	#line 8944 "format.w"
+	/*434:*/
+	#line 9384 "format.w"
 
 uint32_t hff_list_pos= 0,hff_list_size= 0;
 uint8_t hff_tag;
@@ -532,8 +532,8 @@
 return;
 }
 else if(hff_tag<=TAG(param_kind,5))
-	/*428:*/
-	#line 8989 "format.w"
+	/*436:*/
+	#line 9429 "format.w"
 
 switch(INFO(hff_tag)){
 case 1:hff_list_pos= hpos-hstart+1;hff_list_size= 0;hpos= hpos+2;return;
@@ -542,13 +542,13 @@
 case 4:hpos++;HGET24(hff_list_size);hff_list_pos= hpos-hstart+1;hpos= hpos+1+hff_list_size+1+3+1;return;
 case 5:hpos++;HGET32(hff_list_size);hff_list_pos= hpos-hstart+1;hpos= hpos+1+hff_list_size+1+4+1;return;
 }
-	/*:428*/
-	#line 8962 "format.w"
+	/*:436*/
+	#line 9402 "format.w"
 
 TAGERR(hff_tag);
 }
-	/*:426*/	/*457:*/
-	#line 9397 "format.w"
+	/*:434*/	/*465:*/
+	#line 9840 "format.w"
 
 float32_t hteg_float32(void)
 {union{float32_t d;uint32_t bits;}u;
@@ -555,8 +555,8 @@
 HTEG32(u.bits);
 return u.d;
 }
-	/*:457*/	/*495:*/
-	#line 9825 "format.w"
+	/*:465*/	/*503:*/
+	#line 10278 "format.w"
 
 void hteg_size_boundary(Info info)
 {uint32_t n;
@@ -578,15 +578,15 @@
 }
 
 void hteg_list(List*l)
-{	/*454:*/
-	#line 9369 "format.w"
+{	/*462:*/
+	#line 9812 "format.w"
 
 uint8_t a,z;
 uint32_t node_pos= hpos-hstart;
 if(hpos<=hstart)return;
 HTEGTAG(z);
-	/*:454*/
-	#line 9846 "format.w"
+	/*:462*/
+	#line 10299 "format.w"
 
 if(KIND(z)!=list_kind&&KIND(z)!=text_kind&&KIND(z)!=param_kind)
 QUIT("List expected at 0x%x",(uint32_t)(hpos-hstart));
@@ -601,14 +601,14 @@
 s= hteg_list_size(INFO(z));
 if(s!=l->s)QUIT("List sizes at "SIZE_F" and 0x%x do not match 0x%x != 0x%x",
 hpos-hstart,node_pos-1,s,l->s);
-	/*455:*/
-	#line 9376 "format.w"
+	/*463:*/
+	#line 9819 "format.w"
 
 HTEGTAG(a);
 if(a!=z)QUIT("Tag mismatch [%s,%d]!=[%s,%d] at "SIZE_F" to 0x%x\n",NAME(a),INFO(a),NAME(z),INFO(z),
 hpos-hstart,node_pos-1);
-	/*:455*/
-	#line 9860 "format.w"
+	/*:463*/
+	#line 10313 "format.w"
 
 }
 }
@@ -619,7 +619,7 @@
 }
 
 
-	/*:495*/
-	#line 10174 "format.w"
+	/*:503*/
+	#line 10625 "format.w"
 
-	/*:508*/
+	/*:516*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
-	/*507:*/
-	#line 10108 "format.w"
+	/*515:*/
+	#line 10559 "format.w"
 
 	/*1:*/
 	#line 328 "format.w"
@@ -6,13 +6,13 @@
 
 typedef struct{uint32_t c;uint8_t f;}Glyph;
 	/*:1*/	/*113:*/
-	#line 2153 "format.w"
+	#line 2166 "format.w"
 
 typedef struct{
 Dimen h,d,w;
 }Rule;
 	/*:113*/	/*122:*/
-	#line 2267 "format.w"
+	#line 2280 "format.w"
 
 typedef struct{
 bool x;
@@ -19,7 +19,7 @@
 Xdimen d;
 }Kern;
 	/*:122*/	/*140:*/
-	#line 2688 "format.w"
+	#line 2701 "format.w"
 
 typedef struct{
 Kind k;
@@ -27,37 +27,38 @@
 uint32_t s;
 }List;
 	/*:140*/	/*148:*/
-	#line 3110 "format.w"
+	#line 3123 "format.w"
 
 typedef enum{txt_font= 0x00,txt_global= 0x08,txt_local= 0x11,
 txt_cc= 0x1D,txt_node= 0x1E,txt_hyphen= 0x1F,
 txt_glue= 0x20,txt_ignore= 0xFB}Txt;
 	/*:148*/	/*159:*/
-	#line 3377 "format.w"
+	#line 3390 "format.w"
 
 typedef struct{Kind k;int n;}Ref;
 	/*:159*/	/*160:*/
-	#line 3414 "format.w"
+	#line 3427 "format.w"
 
 typedef struct{Dimen h,d,w,a;float32_t r;int8_t s,o;List l;}Box;
 	/*:160*/	/*187:*/
-	#line 3970 "format.w"
+	#line 3983 "format.w"
 
 typedef struct{uint8_t f;List l;}Lig;
 	/*:187*/	/*195:*/
-	#line 4087 "format.w"
+	#line 4100 "format.w"
 
 typedef struct{bool x;List p,q;uint8_t r;}Disc;
 	/*:195*/	/*228:*/
-	#line 4608 "format.w"
+	#line 4658 "format.w"
 
 typedef struct{
 uint16_t n;
-Dimen w,h;
-Stretch p,m;
+float32_t a;
+Xdimen w,h;
+uint8_t wr,hr;
 }Image;
-	/*:228*/	/*264:*/
-	#line 5247 "format.w"
+	/*:228*/	/*272:*/
+	#line 5687 "format.w"
 
 typedef struct{
 uint8_t*t;
@@ -65,16 +66,16 @@
 int d;
 uint16_t r;
 }Outline;
-	/*:264*/	/*291:*/
-	#line 6063 "format.w"
+	/*:272*/	/*299:*/
+	#line 6503 "format.w"
 
 typedef
 struct{uint8_t pg;uint32_t pos;bool on;int link;}RangePos;
-	/*:291*/
-	#line 10109 "format.w"
+	/*:299*/
+	#line 10560 "format.w"
 
-	/*325:*/
-	#line 6800 "format.w"
+	/*333:*/
+	#line 7240 "format.w"
 
 typedef struct{
 uint64_t pos;
@@ -84,17 +85,17 @@
 uint8_t*buffer;
 uint32_t bsize;
 }Entry;
-	/*:325*/
-	#line 10110 "format.w"
+	/*:333*/
+	#line 10561 "format.w"
 
 	/*37:*/
-	#line 1062 "format.w"
+	#line 1067 "format.w"
 
 #define HGET_STRING(S) S= (char*)hpos;\
  while(hpos<hend && *hpos!=0) { RNG("String character",*hpos,0x20,0x7E); hpos++;}\
  hpos++;
 	/*:37*/	/*146:*/
-	#line 2857 "format.w"
+	#line 2870 "format.w"
 
 #define HGET_LIST(I,L) \
     (L).s= hget_list_size(I); hget_size_boundary(I);\
@@ -103,8 +104,8 @@
     { uint32_t s= hget_list_size(I); \
       if (s!=(L).s) \
       QUIT("List sizes at 0x%x and " SIZE_F " do not match 0x%x != 0x%x",node_pos+1,hpos-hstart-I-1,(L).s,s);}
-	/*:146*/	/*311:*/
-	#line 6401 "format.w"
+	/*:146*/	/*319:*/
+	#line 6841 "format.w"
 
 #define HGET_ERROR  QUIT("HGET overrun in section %d at " SIZE_F "\n",section_no,hpos-hstart)
 #define HEND   ((hpos<=hend)?0:(HGET_ERROR,0))
@@ -114,8 +115,8 @@
 #define HGET24(X) ((X)= (hpos[0]<<16)+(hpos[1]<<8)+hpos[2],hpos+= 3,HEND)
 #define HGET32(X) ((X)= (hpos[0]<<24)+(hpos[1]<<16)+(hpos[2]<<8)+hpos[3],hpos+= 4,HEND)
 #define HGETTAG(A) A= HGET8,DBGTAG(A,hpos-1)
-	/*:311*/	/*336:*/
-	#line 7028 "format.w"
+	/*:319*/	/*344:*/
+	#line 7468 "format.w"
 
 #define HGET_SIZE(I) \
   if ((I)&b100) { \
@@ -138,8 +139,8 @@
   HGET16(i); HGET_SIZE(I); HGET_STRING(file_name); \
   hset_entry(&(E),i,s,xs,file_name); \
 }
-	/*:336*/	/*456:*/
-	#line 9384 "format.w"
+	/*:344*/	/*464:*/
+	#line 9827 "format.w"
 
 #define HBACK(X) ((hpos-(X)<hstart)?(QUIT("HTEG underflow\n"),NULL):(hpos-= (X)))
 
@@ -148,8 +149,8 @@
 #define HTEG24(X) (HBACK(3),(X)= (hpos[0]<<16)+(hpos[1]<<8)+hpos[2])
 #define HTEG32(X) (HBACK(4),(X)= (hpos[0]<<24)+(hpos[1]<<16)+(hpos[2]<<8)+hpos[3])
 #define HTEGTAG(X) X= HTEG8,DBGTAG(X,hpos)
-	/*:456*/
-	#line 10111 "format.w"
+	/*:464*/
+	#line 10562 "format.w"
 
 
 extern Entry*dir;
@@ -187,4 +188,4 @@
 extern void hff_hpos(void);
 extern uint32_t hff_list_pos,hff_list_size;
 extern uint8_t hff_tag;
-	/*:507*/
+	/*:515*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
 /*376:*/
-#line 7614 "hint.w"
+#line 7609 "hint.w"
 
 #include "basetypes.h"
 #include "error.h"
@@ -13,19 +13,19 @@
 #include "rendernative.h"
 
 /*308:*/
-#line 5720 "hint.w"
+#line 5748 "hint.w"
 
 static Font*fonts[0x100]= {NULL};
 /*:308*//*315:*/
-#line 5856 "hint.w"
+#line 5884 "hint.w"
 
 static Gcache g_undefined= {0};
 /*:315*//*349:*/
-#line 7003 "hint.w"
+#line 6998 "hint.w"
 
 static FT_Library ft_library= NULL;
 /*:349*/
-#line 7626 "hint.w"
+#line 7621 "hint.w"
 
 /*35:*/
 #line 562 "hint.w"
@@ -33,10 +33,10 @@
 extern uint16_t hglyph_section(uint8_t f);
 extern int32_t font_at_size(uint8_t f);
 /*:35*/
-#line 7627 "hint.w"
+#line 7622 "hint.w"
 
 /*314:*/
-#line 5813 "hint.w"
+#line 5841 "hint.w"
 
 #define G0_BITS 7
 #define G0_SIZE (1<<G0_BITS)
@@ -71,7 +71,7 @@
 return NULL;
 }
 /*:314*//*316:*/
-#line 5860 "hint.w"
+#line 5888 "hint.w"
 
 static Gcache*hnew_g(Gcache**g)
 {if(*g==NULL)
@@ -126,17 +126,17 @@
 else return&g_undefined;
 }
 /*:316*/
-#line 7628 "hint.w"
+#line 7623 "hint.w"
 
 
 /*353:*/
-#line 7037 "hint.w"
+#line 7032 "hint.w"
 
 
 int unpack_ft_file(Font*f)
 {int e;
 /*350:*/
-#line 7007 "hint.w"
+#line 7002 "hint.w"
 
 if(ft_library==NULL)
 {int e= FT_Init_FreeType(&ft_library);
@@ -143,7 +143,7 @@
 if(e)QUIT("Unable to initialize the FreeType library");
 }
 /*:350*/
-#line 7041 "hint.w"
+#line 7036 "hint.w"
 
 f->hpxs= 72.27/xdpi;
 f->vpxs= 72.27/ydpi;
@@ -151,15 +151,15 @@
 f->font_data,f->data_size,0,&(f->tt.face));
 if(e)return 0;
 /*354:*/
-#line 7062 "hint.w"
+#line 7057 "hint.w"
 
 e= FT_Select_Charmap(f->tt.face,FT_ENCODING_ADOBE_CUSTOM);
 if(e)LOG("Unable to select custom encoding for font %d\n",f->n);
 /*:354*/
-#line 7047 "hint.w"
+#line 7042 "hint.w"
 
 /*355:*/
-#line 7070 "hint.w"
+#line 7065 "hint.w"
 
 e= FT_Set_Char_Size(
 f->tt.face,
@@ -170,13 +170,13 @@
 if(e)QUIT("Unable to set FreeType glyph size");
 FT_Set_Transform(f->tt.face,0,0);
 /*:355*/
-#line 7048 "hint.w"
+#line 7043 "hint.w"
 
 f->ff= ft_format;
 return 1;
 }
 /*:353*//*356:*/
-#line 7093 "hint.w"
+#line 7088 "hint.w"
 
 static void ft_unpack_glyph(Font*f,Gcache*g,uint32_t cc)
 {int e,i;
@@ -201,11 +201,11 @@
 }
 
 /*:356*/
-#line 7630 "hint.w"
+#line 7625 "hint.w"
 
 
 /*341:*/
-#line 6708 "hint.w"
+#line 6703 "hint.w"
 
 #define PK_READ_1_BYTE() (data[i++])
 #define PK_READ_2_BYTE() (k= PK_READ_1_BYTE(),k= k<<8,k= k+data[i++],k)
@@ -212,11 +212,11 @@
 #define PK_READ_3_BYTE() (k= PK_READ_2_BYTE(),k= k<<8,k= k+data[i++],k)
 #define PK_READ_4_BYTE() (k= PK_READ_3_BYTE(),k= k<<8,k= k+data[i++],k)
 /*:341*//*343:*/
-#line 6735 "hint.w"
+#line 6730 "hint.w"
 
 #define read_nybble(P) ((P).j&1?((P).data[(P).j++>>1]&0xF):(((P).data[(P).j++>>1]>>4)&0xF))
 /*:343*//*344:*/
-#line 6761 "hint.w"
+#line 6756 "hint.w"
 
 static int packed_number(PKparse*p)
 {int i,k;
@@ -235,7 +235,7 @@
 }
 }
 /*:344*//*345:*/
-#line 6790 "hint.w"
+#line 6785 "hint.w"
 
 static void pk_runlength(Gcache*g,unsigned char*data){
 PKparse p;
@@ -277,7 +277,7 @@
 }
 }
 /*:345*//*346:*/
-#line 6842 "hint.w"
+#line 6837 "hint.w"
 
 static void pk_bitmap(Gcache*g,unsigned char*data){
 unsigned char*bits;
@@ -298,7 +298,7 @@
 }
 }
 /*:346*//*347:*/
-#line 6865 "hint.w"
+#line 6860 "hint.w"
 
 
 static void pkunpack_glyph(Gcache*g)
@@ -341,7 +341,7 @@
 nativeSetPK(g);
 }
 /*:347*//*348:*/
-#line 6910 "hint.w"
+#line 6905 "hint.w"
 
 
 static Gcache*hnew_glyph(Font*pk,unsigned int cc);
@@ -427,11 +427,11 @@
 }
 
 /*:348*/
-#line 7632 "hint.w"
+#line 7627 "hint.w"
 
 
 /*309:*/
-#line 5726 "hint.w"
+#line 5754 "hint.w"
 
 struct font_s*hget_font(unsigned char f)
 {Font*fp;
@@ -453,7 +453,7 @@
 }
 fp->s= font_at_size(f)/(double)(1<<16);
 /*338:*/
-#line 6645 "hint.w"
+#line 6640 "hint.w"
 
 if(fp->font_data[0]==0xF7&&fp->font_data[1]==0x59)
 {fp->ff= pk_format;
@@ -460,7 +460,7 @@
 if(!unpack_pk_file(fp)){free(fp);fp= NULL;}
 }
 /*:338*//*357:*/
-#line 7120 "hint.w"
+#line 7115 "hint.w"
 
 else if(unpack_ft_file(fp))
 fp->ff= ft_format;
@@ -469,13 +469,13 @@
 free(fp);fp= NULL;
 }
 /*:357*/
-#line 5746 "hint.w"
+#line 5774 "hint.w"
 
 fonts[f]= fp;
 return fonts[f];
 }
 /*:309*//*311:*/
-#line 5764 "hint.w"
+#line 5792 "hint.w"
 
 static void hfree_glyph_cache(Font*f,bool rm);
 
@@ -489,7 +489,7 @@
 }
 }
 /*:311*//*317:*/
-#line 5924 "hint.w"
+#line 5952 "hint.w"
 
 static void hfree_g0(struct gcache_s**g,bool rm)
 {int i;
@@ -554,7 +554,7 @@
 }
 }
 /*:317*//*319:*/
-#line 6050 "hint.w"
+#line 6078 "hint.w"
 
 Gcache*hget_glyph(Font*f,unsigned int cc)
 {
@@ -574,7 +574,7 @@
 return g;
 }
 /*:319*//*321:*/
-#line 6082 "hint.w"
+#line 6110 "hint.w"
 
 void render_char(int x,int y,struct font_s*f,uint32_t cc,uint8_t s)
 
@@ -590,7 +590,7 @@
 }
 
 /*:321*/
-#line 7634 "hint.w"
+#line 7629 "hint.w"
 
 
 /*:376*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hfonts.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,18 +1,18 @@
 /*375:*/
-#line 7603 "hint.w"
+#line 7598 "hint.w"
 
 #ifndef _HFONTS_H
 #define _HFONTS_H
 
 /*306:*/
-#line 5692 "hint.w"
+#line 5720 "hint.w"
 
 typedef enum{no_format,pk_format,ft_format}FontFormat;
 /*:306*//*307:*/
-#line 5704 "hint.w"
+#line 5732 "hint.w"
 
 /*339:*/
-#line 6684 "hint.w"
+#line 6679 "hint.w"
 
 
 typedef struct
@@ -22,19 +22,19 @@
 unsigned char id;
 }PKfont;
 /*:339*//*351:*/
-#line 7015 "hint.w"
+#line 7010 "hint.w"
 
 typedef struct
 {FT_Face face;
 }FTfont;
 /*:351*//*352:*/
-#line 7022 "hint.w"
+#line 7017 "hint.w"
 
 typedef struct
 {int dummy;
 }FTglyph;
 /*:352*/
-#line 5705 "hint.w"
+#line 5733 "hint.w"
 
 
 typedef struct font_s{
@@ -44,7 +44,7 @@
 double s;
 double hpxs,vpxs;
 /*313:*/
-#line 5799 "hint.w"
+#line 5827 "hint.w"
 
 struct gcache_s**g0;
 struct gcache_s***g1;
@@ -52,16 +52,16 @@
 struct gcache_s*****g3;
 
 /*:313*/
-#line 5713 "hint.w"
+#line 5741 "hint.w"
 
 FontFormat ff;
 union{PKfont pk;FTfont tt;};
 }Font;
 /*:307*//*318:*/
-#line 6011 "hint.w"
+#line 6039 "hint.w"
 
 /*340:*/
-#line 6697 "hint.w"
+#line 6692 "hint.w"
 
 typedef struct
 {unsigned char flag;
@@ -68,7 +68,7 @@
 unsigned char*encoding;
 }PKglyph;
 /*:340*//*342:*/
-#line 6724 "hint.w"
+#line 6719 "hint.w"
 
 typedef struct{
 int j;
@@ -77,7 +77,7 @@
 unsigned char*data;
 }PKparse;
 /*:342*/
-#line 6012 "hint.w"
+#line 6040 "hint.w"
 
 
 struct gcache_s{
@@ -93,7 +93,7 @@
 };
 typedef struct gcache_s Gcache;
 /*:318*/
-#line 7607 "hint.w"
+#line 7602 "hint.w"
 
 
 

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
 /*372:*/
-#line 7524 "hint.w"
+#line 7519 "hint.w"
 
 #include "basetypes.h"
 #include <string.h> 
@@ -209,17 +209,25 @@
 #line 3129 "hint.w"
 
 #define HGET_IMAGE(I) \
-{ pointer p;\
-  p= get_node(image_node_size);  type(p)= whatsit_node; subtype(p)= image_node;\
-  HGET16(image_no(p));RNG("Section number",image_no(p),3,max_section_no);  \
-  if (I&b010) {HGET32(image_width(p)); HGET32(image_height(p));} \
-  else image_width(p)= image_height(p)= 0;\
-  if (I&b001) {HGET_STRETCH(image_stretch(p),image_stretch_order(p)); \
-               HGET_STRETCH(image_shrink(p),image_shrink_order(p));}\
-  else { image_stretch(p)= image_shrink(p)= 0;image_stretch_order(p)= image_shrink_order(p)= normal;}\
-  tail_append(p);}
+{pointer p; float32_t a= 0.0; scaled w,h;\
+p= get_node(image_node_size);  type(p)= whatsit_node; subtype(p)= image_node;\
+HGET16(image_no(p));RNG("Section number",image_no(p),3,max_section_no);  \
+if ((I)&b100) { a= hget_float32();\
+  if ((I)==b111) {w= hget_xdimen_node();h= hget_xdimen_node();}\
+  else if ((I)==b110) {h= hget_xdimen_ref(HGET8);w= hget_xdimen_node();}\
+  else if ((I)==b101) {w= hget_xdimen_ref(HGET8);h= hget_xdimen_node();}\
+  else  {w= hget_xdimen_ref(HGET8);h= hget_xdimen_ref(HGET8);}\
+  if (a!=0.0) { if (h==0) h= round(w/a); else if (w==0) w= round(h*a);\
+  else if (w> round(h*a)) w= round(h*a); else if (h> round(w/a)) h= round(w/a);}}\
+else if((I)==b011) {HGET32(w);HGET32(h);} \
+else if((I)==b010) { a= hget_float32(); HGET32(w); h= round(w/a);}\
+else if((I)==b001){ a= hget_float32(); HGET32(h); w= round(h*a);}\
+if (w==0 || h==0) QUIT("Incomplete dimensions in image %d",image_no(p));\
+image_width(p)= w; image_height(p)= h;\
+image_alt(p)= hget_list_pointer();\
+tail_append(p);}
 /*:189*//*193:*/
-#line 3171 "hint.w"
+#line 3194 "hint.w"
 
 #define HGET_LINK(I) \
 { pointer p;\
@@ -230,7 +238,7 @@
   label_has_name(p)= 0;\
   tail_append(p);}
 /*:193*/
-#line 7536 "hint.w"
+#line 7531 "hint.w"
 
 /*84:*/
 #line 1303 "hint.w"
@@ -400,20 +408,29 @@
  subtype(p)= HTEG8;RNG("Stream",subtype(p),1,254);\
  tail_append(p);}
 /*:186*//*190:*/
-#line 3142 "hint.w"
+#line 3150 "hint.w"
 
 #define HTEG_IMAGE(I) \
-{ pointer p;\
-  p= get_node(image_node_size);  type(p)= whatsit_node; subtype(p)= image_node;\
-  if (I&b001) {HTEG_STRETCH(image_shrink(p),image_shrink_order(p));\
-               HTEG_STRETCH(image_stretch(p),image_stretch_order(p)); }\
-  else { image_stretch(p)= image_shrink(p)= 0;image_stretch_order(p)= image_shrink_order(p)= normal;}\
-  if (I&b010) {HTEG32(image_height(p)); HTEG32(image_width(p)); } \
-  else image_width(p)= image_height(p)= 0;\
-  HTEG16(image_no(p));RNG("Section number",image_no(p),3,max_section_no);  \
-  tail_append(p);}
+{ pointer p; float32_t a= 0.0; scaled w,h;\
+p= get_node(image_node_size);  type(p)= whatsit_node; subtype(p)= image_node;\
+image_alt(p)= hteg_list_pointer();\
+if ((I)&b100) {\
+  if ((I)==b111) {h= hteg_xdimen_node();w= hteg_xdimen_node();}\
+  else if ((I)==b110) {w= hteg_xdimen_node();h= hget_xdimen_ref(HTEG8);}\
+  else if ((I)==b101) {h= hteg_xdimen_node();w= hget_xdimen_ref(HTEG8);}\
+  else  {h= hget_xdimen_ref(HTEG8);w= hget_xdimen_ref(HTEG8);}\
+  a= hteg_float32();\
+  if (a!=0.0) { if (h==0) h= round(w/a); else if (w==0) w= round(h*a);\
+  else if (w> round(h*a)) w= round(h*a); else if (h> round(w/a)) h= round(w/a); }}\
+else if((I)==b011) {HTEG32(h);HTEG32(w);} \
+else if((I)==b010) {  HTEG32(w); a= hteg_float32(); h= round(w/a);}\
+else if((I)==b001){ HTEG32(h); a= hteg_float32();  w= round(h*a);}\
+HTEG16(image_no(p));RNG("Section number",image_no(p),3,max_section_no);  \
+if (w==0 || h==0) QUIT("Incomplete dimensions in image %d",image_no(p));\
+image_width(p)= w; image_height(p)= h;\
+tail_append(p);}
 /*:190*//*194:*/
-#line 3182 "hint.w"
+#line 3205 "hint.w"
 
 #define HTEG_LINK(I) \
 { pointer p;\
@@ -424,7 +441,7 @@
   label_has_name(p)= 0;\
   tail_append(p);}
 /*:194*/
-#line 7537 "hint.w"
+#line 7532 "hint.w"
 
 
 /*21:*/
@@ -455,7 +472,7 @@
 struct ParamDef*next;
 Param p;}ParamDef;
 /*:37*/
-#line 7539 "hint.w"
+#line 7534 "hint.w"
 
 
 
@@ -535,16 +552,16 @@
 
 static ParamDef*line_break_params= NULL;
 /*:162*//*205:*/
-#line 3482 "hint.w"
+#line 3505 "hint.w"
 
 static scaled page_height;
 static scaled top_so_far[8];
 /*:205*//*220:*/
-#line 3760 "hint.w"
+#line 3783 "hint.w"
 
 static uint32_t map[0x10000];
 /*:220*//*225:*/
-#line 3824 "hint.w"
+#line 3847 "hint.w"
 
 #define MAX_PAGE_POS (1<<3) 
 
@@ -552,25 +569,25 @@
 int cur_loc;
 static int lo_loc,hi_loc;
 /*:225*//*242:*/
-#line 4216 "hint.w"
+#line 4240 "hint.w"
 
 scaled hvsize,hhsize;
 /*:242*//*244:*/
-#line 4244 "hint.w"
+#line 4268 "hint.w"
 
 int page_v,page_h,offset_v,offset_h;
 /*:244*//*301:*/
-#line 5519 "hint.w"
+#line 5547 "hint.w"
 
 hint_Link*hint_links= NULL;
 int max_link= -1;
 /*:301*//*359:*/
-#line 7219 "hint.w"
+#line 7214 "hint.w"
 
 jmp_buf error_exit;
 char herror_string[MAX_HERROR];
 /*:359*/
-#line 7542 "hint.w"
+#line 7537 "hint.w"
 
 /*3:*/
 #line 196 "hint.w"
@@ -609,7 +626,7 @@
 
 static scaled hget_xdimen_node(void);
 /*:124*/
-#line 7543 "hint.w"
+#line 7538 "hint.w"
 
 /*9:*/
 #line 253 "hint.w"
@@ -1858,7 +1875,7 @@
 list_ptr(s)= null;flush_node_list(s);
 }
 /*:184*//*224:*/
-#line 3802 "hint.w"
+#line 3825 "hint.w"
 
 
 uint64_t hlocation(pointer p)
@@ -1865,7 +1882,7 @@
 {return PAGE_LOC(map[p],map[p+1]);
 }
 /*:224*//*227:*/
-#line 3848 "hint.w"
+#line 3871 "hint.w"
 
 #define NEXT_PAGE(X) (X= (X+1)&(MAX_PAGE_POS-1))
 #define PREV_PAGE(X) (X= (X-1)&(MAX_PAGE_POS-1))
@@ -1898,7 +1915,7 @@
 
 
 /*:227*//*230:*/
-#line 3910 "hint.w"
+#line 3933 "hint.w"
 
 
 void hloc_set(uint64_t h)
@@ -1912,12 +1929,13 @@
 DBG(DBGPAGE,"loc_set: %d < %d < %d\n",lo_loc,cur_loc,hi_loc);
 }
 /*:230*//*231:*/
-#line 3934 "hint.w"
+#line 3957 "hint.w"
 
 
 void hloc_set_next(pointer p)
 {int i= cur_loc;
 uint64_t h= hlocation(p);
+if(h==page_loc[cur_loc])return;
 
 NEXT_PAGE(i);
 if(i==hi_loc)
@@ -1934,7 +1952,7 @@
 DBG(DBGPAGE,"loc_set_next: %d < %d < %d\n",lo_loc,cur_loc,hi_loc);
 }
 /*:231*//*232:*/
-#line 3970 "hint.w"
+#line 3994 "hint.w"
 
 void hloc_set_prev(pointer p)
 {int i= cur_loc;
@@ -1957,7 +1975,7 @@
 DBG(DBGPAGE,"loc_set_prev: %d < %d < %d\n",lo_loc,cur_loc,hi_loc);
 }
 /*:232*//*245:*/
-#line 4254 "hint.w"
+#line 4278 "hint.w"
 
 static void hset_margins(void)
 {if(cur_page==&(page_def[0])){
@@ -1982,14 +2000,18 @@
 }
 }
 /*:245*//*247:*/
-#line 4286 "hint.w"
+#line 4310 "hint.w"
 
 static void houtput_template(pointer p)
 {pointer q,r;
 if(p==null)return;
 p= vpackage(p,hvsize,exactly,page_max_depth);
-r= new_kern(offset_v);
+if(offset_v!=0)
+{r= new_kern(offset_v);
 link(r)= p;
+}
+else
+r= p;
 q= new_null_box();
 type(q)= vlist_node;
 width(q)= width(p)+offset_h;
@@ -1999,7 +2021,7 @@
 streams[0].p= q;
 }
 /*:247*//*272:*/
-#line 4928 "hint.w"
+#line 4956 "hint.w"
 
 static int trv_string_size= 0;
 static char trv_string[256];
@@ -2028,7 +2050,7 @@
 return trv_string;
 }
 /*:272*//*369:*/
-#line 7453 "hint.w"
+#line 7448 "hint.w"
 
 static pointer leaks[1<<16]= {0};
 
@@ -2069,7 +2091,7 @@
 #endif
 }
 /*:369*/
-#line 7544 "hint.w"
+#line 7539 "hint.w"
 
 /*1:*/
 #line 111 "hint.w"
@@ -2605,7 +2627,7 @@
 return null;
 }
 /*:160*/
-#line 7545 "hint.w"
+#line 7540 "hint.w"
 
 /*80:*/
 #line 1245 "hint.w"
@@ -2816,15 +2838,18 @@
 case TAG(stream_kind,b000):HTEG_STREAM(b000);break;
 case TAG(stream_kind,b010):HTEG_STREAM(b010);break;
 /*:188*//*192:*/
-#line 3162 "hint.w"
+#line 3182 "hint.w"
 
 case TAG(image_kind,b000):hget_image_ref(HTEG8);break;
+case TAG(image_kind,b001):HTEG_IMAGE(b001);break;
+case TAG(image_kind,b010):HTEG_IMAGE(b010);break;
+case TAG(image_kind,b011):HTEG_IMAGE(b011);break;
 case TAG(image_kind,b100):HTEG_IMAGE(b100);break;
 case TAG(image_kind,b101):HTEG_IMAGE(b101);break;
 case TAG(image_kind,b110):HTEG_IMAGE(b110);break;
 case TAG(image_kind,b111):HTEG_IMAGE(b111);break;
 /*:192*//*196:*/
-#line 3199 "hint.w"
+#line 3222 "hint.w"
 
 case TAG(link_kind,b000):HTEG_LINK(b000);break;
 case TAG(link_kind,b001):HTEG_LINK(b001);break;
@@ -2967,7 +2992,7 @@
 }
 
 /*:170*/
-#line 7546 "hint.w"
+#line 7541 "hint.w"
 
 
 /*18:*/
@@ -3251,15 +3276,18 @@
 case TAG(stream_kind,b000):HGET_STREAM(b000);break;
 case TAG(stream_kind,b010):HGET_STREAM(b010);break;
 /*:187*//*191:*/
-#line 3155 "hint.w"
+#line 3172 "hint.w"
 
 case TAG(image_kind,b000):hget_image_ref(HGET8);break;
+case TAG(image_kind,b001):HGET_IMAGE(b001);break;
+case TAG(image_kind,b010):HGET_IMAGE(b010);break;
+case TAG(image_kind,b011):HGET_IMAGE(b011);break;
 case TAG(image_kind,b100):HGET_IMAGE(b100);break;
 case TAG(image_kind,b101):HGET_IMAGE(b101);break;
 case TAG(image_kind,b110):HGET_IMAGE(b110);break;
 case TAG(image_kind,b111):HGET_IMAGE(b111);break;
 /*:191*//*195:*/
-#line 3193 "hint.w"
+#line 3216 "hint.w"
 
 case TAG(link_kind,b000):HGET_LINK(b000);break;
 case TAG(link_kind,b001):HGET_LINK(b001);break;
@@ -3315,7 +3343,7 @@
 {hset_param_list(line_break_params);
 }
 /*:163*//*199:*/
-#line 3326 "hint.w"
+#line 3349 "hint.w"
 
 pointer skip(uint8_t n)
 {return cur_page->s[n].g;}
@@ -3327,7 +3355,7 @@
 {return xdimen(&cur_page->s[n].x);}
 
 /*:199*//*200:*/
-#line 3351 "hint.w"
+#line 3374 "hint.w"
 
 void hpage_init(void)
 {int i;
@@ -3350,7 +3378,7 @@
 }
 }
 /*:200*//*202:*/
-#line 3382 "hint.w"
+#line 3405 "hint.w"
 
 void hflush_contribution_list(void)
 {if(link(contrib_head)!=null)
@@ -3359,7 +3387,7 @@
 }
 }
 /*:202*//*204:*/
-#line 3426 "hint.w"
+#line 3449 "hint.w"
 
 static bool hbuild_page_up(void)
 {
@@ -3371,12 +3399,12 @@
 if(link(contrib_head)==null)return false;
 do{p= link(contrib_head);
 /*209:*/
-#line 3548 "hint.w"
+#line 3571 "hint.w"
 
 switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:
 /*206:*/
-#line 3492 "hint.w"
+#line 3515 "hint.w"
 
 if(page_contents<box_there)
 {if(page_contents==empty)freeze_page_specs(box_there);
@@ -3385,17 +3413,17 @@
 page_total= depth(p)-page_max_depth;
 depth(p)= 0;
 /*207:*/
-#line 3518 "hint.w"
+#line 3541 "hint.w"
 
 {page_top_height= width(top_skip);
 page_total= page_total+page_top_height;
 }
 /*:207*/
-#line 3499 "hint.w"
+#line 3522 "hint.w"
 
 }
 /*208:*/
-#line 3527 "hint.w"
+#line 3550 "hint.w"
 
 {int i;
 for(i= 1;i<=6;i++)
@@ -3404,7 +3432,7 @@
 }
 }
 /*:208*/
-#line 3501 "hint.w"
+#line 3524 "hint.w"
 
 page_total+= page_height+depth(p);
 if(height(p)> page_top_height)
@@ -3414,15 +3442,15 @@
 else
 page_height= height(p);
 /*:206*/
-#line 3551 "hint.w"
+#line 3574 "hint.w"
 goto contribute;
 case whatsit_node:goto contribute;
 case glue_node:/*212:*/
-#line 3586 "hint.w"
+#line 3609 "hint.w"
 
 if(link(p)==null)return false;
 /*213:*/
-#line 3593 "hint.w"
+#line 3616 "hint.w"
 
 #define top_shrink top_so_far[6]
 #define top_total top_so_far[1]
@@ -3435,15 +3463,15 @@
 top_total+= width(q);
 }
 /*:213*/
-#line 3588 "hint.w"
+#line 3611 "hint.w"
 
 if(page_contents==empty||!precedes_break(link(p)))goto contribute;
 pi= 0;
 /*:212*/
-#line 3553 "hint.w"
+#line 3576 "hint.w"
 break;
 case kern_node:/*214:*/
-#line 3609 "hint.w"
+#line 3632 "hint.w"
 
 top_total+= width(p);
 if(page_contents==empty||
@@ -3452,7 +3480,7 @@
 goto contribute;
 pi= 0;
 /*:214*/
-#line 3554 "hint.w"
+#line 3577 "hint.w"
 break;
 case penalty_node:if(page_contents==empty)goto done1;else pi= penalty(p);break;
 case ins_node:happend_insertion(p);goto contribute;
@@ -3459,14 +3487,14 @@
 default:DBG(DBGTEX,"Unexpected node type %d in build_page_up ignored\n",type(p));
 }
 /*217:*/
-#line 3643 "hint.w"
+#line 3666 "hint.w"
 
 if(pi<inf_penalty)
 {/*215:*/
-#line 3623 "hint.w"
+#line 3646 "hint.w"
 
 /*216:*/
-#line 3634 "hint.w"
+#line 3657 "hint.w"
 
 if(page_total<page_goal)
 {if((page_so_far[3]!=0)||(page_so_far[4]!=0)||(page_so_far[5]!=0))b= 0;
@@ -3475,7 +3503,7 @@
 else if(page_total-page_goal> page_shrink)b= awful_bad;
 else b= badness(page_total-page_goal,page_shrink)
 /*:216*/
-#line 3624 "hint.w"
+#line 3647 "hint.w"
 ;
 if(b<awful_bad)
 {if(pi<=eject_penalty)c= pi;
@@ -3485,7 +3513,7 @@
 else c= b;
 if(insert_penalties>=10000)c= awful_bad;
 /*:215*/
-#line 3645 "hint.w"
+#line 3668 "hint.w"
 
 if(c<=least_page_cost)
 {best_page_break= p;best_size= page_goal;
@@ -3499,7 +3527,7 @@
 if((c==awful_bad)||(pi<=eject_penalty))
 {
 /*218:*/
-#line 3673 "hint.w"
+#line 3696 "hint.w"
 
 if(p!=best_page_break)
 {while(link(page_head)!=best_page_break)
@@ -3511,10 +3539,10 @@
 }
 }
 /*:218*/
-#line 3657 "hint.w"
+#line 3680 "hint.w"
 
 /*219:*/
-#line 3691 "hint.w"
+#line 3714 "hint.w"
 
 hloc_set_prev(link(page_head));
 while(true){
@@ -3534,7 +3562,7 @@
 link(page_head)= q;
 best_page_break= null;
 /*:219*/
-#line 3658 "hint.w"
+#line 3681 "hint.w"
 
 hpack_page();
 hfill_page_template();
@@ -3542,11 +3570,11 @@
 }
 }
 /*:217*/
-#line 3559 "hint.w"
+#line 3582 "hint.w"
 
 contribute:
 /*210:*/
-#line 3566 "hint.w"
+#line 3589 "hint.w"
 
 link(contrib_head)= link(p);
 link(p)= link(page_head);
@@ -3554,18 +3582,18 @@
 link(page_head)= p;
 goto done;
 /*:210*/
-#line 3561 "hint.w"
+#line 3584 "hint.w"
 
 done1:/*211:*/
-#line 3574 "hint.w"
+#line 3597 "hint.w"
 
 link(contrib_head)= link(p);link(p)= null;flush_node_list(p);
 /*:211*/
-#line 3562 "hint.w"
+#line 3585 "hint.w"
 
 done:
 /*:209*/
-#line 3436 "hint.w"
+#line 3459 "hint.w"
 ;
 }while(link(contrib_head)!=null);
 tail= contrib_head;
@@ -3572,13 +3600,13 @@
 return false;
 }
 /*:204*//*221:*/
-#line 3767 "hint.w"
+#line 3790 "hint.w"
 
 static void clear_map(void)
 {memset(map,0,sizeof(map));
 }
 /*:221*//*222:*/
-#line 3780 "hint.w"
+#line 3803 "hint.w"
 
 void store_map(pointer p,uint32_t pos0,uint32_t offset)
 {map[p]= pos0;
@@ -3589,7 +3617,7 @@
 {return map[p];
 }
 /*:222*//*229:*/
-#line 3890 "hint.w"
+#line 3913 "hint.w"
 
 void hloc_init(void)
 {cur_loc= 0;
@@ -3598,7 +3626,7 @@
 DBG(DBGPAGE,"loc_init: %d < %d < %d\n",lo_loc,cur_loc,hi_loc);
 }
 /*:229*//*234:*/
-#line 4026 "hint.w"
+#line 4050 "hint.w"
 
 int hint_begin(void)
 {if(!hint_map())return 0;
@@ -3635,7 +3663,7 @@
 hclear_dir();
 }
 /*:234*//*238:*/
-#line 4129 "hint.w"
+#line 4153 "hint.w"
 
 bool hint_forward(void)
 {hpage_init();
@@ -3649,7 +3677,7 @@
 return false;
 }
 /*:238*//*239:*/
-#line 4170 "hint.w"
+#line 4194 "hint.w"
 
 bool hint_backward(void)
 {hpage_init();
@@ -3663,7 +3691,7 @@
 return false;
 }
 /*:239*//*241:*/
-#line 4198 "hint.w"
+#line 4222 "hint.w"
 
 bool flush_pages(uint32_t pos)
 {pointer p= link(head);
@@ -3680,18 +3708,18 @@
 return false;
 }
 /*:241*//*263:*/
-#line 4712 "hint.w"
+#line 4740 "hint.w"
 
 int hint_get_outline_max(void)
 {return max_outline;}
 /*:263*//*268:*/
-#line 4792 "hint.w"
+#line 4820 "hint.w"
 
 hint_Outline*hint_get_outlines(void)
 {return hint_outlines;
 }
 /*:268*//*270:*/
-#line 4851 "hint.w"
+#line 4879 "hint.w"
 
 static bool trv_ignore= false;
 static bool trv_skip_space= false;
@@ -3757,7 +3785,7 @@
 }
 }
 /*:270*/
-#line 7548 "hint.w"
+#line 7543 "hint.w"
 
 
 /*:372*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hint.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
 /*371:*/
-#line 7511 "hint.w"
+#line 7506 "hint.w"
 
 #ifndef _HINT_H_
 #define _HINT_H_
@@ -43,13 +43,13 @@
 
 extern void hteg_par_node(uint32_t offset);
 /*:171*//*197:*/
-#line 3262 "hint.w"
+#line 3285 "hint.w"
 
 extern pointer*pointer_def[32];
 extern scaled*dimen_def;
 extern int32_t*integer_def;
 /*:197*//*198:*/
-#line 3317 "hint.w"
+#line 3340 "hint.w"
 
 extern Stream*streams;
 extern bool flush_pages(uint32_t pos);
@@ -58,15 +58,15 @@
 extern int count(uint8_t n);
 extern scaled dimen(uint8_t n);
 /*:198*//*201:*/
-#line 3374 "hint.w"
+#line 3397 "hint.w"
 
 extern void hpage_init(void);
 /*:201*//*203:*/
-#line 3391 "hint.w"
+#line 3414 "hint.w"
 
 extern void hflush_contribution_list(void);
 /*:203*//*223:*/
-#line 3794 "hint.w"
+#line 3817 "hint.w"
 
 #define HINT_NO_LOC 0xFFFFFFFFFFFFFFFF
 #define PAGE_LOC(POS0,OFF) (((uint64_t)((POS0)+(OFF))<<32) + (uint64_t)(OFF))
@@ -74,12 +74,12 @@
 #define LOC_OFF(P) ((P)&0xFFFFFFFF) 
 #define LOC_POS0(P) (LOC_POS(P)-LOC_OFF(P)) 
 /*:223*//*226:*/
-#line 3831 "hint.w"
+#line 3854 "hint.w"
 
 extern uint64_t page_loc[];
 extern int cur_loc;
 /*:226*//*228:*/
-#line 3880 "hint.w"
+#line 3903 "hint.w"
 
 extern void hloc_clear(void);
 extern bool hloc_next(void);
@@ -86,7 +86,7 @@
 extern bool hloc_prev(void);
 extern uint64_t hlocation(pointer p);
 /*:228*//*233:*/
-#line 3995 "hint.w"
+#line 4019 "hint.w"
 
 extern void hloc_init(void);
 extern void store_map(pointer p,uint32_t pos,uint32_t offset);
@@ -94,7 +94,7 @@
 extern void hloc_set(uint64_t h);
 extern void hloc_set_next(pointer p);
 /*:233*//*235:*/
-#line 4064 "hint.w"
+#line 4088 "hint.w"
 
 extern int hint_begin(void);
 extern void hint_end(void);
@@ -101,16 +101,16 @@
 extern bool hint_map(void);
 extern void hint_unmap(void);
 /*:235*//*240:*/
-#line 4188 "hint.w"
+#line 4212 "hint.w"
 
 extern bool hint_forward(void);
 extern bool hint_backward(void);
 /*:240*//*243:*/
-#line 4219 "hint.w"
+#line 4243 "hint.w"
 
 extern scaled hvsize,hhsize;
 /*:243*//*264:*/
-#line 4725 "hint.w"
+#line 4753 "hint.w"
 
 typedef struct{
 uint64_t pos;
@@ -121,7 +121,7 @@
 }hint_Outline;
 extern hint_Outline*hint_outlines;
 /*:264*//*265:*/
-#line 4743 "hint.w"
+#line 4771 "hint.w"
 
 #define LABEL_UNDEF 0
 #define LABEL_TOP 1
@@ -128,19 +128,19 @@
 #define LABEL_BOT 2
 #define LABEL_MID 3
 /*:265*//*269:*/
-#line 4802 "hint.w"
+#line 4830 "hint.w"
 
 extern int hint_get_outline_max(void);
 extern hint_Outline*hint_get_outlines(void);
 extern uint64_t hint_outline_page(int i);
 /*:269*//*271:*/
-#line 4917 "hint.w"
+#line 4945 "hint.w"
 
 extern void trv_init(void(*f)(uint32_t c));
 extern void trv_vlist(pointer p);
 extern void trv_hlist(pointer p);
 /*:271*//*300:*/
-#line 5509 "hint.w"
+#line 5537 "hint.w"
 
 typedef struct{
 uint64_t pos;
@@ -150,17 +150,17 @@
 extern hint_Link*hint_links;
 extern int max_link;
 /*:300*//*305:*/
-#line 5671 "hint.w"
+#line 5699 "hint.w"
 
 extern int hint_find_link(scaled x,scaled y,scaled precission);
 extern uint64_t hint_link_page(int i);
 /*:305*//*370:*/
-#line 7494 "hint.w"
+#line 7489 "hint.w"
 
 extern void leak_in(pointer p,int s);
 extern void leak_out(pointer p,int s);
 /*:370*/
-#line 7518 "hint.w"
+#line 7513 "hint.w"
 
 
 #endif

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
 /*374:*/
-#line 7583 "hint.w"
+#line 7578 "hint.w"
 
 #include "basetypes.h"
 #include "error.h"
@@ -13,57 +13,57 @@
 #include "hint.h"
 
 /*310:*/
-#line 5753 "hint.w"
+#line 5781 "hint.w"
 
 extern struct font_s*hget_font(unsigned char f);
 /*:310*//*322:*/
-#line 6098 "hint.w"
+#line 6126 "hint.w"
 
 extern void render_char(int x,int y,struct font_s*f,uint32_t cc,uint8_t s);
 /*:322*/
-#line 7595 "hint.w"
+#line 7590 "hint.w"
 
 
 /*236:*/
-#line 4093 "hint.w"
+#line 4117 "hint.w"
 
 double xdpi= 600.0,ydpi= 600.0;
 /*:236*//*254:*/
-#line 4452 "hint.w"
+#line 4480 "hint.w"
 
 static bool forward_mode= false,backward_mode= false;
 /*:254*//*273:*/
-#line 4964 "hint.w"
+#line 4992 "hint.w"
 
 static char*m_str;
 static int m_length,m_chars;
 /*:273*//*277:*/
-#line 5035 "hint.w"
+#line 5063 "hint.w"
 
 #define MAX_M_DIST 512
 static uint8_t m_dist[MAX_M_DIST+5];
 static int m_ptr,m_max;
 /*:277*//*280:*/
-#line 5136 "hint.w"
+#line 5164 "hint.w"
 
 static int m_state,m_spaces;
 static uint32_t m_d;
 /*:280*//*285:*/
-#line 5258 "hint.w"
+#line 5286 "hint.w"
 
 static int m_focus;
 static uint64_t m_page;
 /*:285*//*288:*/
-#line 5294 "hint.w"
+#line 5322 "hint.w"
 
 static bool c_ignore;
 static int m_style;
 /*:288*//*296:*/
-#line 5463 "hint.w"
+#line 5491 "hint.w"
 
 static int cur_link= -1;
 /*:296*//*325:*/
-#line 6140 "hint.w"
+#line 6169 "hint.w"
 
 static scaled cur_h,cur_v;
 static scaled rule_ht,rule_dp,rule_wd;
@@ -71,10 +71,10 @@
 static struct font_s*cur_fp;
 static uint8_t cur_style= 0;
 /*:325*/
-#line 7597 "hint.w"
+#line 7592 "hint.w"
 
 /*237:*/
-#line 4097 "hint.w"
+#line 4121 "hint.w"
 
 void hint_resize(int px_h,int px_v,double x_dpi,double y_dpi)
 {
@@ -96,7 +96,7 @@
 backward_mode= false;
 }
 /*:237*//*248:*/
-#line 4317 "hint.w"
+#line 4345 "hint.w"
 
 
 uint64_t hint_page_top(uint64_t h)
@@ -117,7 +117,7 @@
 return h;
 }
 /*:248*//*249:*/
-#line 4340 "hint.w"
+#line 4368 "hint.w"
 
 uint64_t hint_page_get(void)
 {
@@ -127,7 +127,7 @@
 return page_loc[cur_loc];
 }
 /*:249*//*250:*/
-#line 4356 "hint.w"
+#line 4384 "hint.w"
 
 uint64_t hint_page(void)
 {uint64_t i;
@@ -139,7 +139,7 @@
 return hint_page_top(i);
 }
 /*:250*//*251:*/
-#line 4372 "hint.w"
+#line 4400 "hint.w"
 
 uint64_t hint_page_home(void)
 {uint64_t pos;
@@ -155,10 +155,10 @@
 pos= ((uint64_t)labels[n].pos0<<32);
 #endif
 /*:71*/
-#line 4377 "hint.w"
+#line 4405 "hint.w"
 
 /*267:*/
-#line 4765 "hint.w"
+#line 4793 "hint.w"
 
 if(where==LABEL_TOP)return hint_page_top(pos);
 else if(where==LABEL_BOT)return hint_page_bottom(pos);
@@ -165,11 +165,11 @@
 else if(where==LABEL_MID)return hint_page_middle(pos);
 else return hint_page_get();
 /*:267*/
-#line 4378 "hint.w"
+#line 4406 "hint.w"
 
 }
 /*:251*//*252:*/
-#line 4399 "hint.w"
+#line 4427 "hint.w"
 
 double hint_get_fpos(void)
 {
@@ -179,7 +179,7 @@
 return(double)LOC_POS(page_loc[cur_loc])/(double)(hend-hstart);
 }
 /*:252*//*253:*/
-#line 4413 "hint.w"
+#line 4441 "hint.w"
 
 uint64_t hint_set_fpos(double fpos)
 {uint32_t pos,pos0;
@@ -214,7 +214,7 @@
 return hint_page_top(PAGE_LOC(pos0,pos-pos0));
 }
 /*:253*//*255:*/
-#line 4457 "hint.w"
+#line 4485 "hint.w"
 
 uint64_t hint_page_next(void)
 {if(hin_addr==NULL)return 0;
@@ -231,7 +231,7 @@
 }
 }
 /*:255*//*256:*/
-#line 4482 "hint.w"
+#line 4510 "hint.w"
 
 uint64_t hint_page_prev(void)
 {if(hin_addr==NULL)return 0;
@@ -249,7 +249,7 @@
 return hint_page_bottom(hint_page_get());
 }
 /*:256*//*257:*/
-#line 4508 "hint.w"
+#line 4536 "hint.w"
 
 uint64_t hint_page_bottom(uint64_t h)
 {if(hin_addr==NULL)return 0;
@@ -264,7 +264,7 @@
 return hint_page_get();
 }
 /*:257*//*258:*/
-#line 4533 "hint.w"
+#line 4561 "hint.w"
 
 uint64_t hint_page_middle(uint64_t l)
 {uint32_t pos,pos0,offset;
@@ -283,11 +283,11 @@
 p= link(contrib_head);
 if(offset> 0)
 {/*259:*/
-#line 4572 "hint.w"
+#line 4600 "hint.w"
 
 {while(p!=null)
 {/*260:*/
-#line 4599 "hint.w"
+#line 4627 "hint.w"
 
 switch(type(p))
 {case hlist_node:case vlist_node:case rule_node:
@@ -310,7 +310,7 @@
 pi= hp= dp= 0;
 }
 /*:260*/
-#line 4574 "hint.w"
+#line 4602 "hint.w"
 
 h+= d+hp;
 d= dp;
@@ -326,7 +326,7 @@
 if(tp==null)ht= h;
 if(ht>=hvsize)
 {/*261:*/
-#line 4626 "hint.w"
+#line 4654 "hint.w"
 
 pointer q= contrib_head;
 scaled dh= ht-hvsize/2;
@@ -334,7 +334,7 @@
 h= d= 0;
 while(p!=null)
 {/*260:*/
-#line 4599 "hint.w"
+#line 4627 "hint.w"
 
 switch(type(p))
 {case hlist_node:case vlist_node:case rule_node:
@@ -357,7 +357,7 @@
 pi= hp= dp= 0;
 }
 /*:260*/
-#line 4632 "hint.w"
+#line 4660 "hint.w"
 
 h= h+d+hp;
 d= dp;
@@ -372,19 +372,19 @@
 link(contrib_head)= p;
 }
 /*:261*/
-#line 4588 "hint.w"
+#line 4616 "hint.w"
 
 goto found;
 }
 }
 /*:259*/
-#line 4550 "hint.w"
+#line 4578 "hint.w"
 
 }
 else if(p!=null&&type(p)==penalty_node)
 pi= penalty(p);
 /*262:*/
-#line 4651 "hint.w"
+#line 4679 "hint.w"
 
 {pointer h_save= link(contrib_head);
 pointer t_save= tail;
@@ -402,7 +402,7 @@
 else
 p= link(p);
 /*260:*/
-#line 4599 "hint.w"
+#line 4627 "hint.w"
 
 switch(type(p))
 {case hlist_node:case vlist_node:case rule_node:
@@ -425,7 +425,7 @@
 pi= hp= dp= 0;
 }
 /*:260*/
-#line 4667 "hint.w"
+#line 4695 "hint.w"
 
 h= h+dp+hp;
 if(pi<best_pi)
@@ -456,7 +456,7 @@
 hpos= hpos_save;
 }
 /*:262*/
-#line 4554 "hint.w"
+#line 4582 "hint.w"
 
 found:
 hloc_set(PAGE_LOC(pos0,offset));
@@ -466,7 +466,7 @@
 return hint_page_get();
 }
 /*:258*//*266:*/
-#line 4754 "hint.w"
+#line 4782 "hint.w"
 
 uint64_t hint_outline_page(int i)
 {uint64_t pos;
@@ -475,7 +475,7 @@
 pos= hint_outlines[i].pos;
 where= hint_outlines[i].where;
 /*267:*/
-#line 4765 "hint.w"
+#line 4793 "hint.w"
 
 if(where==LABEL_TOP)return hint_page_top(pos);
 else if(where==LABEL_BOT)return hint_page_bottom(pos);
@@ -482,17 +482,17 @@
 else if(where==LABEL_MID)return hint_page_middle(pos);
 else return hint_page_get();
 /*:267*/
-#line 4761 "hint.w"
+#line 4789 "hint.w"
 
 }
 /*:266*//*274:*/
-#line 4969 "hint.w"
+#line 4997 "hint.w"
 
 void hint_set_mark(char*m,int s)
 {m_str= m;
 m_length= s;
 /*275:*/
-#line 4980 "hint.w"
+#line 5008 "hint.w"
 
 if(m_length> 0)
 {int i,j,k;
@@ -508,12 +508,12 @@
 m_chars= m_length-j;
 }
 /*:275*/
-#line 4973 "hint.w"
+#line 5001 "hint.w"
 
 hmark_page();
 }
 /*:274*//*278:*/
-#line 5069 "hint.w"
+#line 5097 "hint.w"
 
 static void m_put(uint32_t d)
 {if(m_ptr<MAX_M_DIST)
@@ -550,7 +550,7 @@
 }
 }
 /*:278*//*279:*/
-#line 5110 "hint.w"
+#line 5138 "hint.w"
 
 static int m_next(int i)
 {while((0x80&m_dist[i])==0)i++;
@@ -565,7 +565,7 @@
 return i;
 }
 /*:279*//*281:*/
-#line 5141 "hint.w"
+#line 5169 "hint.w"
 
 static void next_m_char(uint32_t c)
 {
@@ -586,7 +586,7 @@
 }
 else
 /*282:*/
-#line 5175 "hint.w"
+#line 5203 "hint.w"
 
 {int i= 0,j= 0;
 do{
@@ -598,13 +598,13 @@
 goto reconsider;
 }
 /*:282*/
-#line 5160 "hint.w"
+#line 5188 "hint.w"
 
 
 
 }
 /*:281*//*283:*/
-#line 5188 "hint.w"
+#line 5216 "hint.w"
 
 #if 0
 static void next_m_space(void)
@@ -626,7 +626,7 @@
 }
 #endif
 /*:283*//*284:*/
-#line 5211 "hint.w"
+#line 5239 "hint.w"
 
 #if 0
 static void vlist_mark(pointer p);
@@ -673,7 +673,7 @@
 }
 #endif
 /*:284*//*286:*/
-#line 5264 "hint.w"
+#line 5292 "hint.w"
 
 void hmark_page(void)
 {if(streams==NULL||streams[0].p==null)return;
@@ -695,13 +695,13 @@
 if(m_focus>=m_max)m_focus= 0;
 }
 /*:286*//*293:*/
-#line 5379 "hint.w"
+#line 5407 "hint.w"
 
 void c_ignore_list(pointer p)
 {while(p!=null)
 {if(is_char_node(p))
 {/*290:*/
-#line 5319 "hint.w"
+#line 5347 "hint.w"
 
 {while(m_d==0)
 {m_style^= MARK_BIT;
@@ -717,7 +717,7 @@
 m_d--;
 }
 /*:290*/
-#line 5383 "hint.w"
+#line 5411 "hint.w"
 
 cur_style|= m_style;
 }
@@ -729,7 +729,7 @@
 {pointer q= lig_ptr(p);
 while(q!=null)
 {/*290:*/
-#line 5319 "hint.w"
+#line 5347 "hint.w"
 
 {while(m_d==0)
 {m_style^= MARK_BIT;
@@ -745,7 +745,7 @@
 m_d--;
 }
 /*:290*/
-#line 5393 "hint.w"
+#line 5421 "hint.w"
 
 cur_style|= m_style;
 q= link(q);
@@ -758,7 +758,7 @@
 }
 }
 /*:293*//*294:*/
-#line 5426 "hint.w"
+#line 5454 "hint.w"
 
 bool hint_prev_mark(void)
 {m_focus= m_prev(m_focus);
@@ -779,7 +779,7 @@
 return(m_focus!=0);
 }
 /*:294*//*302:*/
-#line 5527 "hint.w"
+#line 5555 "hint.w"
 
 static int links_allocated= 0;
 void add_new_link(int n,pointer p,scaled h,scaled v)
@@ -809,7 +809,7 @@
 pos= ((uint64_t)labels[n].pos0<<32);
 #endif
 /*:71*/
-#line 5546 "hint.w"
+#line 5574 "hint.w"
 
 t->where= where;
 t->pos= pos;
@@ -837,7 +837,7 @@
 t->bottom= v;
 }
 /*:302*//*303:*/
-#line 5596 "hint.w"
+#line 5624 "hint.w"
 
 static scaled hlink_distance(scaled x,scaled y,hint_Link*t)
 {scaled d,dx= 0,dy= 0;
@@ -893,7 +893,7 @@
 }
 }
 /*:303*//*304:*/
-#line 5656 "hint.w"
+#line 5684 "hint.w"
 
 uint64_t hint_link_page(int i)
 {uint64_t h;
@@ -907,7 +907,7 @@
 else return hint_page_get();
 }
 /*:304*//*323:*/
-#line 6105 "hint.w"
+#line 6133 "hint.w"
 
 static void render_rule(int x,int y,int w,int h)
 {if(w> 0&&h> 0)
@@ -914,7 +914,7 @@
 nativeRule(SP2PT(x),SP2PT(y),SP2PT(w),SP2PT(h));
 }
 /*:323*//*324:*/
-#line 6116 "hint.w"
+#line 6145 "hint.w"
 
 void render_image(int x,int y,int w,int h,uint32_t n)
 {
@@ -925,7 +925,7 @@
 hpos= spos;hstart= sstart;hend= send;
 }
 /*:324*//*326:*/
-#line 6148 "hint.w"
+#line 6177 "hint.w"
 
 static void vlist_render(pointer this_box);
 
@@ -960,7 +960,7 @@
 base_line= cur_v;
 left_edge= cur_h;
 /*299:*/
-#line 5493 "hint.w"
+#line 5521 "hint.w"
 
 if(cur_link>=0)
 {add_new_link(cur_link,this_box,cur_h,cur_v);
@@ -968,7 +968,7 @@
 cur_link= -1;
 }
 /*:299*/
-#line 6181 "hint.w"
+#line 6210 "hint.w"
 
 while(p!=null)
 {
@@ -985,7 +985,7 @@
 if(!c_ignore&&c!=' ')
 {cur_style= cur_style&~(MARK_BIT|FOCUS_BIT);
 /*290:*/
-#line 5319 "hint.w"
+#line 5347 "hint.w"
 
 {while(m_d==0)
 {m_style^= MARK_BIT;
@@ -1001,7 +1001,7 @@
 m_d--;
 }
 /*:290*/
-#line 6196 "hint.w"
+#line 6225 "hint.w"
 
 cur_style|= m_style;
 }
@@ -1051,7 +1051,7 @@
 goto fin_rule;
 case whatsit_node:
 /*292:*/
-#line 5356 "hint.w"
+#line 5384 "hint.w"
 
 if(subtype(p)==ignore_node)
 {if(ignore_info(p)==1)
@@ -1063,10 +1063,10 @@
 c_ignore= false;
 }
 /*:292*/
-#line 6244 "hint.w"
+#line 6273 "hint.w"
 
 else/*297:*/
-#line 5467 "hint.w"
+#line 5495 "hint.w"
 
 if(subtype(p)==start_link_node)
 {cur_style|= LINK_BIT;
@@ -1079,29 +1079,12 @@
 local_link= -1;
 }
 /*:297*/
-#line 6245 "hint.w"
+#line 6274 "hint.w"
 
 else if(subtype(p)==image_node)
 {scaled h,w;
 w= image_width(p);
 h= image_height(p);
-if(g_sign!=normal)
-{if(g_sign==stretching)
-{if(image_stretch_order(p)==g_order)
-{vet_glue((double)(glue_set(this_box))*image_stretch(p));
-w= w+round(glue_temp);
-}
-}
-else if(image_shrink_order(p)==g_order)
-{vet_glue((double)(glue_set(this_box))*image_shrink(p));
-w= w-round(glue_temp);
-}
-}
-if(w!=image_width(p))
-{double f;
-f= (double)w/(double)image_width(p);
-h= round((double)h*f);
-}
 render_image(cur_h,cur_v,w,h,image_no(p));
 cur_h= cur_h+w;
 }
@@ -1174,7 +1157,7 @@
 f= font(lig_char(p));
 c= character(lig_char(p));
 /*291:*/
-#line 5338 "hint.w"
+#line 5366 "hint.w"
 
 if(!c_ignore)
 {pointer q;
@@ -1182,7 +1165,7 @@
 q= lig_ptr(p);
 while(q!=null)
 {/*290:*/
-#line 5319 "hint.w"
+#line 5347 "hint.w"
 
 {while(m_d==0)
 {m_style^= MARK_BIT;
@@ -1198,7 +1181,7 @@
 m_d--;
 }
 /*:290*/
-#line 5344 "hint.w"
+#line 5372 "hint.w"
 
 cur_style|= m_style;
 q= link(q);
@@ -1205,7 +1188,7 @@
 }
 }
 /*:291*/
-#line 6338 "hint.w"
+#line 6350 "hint.w"
 
 goto render_c;
 default:;
@@ -1232,7 +1215,7 @@
 }
 }
 /*298:*/
-#line 5483 "hint.w"
+#line 5511 "hint.w"
 
 if(local_link>=0)
 {end_new_link(local_link,this_box,cur_h,cur_v);
@@ -1239,7 +1222,7 @@
 cur_link= local_link;
 }
 /*:298*/
-#line 6363 "hint.w"
+#line 6375 "hint.w"
 
 }
 
@@ -1298,23 +1281,6 @@
 {scaled h,w;
 w= image_width(p);
 h= image_height(p);
-if(g_sign!=normal)
-{if(g_sign==stretching)
-{if(image_stretch_order(p)==g_order)
-{vet_glue((double)(glue_set(this_box))*image_stretch(p));
-h= h+round(glue_temp);
-}
-}
-else if(image_shrink_order(p)==g_order)
-{vet_glue((double)(glue_set(this_box))*image_shrink(p));
-h= h-round(glue_temp);
-}
-}
-if(h!=image_height(p))
-{double f;
-f= (double)h/(double)image_height(p);
-w= round((double)w*f);
-}
 cur_v= cur_v+h;
 render_image(cur_h,cur_v,w,h,image_no(p));
 }
@@ -1409,7 +1375,7 @@
 }
 
 /*:326*//*327:*/
-#line 6538 "hint.w"
+#line 6533 "hint.w"
 
 uint64_t hint_blank(void)
 {nativeBlank();
@@ -1416,7 +1382,7 @@
 return 0;
 }
 /*:327*//*328:*/
-#line 6547 "hint.w"
+#line 6542 "hint.w"
 
 
 void hint_render(void)
@@ -1427,11 +1393,11 @@
 cur_f= -1;cur_fp= NULL;
 cur_link= -1;max_link= -1;
 /*289:*/
-#line 5312 "hint.w"
+#line 5340 "hint.w"
 
 m_ptr= 0;m_d= 0;m_style= MARK_BIT;c_ignore= false;cur_style= 0;
 /*:289*/
-#line 6556 "hint.w"
+#line 6551 "hint.w"
 
 if(type(streams[0].p)==vlist_node)
 vlist_render(streams[0].p);
@@ -1439,6 +1405,6 @@
 hlist_render(streams[0].p);
 }
 /*:328*/
-#line 7598 "hint.w"
+#line 7593 "hint.w"
 
 /*:374*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/hrender.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,23 +1,23 @@
 /*373:*/
-#line 7553 "hint.w"
+#line 7548 "hint.w"
 
 #ifndef _HRENDER_H
 #define _HRENDER_H
 /*276:*/
-#line 5002 "hint.w"
+#line 5030 "hint.w"
 
 #define MARK_BIT 0x1
 #define FOCUS_BIT 0x2
 /*:276*//*295:*/
-#line 5452 "hint.w"
+#line 5480 "hint.w"
 
 #define LINK_BIT 0x4
 /*:295*//*320:*/
-#line 6079 "hint.w"
+#line 6107 "hint.w"
 
 #define SP2PT(X) ((X)/(double)(1<<16))
 /*:320*/
-#line 7556 "hint.w"
+#line 7551 "hint.w"
 
 
 extern int page_h,page_v;

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -16,12 +16,12 @@
 #ifdef STAT
 #include "hprint.h"
 #endif
-/*121:*/
+/*120:*/
 #line 2578 "htex.w"
 
 pointer temp_ptr;
 
-/*:121*//*122:*/
+/*:120*//*121:*/
 #line 2610 "htex.w"
 
 memory_word mem0[mem_max-mem_min+1],*const mem= mem0-mem_min;
@@ -28,7 +28,7 @@
 pointer lo_mem_max;
 pointer hi_mem_min;
 
-/*:122*//*123:*/
+/*:121*//*122:*/
 #line 2623 "htex.w"
 
 static int var_used,dyn_used;
@@ -40,18 +40,18 @@
 #define decr_dyn_used
 #endif
 
-/*:123*//*124:*/
+/*:122*//*123:*/
 #line 2647 "htex.w"
 
 static pointer avail;
 
-/*:124*//*130:*/
+/*:123*//*129:*/
 #line 2750 "htex.w"
 
 static pointer rover;
 
-/*:130*//*659:*/
-#line 13058 "htex.w"
+/*:129*//*658:*/
+#line 13057 "htex.w"
 
 static scaled total_stretch0[filll-normal+1],
 *const total_stretch= total_stretch0-normal,
@@ -58,25 +58,25 @@
 total_shrink0[filll-normal+1],*const total_shrink= total_shrink0-normal;
 
 
-/*:659*//*661:*/
-#line 13070 "htex.w"
+/*:658*//*660:*/
+#line 13069 "htex.w"
 
 pointer adjust_tail= null;
 
-/*:661*//*830:*/
-#line 16195 "htex.w"
+/*:660*//*829:*/
+#line 16194 "htex.w"
 
 pointer just_box;
 
-/*:830*//*838:*/
-#line 16332 "htex.w"
+/*:829*//*837:*/
+#line 16331 "htex.w"
 
 static pointer passive;
 static pointer printed_node;
 static halfword pass_number;
 
-/*:838*//*841:*/
-#line 16372 "htex.w"
+/*:837*//*840:*/
+#line 16371 "htex.w"
 
 static scaled active_width0[6],*const active_width= active_width0-1;
 
@@ -85,13 +85,13 @@
 static scaled background0[6],*const background= background0-1;
 static scaled break_width0[6],*const break_width= break_width0-1;
 
-/*:841*//*844:*/
-#line 16431 "htex.w"
+/*:840*//*843:*/
+#line 16430 "htex.w"
 
 static bool no_shrink_error_yet;
 
-/*:844*//*848:*/
-#line 16474 "htex.w"
+/*:843*//*847:*/
+#line 16473 "htex.w"
 
 static pointer cur_p;
 static bool second_pass;
@@ -98,8 +98,8 @@
 static bool final_pass;
 static int threshold;
 
-/*:848*//*854:*/
-#line 16576 "htex.w"
+/*:847*//*853:*/
+#line 16575 "htex.w"
 
 static int minimal_demerits0[tight_fit-very_loose_fit+1],
 *const minimal_demerits= minimal_demerits0-very_loose_fit;
@@ -113,13 +113,13 @@
 *const best_pl_line= best_pl_line0-very_loose_fit;
 
 
-/*:854*//*861:*/
-#line 16698 "htex.w"
+/*:853*//*860:*/
+#line 16697 "htex.w"
 
 static scaled disc_width;
 
-/*:861*//*870:*/
-#line 16841 "htex.w"
+/*:860*//*869:*/
+#line 16840 "htex.w"
 
 static halfword easy_line;
 static halfword last_special_line;
@@ -130,8 +130,8 @@
 static scaled first_indent;
 static scaled second_indent;
 
-/*:870*//*896:*/
-#line 17347 "htex.w"
+/*:869*//*895:*/
+#line 17346 "htex.w"
 
 static pointer best_bet;
 static int fewest_demerits;
@@ -141,14 +141,14 @@
 static int line_diff;
 
 
-/*:896*//*997:*/
-#line 19151 "htex.w"
+/*:895*//*996:*/
+#line 19150 "htex.w"
 
 scaled best_height_plus_depth;
 
 
-/*:997*//*1006:*/
-#line 19353 "htex.w"
+/*:996*//*1005:*/
+#line 19352 "htex.w"
 
 pointer page_tail;
 int page_contents;
@@ -157,18 +157,18 @@
 int least_page_cost;
 scaled best_size;
 
-/*:1006*//*1008:*/
-#line 19435 "htex.w"
+/*:1005*//*1007:*/
+#line 19434 "htex.w"
 
 scaled page_so_far[8];
 int insert_penalties;
 
 
-/*:1008*/
+/*:1007*/
 #line 271 "htex.w"
 
 
-/*98:*/
+/*97:*/
 #line 2100 "htex.w"
 
 void overflow(char*s,int n)
@@ -175,7 +175,7 @@
 {QUIT("Capacity exceeded, sorry [%s=%d=0x%X]\n",s,n,n);
 }
 
-/*:98*//*99:*/
+/*:97*//*98:*/
 #line 2113 "htex.w"
 
 void confusion(char*s)
@@ -182,12 +182,12 @@
 
 {QUIT("This can't happen(%s)",s);}
 
-/*:99*/
+/*:98*/
 #line 273 "htex.w"
 
 #endif
 
-/*:4*//*104:*/
+/*:4*//*103:*/
 #line 2180 "htex.w"
 
 
@@ -196,13 +196,13 @@
 else return x/2;
 }
 
-/*:104*//*109:*/
+/*:103*//*108:*/
 #line 2278 "htex.w"
 
 static bool arith_error;
 static scaled rem;
 
-/*:109*//*111:*/
+/*:108*//*110:*/
 #line 2302 "htex.w"
 
 static scaled x_over_n(scaled x,int n)
@@ -224,7 +224,7 @@
 if(negative)negate(rem);
 return x_over_n;}
 
-/*:111*//*112:*/
+/*:110*//*111:*/
 #line 2329 "htex.w"
 
 static scaled xn_over_d(scaled x,int n,int d)
@@ -246,7 +246,7 @@
 }
 return xn_over_d;}
 
-/*:112*//*113:*/
+/*:111*//*112:*/
 #line 2369 "htex.w"
 
 halfword badness(scaled t,scaled s)
@@ -262,7 +262,7 @@
 }
 }
 
-/*:113*//*126:*/
+/*:112*//*125:*/
 #line 2666 "htex.w"
 
 static pointer get_avail(void)
@@ -285,7 +285,7 @@
 return p;
 }
 
-/*:126*//*129:*/
+/*:125*//*128:*/
 #line 2713 "htex.w"
 
 static void flush_list(pointer p)
@@ -302,7 +302,7 @@
 }
 }
 
-/*:129*//*131:*/
+/*:128*//*130:*/
 #line 2761 "htex.w"
 
 pointer get_node(int s)
@@ -312,7 +312,7 @@
 int r;
 int t;
 restart:p= rover;
-do{/*133:*/
+do{/*132:*/
 #line 2813 "htex.w"
 
 q= p+node_size(p);
@@ -324,7 +324,7 @@
 q= q+node_size(q);
 }
 r= q-s;
-if(r> p+1)/*134:*/
+if(r> p+1)/*133:*/
 #line 2828 "htex.w"
 
 {node_size(p)= r-p;
@@ -333,11 +333,11 @@
 goto found;
 }
 
-/*:134*/
+/*:133*/
 #line 2823 "htex.w"
 ;
 if(r==p)if(rlink(p)!=p)
-/*135:*/
+/*134:*/
 #line 2837 "htex.w"
 
 {rover= rlink(p);t= llink(p);
@@ -345,12 +345,12 @@
 goto found;
 }
 
-/*:135*/
+/*:134*/
 #line 2825 "htex.w"
 ;
 node_size(p)= q-p
 
-/*:133*/
+/*:132*/
 #line 2770 "htex.w"
 ;
 
@@ -360,7 +360,7 @@
 {return max_halfword;
 }
 if(lo_mem_max+2<hi_mem_min)if(lo_mem_max+2<=mem_bot+max_halfword)
-/*132:*/
+/*131:*/
 #line 2798 "htex.w"
 
 {if(hi_mem_min-lo_mem_max>=1998)t= lo_mem_max+1000;
@@ -373,7 +373,7 @@
 rover= q;goto restart;
 }
 
-/*:132*/
+/*:131*/
 #line 2778 "htex.w"
 ;
 overflow("main memory size",mem_max+1-mem_min);
@@ -388,7 +388,7 @@
 return r;
 }
 
-/*:131*//*136:*/
+/*:130*//*135:*/
 #line 2848 "htex.w"
 
 static void free_node(pointer p,halfword s)
@@ -405,7 +405,7 @@
 
 }
 
-/*:136*//*142:*/
+/*:135*//*141:*/
 #line 2999 "htex.w"
 
 pointer new_null_box(void)
@@ -417,7 +417,7 @@
 return p;
 }
 
-/*:142*//*145:*/
+/*:141*//*144:*/
 #line 3030 "htex.w"
 
 pointer new_rule(void)
@@ -428,7 +428,7 @@
 return p;
 }
 
-/*:145*//*150:*/
+/*:144*//*149:*/
 #line 3100 "htex.w"
 
 pointer new_ligature(quarterword f,quarterword c,pointer q)
@@ -439,7 +439,7 @@
 }
 
 
-/*:150*//*151:*/
+/*:149*//*150:*/
 #line 3134 "htex.w"
 
 pointer new_disc(void)
@@ -449,7 +449,7 @@
 return p;
 }
 
-/*:151*//*153:*/
+/*:150*//*152:*/
 #line 3169 "htex.w"
 
 pointer new_math(scaled w,small_number s)
@@ -458,7 +458,7 @@
 subtype(p)= s;width(p)= w;return p;
 }
 
-/*:153*//*157:*/
+/*:152*//*156:*/
 #line 3252 "htex.w"
 
 pointer new_spec(pointer p)
@@ -469,7 +469,7 @@
 return q;
 }
 
-/*:157*//*159:*/
+/*:156*//*158:*/
 #line 3279 "htex.w"
 
 pointer new_glue(pointer q)
@@ -479,7 +479,7 @@
 return p;
 }
 
-/*:159*//*162:*/
+/*:158*//*161:*/
 #line 3318 "htex.w"
 
 pointer new_kern(scaled w)
@@ -490,7 +490,7 @@
 return p;
 }
 
-/*:162*//*164:*/
+/*:161*//*163:*/
 #line 3342 "htex.w"
 
 pointer new_penalty(int m)
@@ -500,12 +500,12 @@
 penalty(p)= m;return p;
 }
 
-/*:164*//*170:*/
+/*:163*//*169:*/
 #line 3422 "htex.w"
 
 void mem_init(void)
 {int k;
-/*171:*/
+/*170:*/
 #line 3428 "htex.w"
 
 for(k= mem_bot+1;k<=lo_mem_stat_max;k++)mem[k].sc= 0;
@@ -524,34 +524,34 @@
 lo_mem_max= rover+1000;link(lo_mem_max)= null;info(lo_mem_max)= null;
 for(k= hi_mem_stat_min;k<=mem_top;k++)
 mem[k]= mem[lo_mem_max];
-/*805:*/
-#line 15738 "htex.w"
+/*804:*/
+#line 15737 "htex.w"
 
 info(omit_template)= end_template_token;
 
-/*:805*//*812:*/
-#line 15845 "htex.w"
+/*:804*//*811:*/
+#line 15844 "htex.w"
 
 link(end_span)= max_quarterword+1;info(end_span)= null;
 
-/*:812*//*836:*/
-#line 16301 "htex.w"
+/*:811*//*835:*/
+#line 16300 "htex.w"
 
 type(last_active)= hyphenated;line_number(last_active)= max_halfword;
 subtype(last_active)= 0;
 
-/*:836*//*1007:*/
-#line 19406 "htex.w"
+/*:835*//*1006:*/
+#line 19405 "htex.w"
 
 subtype(page_ins_head)= qi(255);
 type(page_ins_head)= split_up;link(page_ins_head)= page_ins_head;
 
-/*:1007*//*1014:*/
-#line 19562 "htex.w"
+/*:1006*//*1013:*/
+#line 19561 "htex.w"
 
 type(page_head)= glue_node;subtype(page_head)= normal;
 
-/*:1014*/
+/*:1013*/
 #line 3445 "htex.w"
 ;
 avail= null;
@@ -559,13 +559,13 @@
 var_used= lo_mem_stat_max+1-mem_bot;dyn_used= hi_mem_stat_usage;
 
 
-/*:171*/
+/*:170*/
 #line 3425 "htex.w"
 
 }
 
-/*:170*//*210:*/
-#line 3978 "htex.w"
+/*:169*//*209:*/
+#line 3976 "htex.w"
 
 static void delete_token_ref(pointer p)
 
@@ -573,18 +573,19 @@
 else decr(token_ref_count(p));
 }
 
-/*:210*//*211:*/
-#line 3993 "htex.w"
+/*:209*//*210:*/
+#line 3991 "htex.w"
 
 void delete_glue_ref(pointer p)
 fast_delete_glue_ref(p)
 static void delete_xdimen_ref(pointer p)
-{if(xdimen_ref_count(p)==null)free_node(p,xdimen_node_size);
+{if(p==null)return;
+if(xdimen_ref_count(p)==null)free_node(p,xdimen_node_size);
 else decr(xdimen_ref_count(p));
 }
 
-/*:211*//*212:*/
-#line 4006 "htex.w"
+/*:210*//*211:*/
+#line 4005 "htex.w"
 
 void flush_node_list(pointer p)
 {
@@ -604,19 +605,19 @@
 delete_glue_ref(split_top_ptr(p));
 free_node(p,ins_node_size);goto done;
 }
-case whatsit_node:/*1388:*/
-#line 25389 "htex.w"
+case whatsit_node:/*1387:*/
+#line 25382 "htex.w"
 
 {switch(subtype(p)){
 case close_node:case language_node:free_node(p,small_node_size);break;
+case param_node:
+if(param_type(p)==glue_type)fast_delete_glue_ref(param_value(p).i);
+free_node(p,param_node_size);break;
 case par_node:
-if(par_type(p)==glue_type)fast_delete_glue_ref(par_value(p).i);
+delete_xdimen_ref(par_extent(p));
+flush_node_list(par_params(p));
+flush_node_list(par_list(p));
 free_node(p,par_node_size);break;
-case graf_node:
-delete_xdimen_ref(graf_extent(p));
-flush_node_list(graf_params(p));
-flush_node_list(graf_list(p));
-free_node(p,graf_node_size);break;
 case disp_node:
 flush_node_list(display_eqno(p));
 flush_node_list(display_formula(p));
@@ -633,6 +634,7 @@
 flush_node_list(list_ptr(p));
 free_node(p,set_node_size);break;
 case image_node:
+flush_node_list(image_alt(p));
 free_node(p,image_node_size);break;
 case align_node:
 delete_xdimen_ref(align_extent(p));
@@ -679,8 +681,8 @@
 goto done;
 }
 
-/*:1388*/
-#line 4025 "htex.w"
+/*:1387*/
+#line 4024 "htex.w"
 
 case glue_node:{fast_delete_glue_ref(glue_ptr(p));
 if(leader_ptr(p)!=null)flush_node_list(leader_ptr(p));
@@ -700,8 +702,8 @@
 }
 }
 
-/*:212*//*214:*/
-#line 4069 "htex.w"
+/*:211*//*213:*/
+#line 4068 "htex.w"
 
 pointer copy_node_list(pointer p)
 
@@ -711,13 +713,13 @@
 int words;
 h= get_avail();q= h;
 while(p!=null)
-{/*215:*/
-#line 4085 "htex.w"
+{/*214:*/
+#line 4084 "htex.w"
 
 words= 1;
 if(is_char_node(p))r= get_avail();
-else/*216:*/
-#line 4094 "htex.w"
+else/*215:*/
+#line 4093 "htex.w"
 
 switch(type(p)){
 case hlist_node:case vlist_node:case unset_node:{r= get_node(box_node_size);
@@ -732,8 +734,8 @@
 ins_ptr(r)= copy_node_list(ins_ptr(p));
 words= ins_node_size-1;
 }break;
-case whatsit_node:/*1387:*/
-#line 25271 "htex.w"
+case whatsit_node:/*1386:*/
+#line 25264 "htex.w"
 
 switch(subtype(p)){
 case open_node:{r= get_node(open_node_size);words= open_node_size;
@@ -744,18 +746,18 @@
 case close_node:case language_node:{r= get_node(small_node_size);
 words= small_node_size;
 }break;
+case param_node:
+{r= get_node(param_node_size);
+if(param_type(p)==glue_type)add_glue_ref(param_value(p).i);
+words= param_node_size;
+}break;
 case par_node:
 {r= get_node(par_node_size);
-if(par_type(p)==glue_type)add_glue_ref(par_value(p).i);
-words= par_node_size;
+add_xdimen_ref(par_extent(p));
+par_params(r)= copy_node_list(par_params(p));
+par_list(r)= copy_node_list(par_list(p));
+words= par_node_size-1;
 }break;
-case graf_node:
-{r= get_node(graf_node_size);
-add_xdimen_ref(graf_extent(p));
-graf_params(r)= copy_node_list(graf_params(p));
-graf_list(r)= copy_node_list(graf_list(p));
-words= graf_node_size-1;
-}break;
 case disp_node:
 {r= get_node(disp_node_size);
 display_left(r)= display_left(p);
@@ -771,22 +773,22 @@
 }break;
 case hpack_node:case vpack_node:
 {r= get_node(pack_node_size);
-pack_m(r)= pack_m(p);
+mem[r+7]= mem[p+7];mem[r+6]= mem[p+6];mem[r+5]= mem[p+5];
 list_ptr(r)= copy_node_list(list_ptr(p));
 add_xdimen_ref(pack_extent(p));
-pack_limit(r)= pack_limit(p);
-words= pack_node_size-3;
+words= 5;
 }break;
 case hset_node:case vset_node:
 {r= get_node(set_node_size);
 mem[r+8]= mem[p+8];mem[r+7]= mem[p+7];mem[r+6]= mem[p+6];mem[r+5]= mem[p+5];
+list_ptr(r)= copy_node_list(list_ptr(p));
 add_xdimen_ref(set_extent(p));
-list_ptr(r)= copy_node_list(list_ptr(p));
 words= 5;
 }break;
 case image_node:
 r= get_node(image_node_size);
-words= image_node_size;
+image_alt(r)= copy_node_list(image_alt(p));
+words= image_node_size-1;
 break;
 case align_node:
 {r= get_node(align_node_size);
@@ -852,8 +854,8 @@
 
 }
 
-/*:1387*/
-#line 4109 "htex.w"
+/*:1386*/
+#line 4108 "htex.w"
 break;
 case glue_node:{r= get_node(small_node_size);add_glue_ref(glue_ptr(p));
 glue_ptr(r)= glue_ptr(p);leader_ptr(r)= copy_node_list(leader_ptr(p));
@@ -879,15 +881,15 @@
 
 }
 
-/*:216*/
-#line 4089 "htex.w"
+/*:215*/
+#line 4088 "htex.w"
 ;
 while(words> 0)
 {decr(words);mem[r+words]= mem[p+words];
 }
 
-/*:215*/
-#line 4078 "htex.w"
+/*:214*/
+#line 4077 "htex.w"
 ;
 link(q)= r;q= r;p= link(p);
 }
@@ -895,12 +897,12 @@
 return q;
 }
 
-/*:214*//*225:*/
-#line 4459 "htex.w"
+/*:213*//*224:*/
+#line 4458 "htex.w"
 
 
-/*223:*/
-#line 4440 "htex.w"
+/*222:*/
+#line 4439 "htex.w"
 
 static list_state_record nest[nest_size+1];
 int nest_ptr;
@@ -907,8 +909,8 @@
 static int max_nest_stack;
 list_state_record cur_list;
 
-/*:223*/
-#line 4461 "htex.w"
+/*:222*/
+#line 4460 "htex.w"
 
 
 void list_init(void)
@@ -918,8 +920,8 @@
 mode= vmode;head= contrib_head;tail= contrib_head;
 prev_height= prev_depth= ignore_depth;
 }
-/*:225*//*227:*/
-#line 4479 "htex.w"
+/*:224*//*226:*/
+#line 4478 "htex.w"
 
 void push_nest(void)
 {if(nest_ptr> max_nest_stack)
@@ -932,15 +934,15 @@
 cur_list.bs_pos= NULL;cur_bs= baseline_skip;cur_ls= line_skip;cur_lsl= line_skip_limit;
 }
 
-/*:227*//*228:*/
-#line 4496 "htex.w"
+/*:226*//*227:*/
+#line 4495 "htex.w"
 
 void pop_nest(void)
 {free_avail(head);decr(nest_ptr);cur_list= nest[nest_ptr];
 }
 
-/*:228*//*561:*/
-#line 10872 "htex.w"
+/*:227*//*560:*/
+#line 10871 "htex.w"
 
 memory_word font_info[font_mem_size+1];
 
@@ -990,8 +992,8 @@
 *const font_false_bchar= font_false_bchar0-font_base;
 
 
-/*:561*//*562:*/
-#line 10930 "htex.w"
+/*:560*//*561:*/
+#line 10929 "htex.w"
 
 int char_base0[font_max-font_base+1],
 *const char_base= char_base0-font_base;
@@ -1021,8 +1023,8 @@
 *const param_base= param_base0-font_base;
 
 
-/*:562*//*572:*/
-#line 11085 "htex.w"
+/*:561*//*571:*/
+#line 11084 "htex.w"
 
 void read_font_info(int f,char*nom,scaled s)
 {
@@ -1037,19 +1039,19 @@
 scaled z;
 int alpha;int beta;
 
+/*573:*/
+#line 11133 "htex.w"
+
 /*574:*/
-#line 11134 "htex.w"
+#line 11145 "htex.w"
 
-/*575:*/
-#line 11146 "htex.w"
-
 file_opened= true
 
-/*:575*/
-#line 11135 "htex.w"
+/*:574*/
+#line 11134 "htex.w"
 ;
-/*577:*/
-#line 11170 "htex.w"
+/*576:*/
+#line 11169 "htex.w"
 
 {read_sixteen(lf);
 fget;read_sixteen(lh);
@@ -1071,11 +1073,11 @@
 if((nw==0)||(nh==0)||(nd==0)||(ni==0))abort;
 }
 
-/*:577*/
-#line 11136 "htex.w"
+/*:576*/
+#line 11135 "htex.w"
 ;
-/*578:*/
-#line 11197 "htex.w"
+/*577:*/
+#line 11196 "htex.w"
 
 lf= lf-6-lh;
 if(np<7)lf= lf+7-np;
@@ -1091,11 +1093,11 @@
 exten_base[f]= kern_base[f]+kern_base_offset+nk;
 param_base[f]= exten_base[f]+ne
 
-/*:578*/
-#line 11137 "htex.w"
+/*:577*/
+#line 11136 "htex.w"
 ;
-/*580:*/
-#line 11225 "htex.w"
+/*579:*/
+#line 11224 "htex.w"
 
 {if(lh<2)abort;
 store_four_quarters(font_check[f]);
@@ -1112,11 +1114,11 @@
 font_size[f]= z;
 }
 
-/*:580*/
-#line 11138 "htex.w"
+/*:579*/
+#line 11137 "htex.w"
 ;
-/*581:*/
-#line 11241 "htex.w"
+/*580:*/
+#line 11240 "htex.w"
 
 for(k= fmem_ptr;k<=width_base[f]-1;k++)
 {store_four_quarters(font_info[k].qqqq);
@@ -1125,8 +1127,8 @@
 switch(c%4){
 case lig_tag:if(d>=nl)abort;break;
 case ext_tag:if(d>=ne)abort;break;
-case list_tag:/*582:*/
-#line 11262 "htex.w"
+case list_tag:/*581:*/
+#line 11261 "htex.w"
 
 {check_byte_range(d);
 while(d<current_character_being_worked_on)
@@ -1138,21 +1140,21 @@
 if(d==current_character_being_worked_on)abort;
 not_found:;}
 
-/*:582*/
-#line 11249 "htex.w"
+/*:581*/
+#line 11248 "htex.w"
 break;
 default:do_nothing;
 }
 }
 
-/*:581*/
-#line 11139 "htex.w"
+/*:580*/
+#line 11138 "htex.w"
 ;
-/*583:*/
-#line 11297 "htex.w"
+/*582:*/
+#line 11296 "htex.w"
 
-{/*584:*/
-#line 11307 "htex.w"
+{/*583:*/
+#line 11306 "htex.w"
 
 {alpha= 16;
 while(z>=040000000)
@@ -1161,8 +1163,8 @@
 beta= 256/alpha;alpha= alpha*z;
 }
 
-/*:584*/
-#line 11298 "htex.w"
+/*:583*/
+#line 11297 "htex.w"
 ;
 for(k= width_base[f];k<=lig_kern_base[f]-1;k++)
 store_scaled(font_info[k].sc);
@@ -1172,11 +1174,11 @@
 if(font_info[italic_base[f]].sc!=0)abort;
 }
 
-/*:583*/
-#line 11140 "htex.w"
+/*:582*/
+#line 11139 "htex.w"
 ;
-/*585:*/
-#line 11321 "htex.w"
+/*584:*/
+#line 11320 "htex.w"
 
 bch_label= 077777;bchar= 256;
 if(nl> 0)
@@ -1197,11 +1199,11 @@
 for(k= kern_base[f]+kern_base_offset;k<=exten_base[f]-1;k++)
 store_scaled(font_info[k].sc);
 
-/*:585*/
-#line 11141 "htex.w"
+/*:584*/
+#line 11140 "htex.w"
 ;
-/*586:*/
-#line 11341 "htex.w"
+/*585:*/
+#line 11340 "htex.w"
 
 for(k= exten_base[f];k<=param_base[f]-1;k++)
 {store_four_quarters(font_info[k].qqqq);
@@ -1211,11 +1213,11 @@
 check_existence(d);
 }
 
-/*:586*/
-#line 11142 "htex.w"
+/*:585*/
+#line 11141 "htex.w"
 ;
-/*587:*/
-#line 11353 "htex.w"
+/*586:*/
+#line 11352 "htex.w"
 
 {for(k= 1;k<=np;k++)
 if(k==1)
@@ -1229,11 +1231,11 @@
 for(k= np+1;k<=7;k++)font_info[param_base[f]+k-1].sc= 0;
 }
 
-/*:587*/
-#line 11143 "htex.w"
+/*:586*/
+#line 11142 "htex.w"
 ;
-/*588:*/
-#line 11373 "htex.w"
+/*587:*/
+#line 11372 "htex.w"
 
 if(np>=7)font_params[f]= np;else font_params[f]= 7;
 hyphen_char[f]= skew_char[f]= -1;
@@ -1252,19 +1254,19 @@
 decr(param_base[f]);
 fmem_ptr= fmem_ptr+lf;goto done
 
-/*:588*/
-#line 11144 "htex.w"
+/*:587*/
+#line 11143 "htex.w"
 
 
-/*:574*/
-#line 11101 "htex.w"
+/*:573*/
+#line 11100 "htex.w"
 ;
 bad_tfm:QUIT("Bad tfm file: %s\n",nom);
 done:;
 }
 
-/*:572*//*594:*/
-#line 11476 "htex.w"
+/*:571*//*593:*/
+#line 11475 "htex.w"
 
 pointer new_character(internal_font_number f,eight_bits c)
 {pointer p;
@@ -1276,8 +1278,8 @@
 return p;
 }
 
-/*:594*//*663:*/
-#line 13077 "htex.w"
+/*:593*//*662:*/
+#line 13076 "htex.w"
 
 pointer hpack(pointer p,scaled w,small_number m)
 {
@@ -1293,8 +1295,8 @@
 r= get_node(box_node_size);type(r)= hlist_node;
 subtype(r)= min_quarterword;shift_amount(r)= 0;
 q= r+list_offset;link(q)= p;
-h= 0;/*664:*/
-#line 13103 "htex.w"
+h= 0;/*663:*/
+#line 13102 "htex.w"
 
 d= 0;x= 0;
 total_stretch[normal]= 0;total_shrink[normal]= 0;
@@ -1302,16 +1304,16 @@
 total_stretch[fill]= 0;total_shrink[fill]= 0;
 total_stretch[filll]= 0;total_shrink[filll]= 0
 
-/*:664*/
-#line 13092 "htex.w"
+/*:663*/
+#line 13091 "htex.w"
 ;
-while(p!=null)/*665:*/
-#line 13110 "htex.w"
+while(p!=null)/*664:*/
+#line 13109 "htex.w"
 
 
 {reswitch:while(is_char_node(p))
-/*668:*/
-#line 13155 "htex.w"
+/*667:*/
+#line 13154 "htex.w"
 
 {f= font(p);i= char_info(f,character(p));hd= height_depth(i);
 x= x+char_width(f,i);
@@ -1320,15 +1322,15 @@
 p= link(p);
 }
 
-/*:668*/
-#line 13114 "htex.w"
+/*:667*/
+#line 13113 "htex.w"
 ;
 if(p!=null)
 {switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:
 case unset_node:
-/*667:*/
-#line 13143 "htex.w"
+/*666:*/
+#line 13142 "htex.w"
 
 {x= x+width(p);
 if(type(p)>=rule_node)s= 0;else s= shift_amount(p);
@@ -1336,12 +1338,12 @@
 if(depth(p)+s> d)d= depth(p)+s;
 }
 
-/*:667*/
-#line 13120 "htex.w"
+/*:666*/
+#line 13119 "htex.w"
 break;
 case ins_node:case mark_node:case adjust_node:if(adjust_tail!=null)
-/*669:*/
-#line 13170 "htex.w"
+/*668:*/
+#line 13169 "htex.w"
 
 {while(link(q)!=p)q= link(q);
 if(type(p)==adjust_node)
@@ -1354,25 +1356,22 @@
 link(q)= p;p= q;
 }
 
-/*:669*/
-#line 13122 "htex.w"
+/*:668*/
+#line 13121 "htex.w"
 break;
-case whatsit_node:/*1390:*/
-#line 25471 "htex.w"
+case whatsit_node:/*1389:*/
+#line 25462 "htex.w"
 
 if(subtype(p)==image_node)
-{glue_ord o;
-if(image_height(p)> h)h= image_height(p);
+{if(image_height(p)> h)h= image_height(p);
 x= x+image_width(p);
-o= image_stretch_order(p);total_stretch[o]= total_stretch[o]+image_stretch(p);
-o= image_shrink_order(p);total_shrink[o]= total_shrink[o]+image_shrink(p);
 }
 
-/*:1390*/
-#line 13123 "htex.w"
+/*:1389*/
+#line 13122 "htex.w"
 ;break;
-case glue_node:/*670:*/
-#line 13182 "htex.w"
+case glue_node:/*669:*/
+#line 13181 "htex.w"
 
 {g= glue_ptr(p);x= x+width(g);
 o= stretch_order(g);total_stretch[o]= total_stretch[o]+stretch(g);
@@ -1384,19 +1383,19 @@
 }
 }
 
-/*:670*/
-#line 13124 "htex.w"
+/*:669*/
+#line 13123 "htex.w"
 break;
 case kern_node:case math_node:x= x+width(p);break;
-case ligature_node:/*666:*/
-#line 13134 "htex.w"
+case ligature_node:/*665:*/
+#line 13133 "htex.w"
 
 {mem[lig_trick]= mem[lig_char(p)];link(lig_trick)= link(p);
 p= lig_trick;goto reswitch;
 }
 
-/*:666*/
-#line 13126 "htex.w"
+/*:665*/
+#line 13125 "htex.w"
 
 default:do_nothing;
 }
@@ -1405,13 +1404,13 @@
 }
 
 
-/*:665*/
-#line 13095 "htex.w"
+/*:664*/
+#line 13094 "htex.w"
 ;
 if(adjust_tail!=null)link(adjust_tail)= null;
 height(r)= h;depth(r)= d;
-/*671:*/
-#line 13196 "htex.w"
+/*670:*/
+#line 13195 "htex.w"
 
 if(m==additional)w= x+w;
 width(r)= w;x= w-x;
@@ -1420,11 +1419,11 @@
 set_glue_ratio_zero(glue_set(r));
 goto end;
 }
-else if(x> 0)/*672:*/
-#line 13209 "htex.w"
+else if(x> 0)/*671:*/
+#line 13208 "htex.w"
 
-{/*673:*/
-#line 13220 "htex.w"
+{/*672:*/
+#line 13219 "htex.w"
 
 if(total_stretch[filll]!=0)o= filll;
 else if(total_stretch[fill]!=0)o= fill;
@@ -1431,8 +1430,8 @@
 else if(total_stretch[fil]!=0)o= fil;
 else o= normal
 
-/*:673*/
-#line 13210 "htex.w"
+/*:672*/
+#line 13209 "htex.w"
 ;
 glue_order(r)= o;glue_sign(r)= stretching;
 if(total_stretch[o]!=0)glue_set(r)= unfloat(x/(double)total_stretch[o]);
@@ -1443,14 +1442,14 @@
 goto end;
 }
 
-/*:672*/
-#line 13205 "htex.w"
+/*:671*/
+#line 13204 "htex.w"
 
-else/*678:*/
-#line 13265 "htex.w"
+else/*677:*/
+#line 13264 "htex.w"
 
-{/*679:*/
-#line 13278 "htex.w"
+{/*678:*/
+#line 13277 "htex.w"
 
 if(total_shrink[filll]!=0)o= filll;
 else if(total_shrink[fill]!=0)o= fill;
@@ -1457,8 +1456,8 @@
 else if(total_shrink[fil]!=0)o= fil;
 else o= normal
 
-/*:679*/
-#line 13266 "htex.w"
+/*:678*/
+#line 13265 "htex.w"
 ;
 glue_order(r)= o;glue_sign(r)= shrinking;
 if(total_shrink[o]!=0)glue_set(r)= unfloat((-x)/(double)total_shrink[o]);
@@ -1471,18 +1470,18 @@
 goto end;
 }
 
-/*:678*/
-#line 13207 "htex.w"
+/*:677*/
+#line 13206 "htex.w"
 
 
-/*:671*/
-#line 13099 "htex.w"
+/*:670*/
+#line 13098 "htex.w"
 ;
 end:return r;
 }
 
-/*:663*//*683:*/
-#line 13318 "htex.w"
+/*:662*//*682:*/
+#line 13317 "htex.w"
 
 pointer vpackage(pointer p,scaled h,small_number m,scaled l)
 {
@@ -1494,8 +1493,8 @@
 r= get_node(box_node_size);type(r)= vlist_node;
 subtype(r)= min_quarterword;shift_amount(r)= 0;
 list_ptr(r)= p;
-w= 0;/*664:*/
-#line 13103 "htex.w"
+w= 0;/*663:*/
+#line 13102 "htex.w"
 
 d= 0;x= 0;
 total_stretch[normal]= 0;total_shrink[normal]= 0;
@@ -1503,11 +1502,11 @@
 total_stretch[fill]= 0;total_shrink[fill]= 0;
 total_stretch[filll]= 0;total_shrink[filll]= 0
 
-/*:664*/
-#line 13329 "htex.w"
+/*:663*/
+#line 13328 "htex.w"
 ;
-while(p!=null)/*684:*/
-#line 13342 "htex.w"
+while(p!=null)/*683:*/
+#line 13341 "htex.w"
 
 {if(is_char_node(p))confusion("vpack");
 
@@ -1514,8 +1513,8 @@
 else switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:
 case unset_node:
-/*685:*/
-#line 13359 "htex.w"
+/*684:*/
+#line 13358 "htex.w"
 
 {x= x+d+height(p);d= depth(p);
 if(type(p)>=rule_node)s= 0;else s= shift_amount(p);
@@ -1522,25 +1521,22 @@
 if(width(p)+s> w)w= width(p)+s;
 }
 
-/*:685*/
-#line 13349 "htex.w"
+/*:684*/
+#line 13348 "htex.w"
 break;
-case whatsit_node:/*1389:*/
-#line 25462 "htex.w"
+case whatsit_node:/*1388:*/
+#line 25456 "htex.w"
 
 if(subtype(p)==image_node)
-{glue_ord o;
-if(image_width(p)> w)w= image_width(p);
+{if(image_width(p)> w)w= image_width(p);
 x= x+d+image_height(p);d= 0;
-o= image_stretch_order(p);total_stretch[o]= total_stretch[o]+image_stretch(p);
-o= image_shrink_order(p);total_shrink[o]= total_shrink[o]+image_shrink(p);
 }
 
-/*:1389*/
-#line 13350 "htex.w"
+/*:1388*/
+#line 13349 "htex.w"
 ;break;
-case glue_node:/*686:*/
-#line 13365 "htex.w"
+case glue_node:/*685:*/
+#line 13364 "htex.w"
 
 {x= x+d;d= 0;
 g= glue_ptr(p);x= x+width(g);
@@ -1552,8 +1548,8 @@
 }
 }
 
-/*:686*/
-#line 13351 "htex.w"
+/*:685*/
+#line 13350 "htex.w"
 break;
 case kern_node:{x= x+d+width(p);d= 0;
 }break;
@@ -1562,8 +1558,8 @@
 p= link(p);
 }
 
-/*:684*/
-#line 13331 "htex.w"
+/*:683*/
+#line 13330 "htex.w"
 ;
 width(r)= w;
 if(d> l)
@@ -1570,8 +1566,8 @@
 {x= x+d-l;depth(r)= l;
 }
 else depth(r)= d;
-/*687:*/
-#line 13379 "htex.w"
+/*686:*/
+#line 13378 "htex.w"
 
 if(m==additional)h= x+h;
 height(r)= h;x= h-x;
@@ -1580,11 +1576,11 @@
 set_glue_ratio_zero(glue_set(r));
 goto end;
 }
-else if(x> 0)/*688:*/
-#line 13392 "htex.w"
+else if(x> 0)/*687:*/
+#line 13391 "htex.w"
 
-{/*673:*/
-#line 13220 "htex.w"
+{/*672:*/
+#line 13219 "htex.w"
 
 if(total_stretch[filll]!=0)o= filll;
 else if(total_stretch[fill]!=0)o= fill;
@@ -1591,8 +1587,8 @@
 else if(total_stretch[fil]!=0)o= fil;
 else o= normal
 
-/*:673*/
-#line 13393 "htex.w"
+/*:672*/
+#line 13392 "htex.w"
 ;
 glue_order(r)= o;glue_sign(r)= stretching;
 if(total_stretch[o]!=0)glue_set(r)= unfloat(x/(double)total_stretch[o]);
@@ -1603,14 +1599,14 @@
 goto end;
 }
 
-/*:688*/
-#line 13388 "htex.w"
+/*:687*/
+#line 13387 "htex.w"
 
-else/*691:*/
-#line 13428 "htex.w"
+else/*690:*/
+#line 13427 "htex.w"
 
-{/*679:*/
-#line 13278 "htex.w"
+{/*678:*/
+#line 13277 "htex.w"
 
 if(total_shrink[filll]!=0)o= filll;
 else if(total_shrink[fill]!=0)o= fill;
@@ -1617,8 +1613,8 @@
 else if(total_shrink[fil]!=0)o= fil;
 else o= normal
 
-/*:679*/
-#line 13429 "htex.w"
+/*:678*/
+#line 13428 "htex.w"
 ;
 glue_order(r)= o;glue_sign(r)= shrinking;
 if(total_shrink[o]!=0)glue_set(r)= unfloat((-x)/(double)total_shrink[o]);
@@ -1631,22 +1627,22 @@
 goto end;
 }
 
-/*:691*/
-#line 13390 "htex.w"
+/*:690*/
+#line 13389 "htex.w"
 
 
-/*:687*/
-#line 13338 "htex.w"
+/*:686*/
+#line 13337 "htex.w"
 ;
 end:return r;
 }
 
-/*:683*//*831:*/
-#line 16203 "htex.w"
+/*:682*//*830:*/
+#line 16202 "htex.w"
 
 
-/*694:*/
-#line 13461 "htex.w"
+/*693:*/
+#line 13460 "htex.w"
 
 extern pointer happend_to_vlist(pointer b);
 void append_to_vlist(pointer b,uint32_t offset)
@@ -1665,8 +1661,8 @@
 link(tail)= b;tail= b;prev_depth= depth(b);
 }
 
-/*:694*//*845:*/
-#line 16434 "htex.w"
+/*:693*//*844:*/
+#line 16433 "htex.w"
 
 static pointer finite_shrink(pointer p)
 {pointer q;
@@ -1675,8 +1671,8 @@
 delete_glue_ref(p);return q;
 }
 
-/*:845*//*849:*/
-#line 16497 "htex.w"
+/*:844*//*848:*/
+#line 16496 "htex.w"
 
 static void try_break(int pi,small_number break_type)
 {
@@ -1684,8 +1680,8 @@
 pointer prev_r;
 halfword old_l;
 bool no_break_yet;
-/*850:*/
-#line 16525 "htex.w"
+/*849:*/
+#line 16524 "htex.w"
 
 pointer prev_prev_r;
 pointer s;
@@ -1705,24 +1701,24 @@
 #endif
 scaled shortfall;
 
-/*:850*/
-#line 16504 "htex.w"
+/*:849*/
+#line 16503 "htex.w"
 
-/*851:*/
-#line 16544 "htex.w"
+/*850:*/
+#line 16543 "htex.w"
 
 if(abs(pi)>=inf_penalty)
 if(pi> 0)goto end;
 else pi= eject_penalty
 
-/*:851*/
-#line 16505 "htex.w"
+/*:850*/
+#line 16504 "htex.w"
 ;
 no_break_yet= true;prev_r= active;old_l= 0;
 do_all_six(copy_to_cur_active);
 loop{resume:r= link(prev_r);
-/*852:*/
-#line 16554 "htex.w"
+/*851:*/
+#line 16553 "htex.w"
 
 
 if(type(r)==delta_node)
@@ -1730,11 +1726,11 @@
 prev_prev_r= prev_r;prev_r= r;goto resume;
 }
 
-/*:852*/
-#line 16510 "htex.w"
+/*:851*/
+#line 16509 "htex.w"
 ;
-/*856:*/
-#line 16603 "htex.w"
+/*855:*/
+#line 16602 "htex.w"
 
 {l= line_number(r);
 if(l> old_l)
@@ -1741,23 +1737,23 @@
 {
 if((minimum_demerits<awful_bad)&&
 ((old_l!=easy_line)||(r==last_active)))
-/*857:*/
-#line 16621 "htex.w"
+/*856:*/
+#line 16620 "htex.w"
 
-{if(no_break_yet)/*858:*/
-#line 16657 "htex.w"
+{if(no_break_yet)/*857:*/
+#line 16656 "htex.w"
 
 {no_break_yet= false;do_all_six(set_break_width_to_background);
 s= cur_p;
 if(break_type> unhyphenated)if(cur_p!=null)
-/*862:*/
-#line 16701 "htex.w"
+/*861:*/
+#line 16700 "htex.w"
 
 {t= replace_count(cur_p);v= cur_p;s= post_break(cur_p);
 while(t> 0)
 {decr(t);v= link(v);
-/*863:*/
-#line 16719 "htex.w"
+/*862:*/
+#line 16718 "htex.w"
 
 if(is_char_node(v))
 {f= font(v);
@@ -1775,13 +1771,13 @@
 
 }
 
-/*:863*/
-#line 16705 "htex.w"
+/*:862*/
+#line 16704 "htex.w"
 ;
 }
 while(s!=null)
-{/*864:*/
-#line 16736 "htex.w"
+{/*863:*/
+#line 16735 "htex.w"
 
 if(is_char_node(s))
 {f= font(s);
@@ -1799,8 +1795,8 @@
 
 }
 
-/*:864*/
-#line 16708 "htex.w"
+/*:863*/
+#line 16707 "htex.w"
 ;
 s= link(s);
 }
@@ -1809,14 +1805,14 @@
 
 }
 
-/*:862*/
-#line 16661 "htex.w"
+/*:861*/
+#line 16660 "htex.w"
 ;
 while(s!=null)
 {if(is_char_node(s))goto done;
 switch(type(s)){
-case glue_node:/*859:*/
-#line 16676 "htex.w"
+case glue_node:/*858:*/
+#line 16675 "htex.w"
 
 {v= glue_ptr(s);break_width[1]= break_width[1]-width(v);
 break_width[2+stretch_order(v)]= break_width[2+stretch_order(v)]-stretch(v);
@@ -1823,8 +1819,8 @@
 break_width[6]= break_width[6]-shrink(v);
 }
 
-/*:859*/
-#line 16665 "htex.w"
+/*:858*/
+#line 16664 "htex.w"
 break;
 case penalty_node:do_nothing;break;
 case math_node:break_width[1]= break_width[1]-width(s);break;
@@ -1836,11 +1832,11 @@
 }
 done:;}
 
-/*:858*/
-#line 16622 "htex.w"
+/*:857*/
+#line 16621 "htex.w"
 ;
-/*865:*/
-#line 16762 "htex.w"
+/*864:*/
+#line 16761 "htex.w"
 
 if(type(prev_r)==delta_node)
 {do_all_six(convert_to_break_width);
@@ -1854,8 +1850,8 @@
 link(prev_r)= q;prev_prev_r= prev_r;prev_r= q;
 }
 
-/*:865*/
-#line 16623 "htex.w"
+/*:864*/
+#line 16622 "htex.w"
 ;
 if(abs(adj_demerits)>=awful_bad-minimum_demerits)
 minimum_demerits= awful_bad-1;
@@ -1862,8 +1858,8 @@
 else minimum_demerits= minimum_demerits+abs(adj_demerits);
 for(fit_class= very_loose_fit;fit_class<=tight_fit;fit_class++)
 {if(minimal_demerits[fit_class]<=minimum_demerits)
-/*867:*/
-#line 16792 "htex.w"
+/*866:*/
+#line 16791 "htex.w"
 
 {q= get_node(passive_node_size);
 link(q)= passive;passive= q;cur_break(q)= cur_p;
@@ -1879,8 +1875,8 @@
 link(q)= r;link(prev_r)= q;prev_r= q;
 #ifdef STAT
 if(tracing_paragraphs> 0)
-/*868:*/
-#line 16812 "htex.w"
+/*867:*/
+#line 16811 "htex.w"
 
 {print_nl("@@");print_int(serial(passive));
 
@@ -1893,21 +1889,21 @@
 else print_int(serial(prev_break(passive)));
 }
 
-/*:868*/
-#line 16807 "htex.w"
+/*:867*/
+#line 16806 "htex.w"
 ;
 #endif
 
 }
 
-/*:867*/
-#line 16629 "htex.w"
+/*:866*/
+#line 16628 "htex.w"
 ;
 minimal_demerits[fit_class]= awful_bad;
 }
 minimum_demerits= awful_bad;
-/*866:*/
-#line 16781 "htex.w"
+/*865:*/
+#line 16780 "htex.w"
 
 if(r!=last_active)
 {q= get_node(delta_node_size);link(q)= r;type(q)= delta_node;
@@ -1916,17 +1912,17 @@
 link(prev_r)= q;prev_prev_r= prev_r;prev_r= q;
 }
 
-/*:866*/
-#line 16633 "htex.w"
+/*:865*/
+#line 16632 "htex.w"
 ;
 }
 
-/*:857*/
-#line 16609 "htex.w"
+/*:856*/
+#line 16608 "htex.w"
 ;
 if(r==last_active)goto end;
-/*873:*/
-#line 16886 "htex.w"
+/*872:*/
+#line 16885 "htex.w"
 
 if(l> easy_line)
 {line_width= second_width;old_l= max_halfword-1;
@@ -1937,24 +1933,24 @@
 else line_width= mem[par_shape_ptr+2*l].sc;
 }
 
-/*:873*/
-#line 16611 "htex.w"
+/*:872*/
+#line 16610 "htex.w"
 ;
 }
 }
 
-/*:856*/
-#line 16513 "htex.w"
+/*:855*/
+#line 16512 "htex.w"
 ;
-/*874:*/
-#line 16906 "htex.w"
+/*873:*/
+#line 16905 "htex.w"
 
 {artificial_demerits= false;
 
 shortfall= line_width-cur_active_width[1];
 if(shortfall> 0)
-/*875:*/
-#line 16936 "htex.w"
+/*874:*/
+#line 16935 "htex.w"
 
 if((cur_active_width[3]!=0)||(cur_active_width[4]!=0)||
 (cur_active_width[5]!=0))
@@ -1971,11 +1967,11 @@
 done1:;
 }
 
-/*:875*/
-#line 16912 "htex.w"
+/*:874*/
+#line 16911 "htex.w"
 
-else/*876:*/
-#line 16955 "htex.w"
+else/*875:*/
+#line 16954 "htex.w"
 
 {if(-shortfall> cur_active_width[6])b= inf_bad+1;
 else b= badness(-shortfall,cur_active_width[6]);
@@ -1982,12 +1978,12 @@
 if(b> 12)fit_class= tight_fit;else fit_class= decent_fit;
 }
 
-/*:876*/
-#line 16914 "htex.w"
+/*:875*/
+#line 16913 "htex.w"
 ;
 if((b> inf_bad)||(pi==eject_penalty))
-/*877:*/
-#line 16970 "htex.w"
+/*876:*/
+#line 16969 "htex.w"
 
 {if(final_pass&&(minimum_demerits==awful_bad)&&
 (link(r)==last_active)&&
@@ -1997,19 +1993,19 @@
 node_r_stays_active= false;
 }
 
-/*:877*/
-#line 16917 "htex.w"
+/*:876*/
+#line 16916 "htex.w"
 
 else{prev_r= r;
 if(b> threshold)goto resume;
 node_r_stays_active= true;
 }
-/*878:*/
-#line 16986 "htex.w"
+/*877:*/
+#line 16985 "htex.w"
 
 if(artificial_demerits)d= 0;
-else/*882:*/
-#line 17047 "htex.w"
+else/*881:*/
+#line 17046 "htex.w"
 
 {d= line_penalty+b;
 if(abs(d)>=10000)d= 100000000;else d= d*d;
@@ -2022,17 +2018,17 @@
 if(abs(fit_class-fitness(r))> 1)d= d+adj_demerits;
 }
 
-/*:882*/
-#line 16988 "htex.w"
+/*:881*/
+#line 16987 "htex.w"
 ;
 #ifdef STAT
 if(tracing_paragraphs> 0)
-/*879:*/
-#line 17002 "htex.w"
+/*878:*/
+#line 17001 "htex.w"
 
 {if(printed_node!=cur_p)
-/*880:*/
-#line 17024 "htex.w"
+/*879:*/
+#line 17023 "htex.w"
 
 {print_nl("");
 if(cur_p==null)short_display(link(printed_node));
@@ -2043,8 +2039,8 @@
 printed_node= cur_p;
 }
 
-/*:880*/
-#line 17004 "htex.w"
+/*:879*/
+#line 17003 "htex.w"
 ;
 print_nl("@");
 
@@ -2065,8 +2061,8 @@
 if(artificial_demerits)print_char('*');else print_int(d);
 }
 
-/*:879*/
-#line 16991 "htex.w"
+/*:878*/
+#line 16990 "htex.w"
 ;
 #endif
 
@@ -2078,16 +2074,16 @@
 if(d<minimum_demerits)minimum_demerits= d;
 }
 
-/*:878*/
-#line 16922 "htex.w"
+/*:877*/
+#line 16921 "htex.w"
 ;
 if(node_r_stays_active)goto resume;
-deactivate:/*883:*/
-#line 17069 "htex.w"
+deactivate:/*882:*/
+#line 17068 "htex.w"
 
 link(prev_r)= link(r);free_node(r,active_node_size);
-if(prev_r==active)/*884:*/
-#line 17094 "htex.w"
+if(prev_r==active)/*883:*/
+#line 17093 "htex.w"
 
 {r= link(active);
 if(type(r)==delta_node)
@@ -2097,8 +2093,8 @@
 }
 }
 
-/*:884*/
-#line 17072 "htex.w"
+/*:883*/
+#line 17071 "htex.w"
 
 else if(type(prev_r)==delta_node)
 {r= link(prev_r);
@@ -2114,19 +2110,19 @@
 }
 }
 
-/*:883*/
-#line 16924 "htex.w"
+/*:882*/
+#line 16923 "htex.w"
 ;
 }
 
-/*:874*/
-#line 16516 "htex.w"
+/*:873*/
+#line 16515 "htex.w"
 ;
 }
 end:;
 #ifdef STAT
-/*881:*/
-#line 17039 "htex.w"
+/*880:*/
+#line 17038 "htex.w"
 
 if(cur_p==printed_node)if(cur_p!=null)if(type(cur_p)==disc_node)
 {t= replace_count(cur_p);
@@ -2135,15 +2131,15 @@
 }
 }
 
-/*:881*/
-#line 16520 "htex.w"
+/*:880*/
+#line 16519 "htex.w"
 ;
 #endif
 
 }
 
-/*:849*//*901:*/
-#line 17418 "htex.w"
+/*:848*//*900:*/
+#line 17417 "htex.w"
 
 static void post_line_break(int final_widow_penalty)
 {
@@ -2157,15 +2153,15 @@
 quarterword t;
 int pen;
 halfword cur_line;
-/*902:*/
-#line 17469 "htex.w"
+/*901:*/
+#line 17468 "htex.w"
 
 q= break_node(best_bet);cur_p= null;
 do{r= q;q= prev_break(q);next_break(r)= cur_p;cur_p= r;
 }while(!(q==null))
 
-/*:902*/
-#line 17432 "htex.w"
+/*:901*/
+#line 17431 "htex.w"
 ;
 cur_line= prev_graf+1;
 next_offset= hposition(link(temp_head));
@@ -2185,12 +2181,12 @@
 else
 next_offset= 0;
 }
+/*903:*/
+#line 17505 "htex.w"
+
 /*904:*/
-#line 17506 "htex.w"
+#line 17517 "htex.w"
 
-/*905:*/
-#line 17518 "htex.w"
-
 q= cur_break(cur_p);disc_break= false;post_disc_break= false;
 if(q!=null)
 if(type(q)==glue_node)
@@ -2200,8 +2196,8 @@
 goto done;
 }
 else{if(type(q)==disc_node)
-/*906:*/
-#line 17537 "htex.w"
+/*905:*/
+#line 17536 "htex.w"
 
 {pointer pre_q= pre_break(q);
 pointer post_q= post_break(q);
@@ -2209,8 +2205,8 @@
 type(q)= whatsit_node;
 subtype(q)= ignore_node;
 ignore_info(q)= 1;
-/*907:*/
-#line 17556 "htex.w"
+/*906:*/
+#line 17555 "htex.w"
 
 if(t==0){ignore_list(q)= null;r= link(q);}
 else{r= q;
@@ -2222,8 +2218,8 @@
 ignore_list(q)= link(q);
 }
 
-/*:907*/
-#line 17544 "htex.w"
+/*:906*/
+#line 17543 "htex.w"
 ;
 s= get_node(ignore_node_size);
 type(s)= whatsit_node;
@@ -2231,8 +2227,8 @@
 ignore_info(s)= 0;
 ignore_list(s)= null;
 link(s)= r;r= s;
-if(post_q!=null)/*908:*/
-#line 17570 "htex.w"
+if(post_q!=null)/*907:*/
+#line 17569 "htex.w"
 
 {s= post_q;
 while(link(s)!=null)s= link(s);
@@ -2239,11 +2235,11 @@
 link(s)= r;r= post_q;post_disc_break= true;
 }
 
-/*:908*/
-#line 17551 "htex.w"
+/*:907*/
+#line 17550 "htex.w"
 ;
-if(pre_q!=null)/*909:*/
-#line 17579 "htex.w"
+if(pre_q!=null)/*908:*/
+#line 17578 "htex.w"
 
 {s= pre_q;link(q)= s;
 while(link(s)!=null)s= link(s);
@@ -2250,14 +2246,14 @@
 q= s;
 }
 
-/*:909*/
-#line 17552 "htex.w"
+/*:908*/
+#line 17551 "htex.w"
 ;
 link(q)= r;disc_break= true;
 }
 
-/*:906*/
-#line 17528 "htex.w"
+/*:905*/
+#line 17527 "htex.w"
 
 else if((type(q)==math_node)||(type(q)==kern_node))width(q)= 0;
 }
@@ -2264,21 +2260,21 @@
 else{q= temp_head;
 while(link(q)!=null)q= link(q);
 }
-/*910:*/
-#line 17585 "htex.w"
+/*909:*/
+#line 17584 "htex.w"
 
 r= new_glue(right_skip);link(r)= link(q);link(q)= r;q= r
 
-/*:910*/
-#line 17534 "htex.w"
+/*:909*/
+#line 17533 "htex.w"
 ;
 done:
 
-/*:905*/
-#line 17508 "htex.w"
+/*:904*/
+#line 17507 "htex.w"
 ;
-/*911:*/
-#line 17592 "htex.w"
+/*910:*/
+#line 17591 "htex.w"
 
 r= link(q);link(q)= null;q= link(temp_head);link(temp_head)= r;
 if(left_skip!=zero_glue)
@@ -2286,11 +2282,11 @@
 link(r)= q;q= r;
 }
 
-/*:911*/
-#line 17509 "htex.w"
+/*:910*/
+#line 17508 "htex.w"
 ;
-/*913:*/
-#line 17618 "htex.w"
+/*912:*/
+#line 17617 "htex.w"
 
 if(cur_line> last_special_line)
 {cur_width= second_width;cur_indent= second_indent;
@@ -2304,11 +2300,11 @@
 adjust_tail= adjust_head;just_box= hpack(q,cur_width,exactly);
 shift_amount(just_box)= cur_indent
 
-/*:913*/
-#line 17510 "htex.w"
+/*:912*/
+#line 17509 "htex.w"
 ;
-/*912:*/
-#line 17599 "htex.w"
+/*911:*/
+#line 17598 "htex.w"
 
 if(first_line)
 {pointer p= happend_to_vlist(just_box);
@@ -2323,11 +2319,11 @@
 }
 adjust_tail= null
 
-/*:912*/
-#line 17512 "htex.w"
+/*:911*/
+#line 17511 "htex.w"
 ;
-/*914:*/
-#line 17638 "htex.w"
+/*913:*/
+#line 17637 "htex.w"
 
 if(cur_line+1!=best_line)
 {pen= inter_line_penalty;
@@ -2340,17 +2336,17 @@
 }
 }
 
-/*:914*/
-#line 17513 "htex.w"
+/*:913*/
+#line 17512 "htex.w"
 
 
-/*:904*/
-#line 17452 "htex.w"
+/*:903*/
+#line 17451 "htex.w"
 ;
 incr(cur_line);cur_p= next_break(cur_p);
 if(cur_p!=null)if(!post_disc_break)
-/*903:*/
-#line 17481 "htex.w"
+/*902:*/
+#line 17480 "htex.w"
 
 {r= temp_head;
 loop{q= link(r);
@@ -2368,8 +2364,8 @@
 }
 }
 
-/*:903*/
-#line 17455 "htex.w"
+/*:902*/
+#line 17454 "htex.w"
 ;
 }while(!(cur_p==null));
 if((cur_line!=best_line)||(link(temp_head)!=null))
@@ -2378,23 +2374,23 @@
 prev_graf= best_line-1;
 }
 
-/*:901*//*919:*/
-#line 17750 "htex.w"
+/*:900*//*918:*/
+#line 17749 "htex.w"
 
-/*:919*//*967:*/
-#line 18573 "htex.w"
+/*:918*//*966:*/
+#line 18572 "htex.w"
 
 #ifdef INIT
 #endif
 
-/*:967*/
-#line 16205 "htex.w"
+/*:966*/
+#line 16204 "htex.w"
 
 
 void line_break(int final_widow_penalty,pointer par_ptr)
 {scaled x= cur_list.hs_field;
-/*885:*/
-#line 17123 "htex.w"
+/*884:*/
+#line 17122 "htex.w"
 
 bool auto_breaking;
 pointer prev_p;
@@ -2401,21 +2397,21 @@
 pointer q,r,s;
 internal_font_number f;
 
-/*:885*//*917:*/
-#line 17733 "htex.w"
+/*:884*//*916:*/
+#line 17732 "htex.w"
 
 
-/*:917*/
-#line 16209 "htex.w"
+/*:916*/
+#line 16208 "htex.w"
 
 set_line_break_params();
-/*832:*/
-#line 16230 "htex.w"
+/*831:*/
+#line 16229 "htex.w"
 
 link(temp_head)= par_ptr;
 
-/*:832*//*846:*/
-#line 16442 "htex.w"
+/*:831*//*845:*/
+#line 16441 "htex.w"
 
 no_shrink_error_yet= true;
 check_shrinkage(left_skip);check_shrinkage(right_skip);
@@ -2425,8 +2421,8 @@
 background[2+stretch_order(r)]= background[2+stretch_order(r)]+stretch(r);
 background[6]= shrink(q)+shrink(r);
 
-/*:846*//*855:*/
-#line 16589 "htex.w"
+/*:845*//*854:*/
+#line 16588 "htex.w"
 
 minimum_demerits= awful_bad;
 minimal_demerits[tight_fit]= awful_bad;
@@ -2434,8 +2430,8 @@
 minimal_demerits[loose_fit]= awful_bad;
 minimal_demerits[very_loose_fit]= awful_bad;
 
-/*:855*//*871:*/
-#line 16854 "htex.w"
+/*:854*//*870:*/
+#line 16853 "htex.w"
 
 if(par_shape_ptr==null)
 if(hang_indent==0)
@@ -2442,8 +2438,8 @@
 {last_special_line= 0;second_width= x;
 second_indent= 0;
 }
-else/*872:*/
-#line 16865 "htex.w"
+else/*871:*/
+#line 16864 "htex.w"
 
 {last_special_line= abs(hang_after);
 if(hang_after<0)
@@ -2459,18 +2455,18 @@
 }
 }
 
-/*:872*/
-#line 16860 "htex.w"
+/*:871*/
+#line 16859 "htex.w"
 
 else QUIT("parshape not yet implemented");
 if(looseness==0)easy_line= last_special_line;
 else easy_line= max_halfword
 
-/*:871*/
-#line 16211 "htex.w"
+/*:870*/
+#line 16210 "htex.w"
 ;
-/*886:*/
-#line 17133 "htex.w"
+/*885:*/
+#line 17132 "htex.w"
 
 threshold= pretolerance;
 if(threshold>=0)
@@ -2489,8 +2485,8 @@
 
 }
 loop{if(threshold> inf_bad)threshold= inf_bad;
-/*887:*/
-#line 17186 "htex.w"
+/*886:*/
+#line 17185 "htex.w"
 
 q= get_node(active_node_size);
 type(q)= unhyphenated;fitness(q)= decent_fit;
@@ -2499,18 +2495,18 @@
 do_all_six(store_background);
 passive= null;printed_node= temp_head;pass_number= 0;
 
-/*:887*/
-#line 17151 "htex.w"
+/*:886*/
+#line 17150 "htex.w"
 ;
 cur_p= link(temp_head);auto_breaking= true;
 prev_p= cur_p;
 while((cur_p!=null)&&(link(active)!=last_active))
-/*889:*/
-#line 17221 "htex.w"
+/*888:*/
+#line 17220 "htex.w"
 
 {if(is_char_node(cur_p))
-/*890:*/
-#line 17255 "htex.w"
+/*889:*/
+#line 17254 "htex.w"
 
 {prev_p= cur_p;
 do{f= font(cur_p);
@@ -2519,21 +2515,21 @@
 }while(!(!is_char_node(cur_p)));
 }
 
-/*:890*/
-#line 17223 "htex.w"
+/*:889*/
+#line 17222 "htex.w"
 ;
 switch(type(cur_p)){
 case hlist_node:case vlist_node:case rule_node:act_width= act_width+width(cur_p);break;
-case whatsit_node:/*1392:*/
-#line 25484 "htex.w"
+case whatsit_node:/*1391:*/
+#line 25472 "htex.w"
 
 adv_past(cur_p)
 
-/*:1392*/
-#line 17227 "htex.w"
+/*:1391*/
+#line 17226 "htex.w"
 break;
-case glue_node:{/*891:*/
-#line 17266 "htex.w"
+case glue_node:{/*890:*/
+#line 17265 "htex.w"
 
 if(auto_breaking)
 {if(is_char_node(prev_p))try_break(0,unhyphenated);
@@ -2547,8 +2543,8 @@
 active_width[2+stretch_order(q)]+stretch(q);
 active_width[6]= active_width[6]+shrink(q)
 
-/*:891*/
-#line 17229 "htex.w"
+/*:890*/
+#line 17228 "htex.w"
 ;
 }break;
 case kern_node:if(subtype(cur_p)==explicit)kern_break
@@ -2556,14 +2552,14 @@
 case ligature_node:{f= font(lig_char(cur_p));
 act_width= act_width+char_width(f,char_info(f,character(lig_char(cur_p))));
 }break;
-case disc_node:/*892:*/
-#line 17282 "htex.w"
+case disc_node:/*891:*/
+#line 17281 "htex.w"
 
 {if(!is_auto_disc(cur_p)||second_pass||final_pass)
 {s= pre_break(cur_p);disc_width= 0;
 if(s==null)try_break(ex_hyphen_penalty,hyphenated);
-else{do{/*893:*/
-#line 17302 "htex.w"
+else{do{/*892:*/
+#line 17301 "htex.w"
 
 if(is_char_node(s))
 {f= font(s);
@@ -2581,8 +2577,8 @@
 
 }
 
-/*:893*/
-#line 17286 "htex.w"
+/*:892*/
+#line 17285 "htex.w"
 ;
 s= link(s);
 }while(!(s==null));
@@ -2593,8 +2589,8 @@
 }
 r= replace_count(cur_p);s= link(cur_p);
 while(r> 0)
-{/*894:*/
-#line 17319 "htex.w"
+{/*893:*/
+#line 17318 "htex.w"
 
 if(is_char_node(s))
 {f= font(s);
@@ -2612,8 +2608,8 @@
 
 }
 
-/*:894*/
-#line 17296 "htex.w"
+/*:893*/
+#line 17295 "htex.w"
 ;
 decr(r);s= link(s);
 }
@@ -2620,8 +2616,8 @@
 prev_p= cur_p;cur_p= s;goto done5;
 }
 
-/*:892*/
-#line 17237 "htex.w"
+/*:891*/
+#line 17236 "htex.w"
 
 case math_node:{auto_breaking= (subtype(cur_p)==after);kern_break;
 }break;
@@ -2633,17 +2629,17 @@
 prev_p= cur_p;cur_p= link(cur_p);
 done5:;}
 
-/*:889*/
-#line 17157 "htex.w"
+/*:888*/
+#line 17156 "htex.w"
 ;
 if(cur_p==null)
-/*897:*/
-#line 17356 "htex.w"
+/*896:*/
+#line 17355 "htex.w"
 
 {try_break(eject_penalty,hyphenated);
 if(link(active)!=last_active)
-{/*898:*/
-#line 17366 "htex.w"
+{/*897:*/
+#line 17365 "htex.w"
 
 r= link(active);fewest_demerits= awful_bad;
 do{if(type(r)!=delta_node)if(total_demerits(r)<fewest_demerits)
@@ -2653,12 +2649,12 @@
 }while(!(r==last_active));
 best_line= line_number(best_bet)
 
-/*:898*/
-#line 17359 "htex.w"
+/*:897*/
+#line 17358 "htex.w"
 ;
 if(looseness==0)goto done;
-/*899:*/
-#line 17380 "htex.w"
+/*898:*/
+#line 17379 "htex.w"
 
 {r= link(active);actual_looseness= 0;
 do{if(type(r)!=delta_node)
@@ -2678,18 +2674,18 @@
 best_line= line_number(best_bet);
 }
 
-/*:899*/
-#line 17361 "htex.w"
+/*:898*/
+#line 17360 "htex.w"
 ;
 if((actual_looseness==looseness)||final_pass)goto done;
 }
 }
 
-/*:897*/
-#line 17160 "htex.w"
+/*:896*/
+#line 17159 "htex.w"
 ;
-/*888:*/
-#line 17194 "htex.w"
+/*887:*/
+#line 17193 "htex.w"
 
 q= link(active);
 while(q!=last_active)
@@ -2705,8 +2701,8 @@
 q= cur_p;
 }
 
-/*:888*/
-#line 17161 "htex.w"
+/*:887*/
+#line 17160 "htex.w"
 ;
 if(!second_pass)
 {
@@ -2727,19 +2723,19 @@
 #ifdef STAT
 #endif
 
-/*:886*/
-#line 16212 "htex.w"
+/*:885*/
+#line 16211 "htex.w"
 ;
-/*900:*/
-#line 17404 "htex.w"
+/*899:*/
+#line 17403 "htex.w"
 
 post_line_break(final_widow_penalty)
 
-/*:900*/
-#line 16214 "htex.w"
+/*:899*/
+#line 16213 "htex.w"
 ;
-/*888:*/
-#line 17194 "htex.w"
+/*887:*/
+#line 17193 "htex.w"
 
 q= link(active);
 while(q!=last_active)
@@ -2755,14 +2751,14 @@
 q= cur_p;
 }
 
-/*:888*/
-#line 16215 "htex.w"
+/*:887*/
+#line 16214 "htex.w"
 ;
 hrestore_param_list();
 }
 
-/*:831*//*993:*/
-#line 19075 "htex.w"
+/*:830*//*992:*/
+#line 19074 "htex.w"
 
 
 #define ensure_vbox(N) 
@@ -2773,8 +2769,8 @@
 prev_p= temp_head;link(temp_head)= p;
 while(p!=null)
 switch(type(p)){
-case hlist_node:case vlist_node:case rule_node:/*994:*/
-#line 19098 "htex.w"
+case hlist_node:case vlist_node:case rule_node:/*993:*/
+#line 19097 "htex.w"
 
 {temp_ptr= new_spec(pointer_def[glue_kind][split_top_skip_no]);
 q= new_glue(temp_ptr);glue_ref_count(temp_ptr)= null;link(prev_p)= q;link(q)= p;
@@ -2784,8 +2780,8 @@
 p= null;
 }
 
-/*:994*/
-#line 19086 "htex.w"
+/*:993*/
+#line 19085 "htex.w"
 break;
 case whatsit_node:case mark_node:case ins_node:{prev_p= p;p= link(prev_p);
 }break;
@@ -2798,8 +2794,8 @@
 return link(temp_head);
 }
 
-/*:993*//*995:*/
-#line 19123 "htex.w"
+/*:992*//*994:*/
+#line 19122 "htex.w"
 
 static pointer vert_break(pointer p,scaled h,scaled d)
 
@@ -2815,12 +2811,12 @@
 small_number t;
 prev_p= p;
 least_cost= awful_bad;do_all_six(set_height_zero);prev_dp= 0;
-loop{/*998:*/
-#line 19159 "htex.w"
+loop{/*997:*/
+#line 19158 "htex.w"
 
 if(p==null)pi= eject_penalty;
-else/*999:*/
-#line 19174 "htex.w"
+else/*998:*/
+#line 19173 "htex.w"
 
 switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:{
@@ -2827,13 +2823,13 @@
 cur_height= cur_height+prev_dp+height(p);prev_dp= depth(p);
 goto not_found;
 }
-case whatsit_node:/*1395:*/
-#line 25493 "htex.w"
+case whatsit_node:/*1394:*/
+#line 25481 "htex.w"
 
 goto not_found
 
-/*:1395*/
-#line 19180 "htex.w"
+/*:1394*/
+#line 19179 "htex.w"
 ;
 case glue_node:if(precedes_break(prev_p))pi= 0;
 else goto update_heights;break;
@@ -2847,15 +2843,15 @@
 
 }
 
-/*:999*/
-#line 19163 "htex.w"
+/*:998*/
+#line 19162 "htex.w"
 ;
-/*1000:*/
-#line 19195 "htex.w"
+/*999:*/
+#line 19194 "htex.w"
 
 if(pi<inf_penalty)
-{/*1001:*/
-#line 19209 "htex.w"
+{/*1000:*/
+#line 19208 "htex.w"
 
 if(cur_height<h)
 if((active_height[3]!=0)||(active_height[4]!=0)||
@@ -2864,8 +2860,8 @@
 else if(cur_height-h> active_height[6])b= awful_bad;
 else b= badness(cur_height-h,active_height[6])
 
-/*:1001*/
-#line 19197 "htex.w"
+/*:1000*/
+#line 19196 "htex.w"
 ;
 if(b<awful_bad)
 if(pi<=eject_penalty)b= pi;
@@ -2878,12 +2874,12 @@
 if((b==awful_bad)||(pi<=eject_penalty))goto done;
 }
 
-/*:1000*/
-#line 19165 "htex.w"
+/*:999*/
+#line 19164 "htex.w"
 ;
 if((type(p)<glue_node)||(type(p)> kern_node))goto not_found;
-update_heights:/*1002:*/
-#line 19221 "htex.w"
+update_heights:/*1001:*/
+#line 19220 "htex.w"
 
 if(type(p)==kern_node)q= p;
 else{q= glue_ptr(p);
@@ -2899,8 +2895,8 @@
 }
 cur_height= cur_height+prev_dp+width(q);prev_dp= 0
 
-/*:1002*/
-#line 19168 "htex.w"
+/*:1001*/
+#line 19167 "htex.w"
 ;
 not_found:if(prev_dp> d)
 {cur_height= cur_height+prev_dp-d;
@@ -2907,8 +2903,8 @@
 prev_dp= d;
 }
 
-/*:998*/
-#line 19140 "htex.w"
+/*:997*/
+#line 19139 "htex.w"
 ;
 prev_p= p;p= link(prev_p);
 }
@@ -2915,8 +2911,8 @@
 done:return best_place;
 }
 
-/*:995*//*1013:*/
-#line 19520 "htex.w"
+/*:994*//*1012:*/
+#line 19519 "htex.w"
 
 void freeze_page_specs(small_number s)
 {page_contents= s;
@@ -2935,8 +2931,8 @@
 
 }
 
-/*:1013*//*1021:*/
-#line 19618 "htex.w"
+/*:1012*//*1020:*/
+#line 19617 "htex.w"
 
 bool hbuild_page(void)
 {
@@ -2946,30 +2942,31 @@
 int pi;
 if(link(contrib_head)==null)return false;
 do{resume:p= link(contrib_head);
-/*1024:*/
-#line 19658 "htex.w"
+/*1023:*/
+#line 19657 "htex.w"
 
-/*1027:*/
-#line 19687 "htex.w"
+/*1026:*/
+#line 19686 "htex.w"
 
 switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:if(page_contents<box_there)
-/*1028:*/
-#line 19710 "htex.w"
+/*1027:*/
+#line 19709 "htex.w"
 
 {if(page_contents==empty)freeze_page_specs(box_there);
 else page_contents= box_there;
 temp_ptr= new_spec(pointer_def[glue_kind][top_skip_no]);
 q= new_glue(temp_ptr);glue_ref_count(temp_ptr)= null;
+{uint64_t h= page_loc[cur_loc];store_map(q,LOC_POS0(h),LOC_OFF(h));}
 if(width(temp_ptr)> height(p))width(temp_ptr)= width(temp_ptr)-height(p);
 else width(temp_ptr)= 0;
 link(q)= p;link(contrib_head)= q;goto resume;
 }
 
-/*:1028*/
-#line 19691 "htex.w"
+/*:1027*/
+#line 19690 "htex.w"
 
-else/*1029:*/
+else/*1028:*/
 #line 19720 "htex.w"
 
 {page_total= page_total+page_depth+height(p);
@@ -2977,16 +2974,16 @@
 goto contribute;
 }
 
-/*:1029*/
-#line 19693 "htex.w"
+/*:1028*/
+#line 19692 "htex.w"
 break;
-case whatsit_node:/*1394:*/
-#line 25490 "htex.w"
+case whatsit_node:/*1393:*/
+#line 25478 "htex.w"
 
 goto contribute
 
-/*:1394*/
-#line 19695 "htex.w"
+/*:1393*/
+#line 19694 "htex.w"
 ;
 case glue_node:if(page_contents<box_there)goto done1;
 else if(precedes_break(page_tail))pi= 0;
@@ -3002,14 +2999,14 @@
 
 }
 
-/*:1027*/
-#line 19663 "htex.w"
+/*:1026*/
+#line 19662 "htex.w"
 ;
-/*1032:*/
+/*1031:*/
 #line 19748 "htex.w"
 
 if(pi<inf_penalty)
-{/*1034:*/
+{/*1033:*/
 #line 19794 "htex.w"
 
 if(page_total<page_goal)
@@ -3019,7 +3016,7 @@
 else if(page_total-page_goal> page_shrink)b= awful_bad;
 else b= badness(page_total-page_goal,page_shrink)
 
-/*:1034*/
+/*:1033*/
 #line 19751 "htex.w"
 ;
 if(b<awful_bad)
@@ -3029,7 +3026,7 @@
 else c= b;
 if(insert_penalties>=10000)c= awful_bad;
 #ifdef STAT
-if(tracing_pages> 0)/*1033:*/
+if(tracing_pages> 0)/*1032:*/
 #line 19780 "htex.w"
 
 {begin_diagnostic();print_nl("%");
@@ -3045,7 +3042,7 @@
 end_diagnostic(false);
 }
 
-/*:1033*/
+/*:1032*/
 #line 19759 "htex.w"
 ;
 #endif
@@ -3068,11 +3065,11 @@
 }
 }
 
-/*:1032*/
-#line 19666 "htex.w"
+/*:1031*/
+#line 19665 "htex.w"
 ;
 if((type(p)<glue_node)||(type(p)> kern_node))goto contribute;
-update_heights:/*1031:*/
+update_heights:/*1030:*/
 #line 19733 "htex.w"
 
 if(type(p)==kern_node)q= p;
@@ -3089,10 +3086,10 @@
 }
 page_total= page_total+page_depth+width(q);page_depth= 0
 
-/*:1031*/
-#line 19669 "htex.w"
+/*:1030*/
+#line 19668 "htex.w"
 ;
-contribute:/*1030:*/
+contribute:/*1029:*/
 #line 19726 "htex.w"
 
 if(page_depth> page_max_depth)
@@ -3101,45 +3098,45 @@
 page_depth= page_max_depth;
 }
 
-/*:1030*/
-#line 19670 "htex.w"
+/*:1029*/
+#line 19669 "htex.w"
 ;
-/*1025:*/
-#line 19675 "htex.w"
+/*1024:*/
+#line 19674 "htex.w"
 
 link(page_tail)= p;page_tail= p;
 link(contrib_head)= link(p);link(p)= null;goto done
 
-/*:1025*/
-#line 19671 "htex.w"
+/*:1024*/
+#line 19670 "htex.w"
 ;
-done1:/*1026:*/
-#line 19679 "htex.w"
+done1:/*1025:*/
+#line 19678 "htex.w"
 
 link(contrib_head)= link(p);link(p)= null;flush_node_list(p)
 
-/*:1026*/
-#line 19672 "htex.w"
+/*:1025*/
+#line 19671 "htex.w"
 ;
 done:
 
-/*:1024*/
-#line 19629 "htex.w"
+/*:1023*/
+#line 19628 "htex.w"
 ;
 }while(!(link(contrib_head)==null));
-/*1022:*/
-#line 19637 "htex.w"
+/*1021:*/
+#line 19636 "htex.w"
 
 if(nest_ptr==0)tail= contrib_head;
 else contrib_tail= contrib_head
 
-/*:1022*/
-#line 19631 "htex.w"
+/*:1021*/
+#line 19630 "htex.w"
 ;
 return false;
 }
 
-/*:1021*//*1035:*/
+/*:1020*//*1034:*/
 #line 19802 "htex.w"
 
 void happend_insertion(pointer p)
@@ -3151,7 +3148,7 @@
 while(n>=subtype(link(r)))r= link(r);
 n= qo(n);
 if(subtype(r)!=qi(n))
-/*1036:*/
+/*1035:*/
 #line 19834 "htex.w"
 
 {q= get_node(page_ins_node_size);link(q)= link(r);link(r)= q;r= q;
@@ -3169,7 +3166,7 @@
 DBG(DBGTEX,"Infinite glue shrinkage inserted from stream %d",n);
 }
 
-/*:1036*/
+/*:1035*/
 #line 19813 "htex.w"
 ;
 if(type(r)==split_up)insert_penalties= insert_penalties+float_cost(p);
@@ -3181,7 +3178,7 @@
 if(((h<=0)||(h<=delta))&&(height(p)+height(r)<=dimen(n)))
 {page_goal= page_goal-h;height(r)= height(r)+height(p);
 }
-else/*1037:*/
+else/*1036:*/
 #line 19860 "htex.w"
 
 {if(count(n)<=0)w= max_dimen;
@@ -3192,7 +3189,7 @@
 q= vert_break(ins_ptr(p),w,depth(p));
 height(r)= height(r)+best_height_plus_depth;
 #ifdef STAT
-if(tracing_pages> 0)/*1038:*/
+if(tracing_pages> 0)/*1037:*/
 #line 19880 "htex.w"
 
 {begin_diagnostic();print_nl("% split");print_int(n);
@@ -3206,7 +3203,7 @@
 end_diagnostic(false);
 }
 
-/*:1038*/
+/*:1037*/
 #line 19869 "htex.w"
 ;
 #endif
@@ -3219,13 +3216,13 @@
 else if(type(q)==penalty_node)insert_penalties= insert_penalties+penalty(q);
 }
 
-/*:1037*/
+/*:1036*/
 #line 19824 "htex.w"
 ;
 }
 }
 
-/*:1035*//*1042:*/
+/*:1034*//*1041:*/
 #line 19952 "htex.w"
 
 void hpack_page(void)
@@ -3247,7 +3244,7 @@
 {flush_node_list(box(0));box(0)= null;}
 insert_penalties= 0;
 save_split_top_skip= split_top_skip;
-/*1046:*/
+/*1045:*/
 #line 20038 "htex.w"
 
 {r= link(page_ins_head);
@@ -3263,13 +3260,13 @@
 }
 }
 
-/*:1046*/
+/*:1045*/
 #line 19972 "htex.w"
 ;
 q= hold_head;link(q)= null;prev_p= page_head;p= link(prev_p);
 while(p!=best_page_break)
 {if(type(p)==ins_node)
-{/*1048:*/
+{/*1047:*/
 #line 20064 "htex.w"
 
 {r= link(page_ins_head);
@@ -3277,7 +3274,7 @@
 if(best_ins_ptr(r)==null)wait= true;
 else{wait= false;s= last_ins_ptr(r);link(s)= ins_ptr(p);
 if(best_ins_ptr(r)==p)
-/*1049:*/
+/*1048:*/
 #line 20080 "htex.w"
 
 {if(type(r)==split_up)
@@ -3301,7 +3298,7 @@
 streams[n].t= s;
 }
 
-/*:1049*/
+/*:1048*/
 #line 20071 "htex.w"
 
 else{while(link(s)!=null)s= link(s);
@@ -3308,7 +3305,7 @@
 last_ins_ptr(r)= s;
 }
 }
-/*1050:*/
+/*1049:*/
 #line 20102 "htex.w"
 
 link(prev_p)= link(p);link(p)= null;
@@ -3320,12 +3317,12 @@
 }
 p= prev_p
 
-/*:1050*/
+/*:1049*/
 #line 20077 "htex.w"
 ;
 }
 
-/*:1048*/
+/*:1047*/
 #line 19977 "htex.w"
 ;
 }
@@ -3332,7 +3329,7 @@
 prev_p= p;p= link(prev_p);
 }
 split_top_skip= save_split_top_skip;
-/*1045:*/
+/*1044:*/
 #line 20016 "htex.w"
 
 if(p!=null)
@@ -3350,10 +3347,10 @@
 link(contrib_head)= link(hold_head);
 }
 
-/*:1045*/
+/*:1044*/
 #line 19983 "htex.w"
 ;
-/*1047:*/
+/*1046:*/
 #line 20052 "htex.w"
 
 r= link(page_ins_head);
@@ -3362,12 +3359,12 @@
 }
 link(page_ins_head)= page_ins_head
 
-/*:1047*/
+/*:1046*/
 #line 19984 "htex.w"
 ;
 }
 
-/*:1042*//*1174:*/
+/*:1041*//*1173:*/
 #line 21974 "htex.w"
 
 void hdisplay(pointer p,pointer a,bool l)
@@ -3392,13 +3389,13 @@
 store_map(par_ptr,node_pos,0);
 line_break(display_widow_penalty,par_ptr);
 x= cur_list.hs_field;
-/*1175:*/
+/*1174:*/
 #line 22006 "htex.w"
 
 v= shift_amount(just_box)+2*dimen_def[quad_no];w= -max_dimen;
 p= list_ptr(just_box);
 while(p!=null)
-{/*1176:*/
+{/*1175:*/
 #line 22023 "htex.w"
 
 reswitch:if(is_char_node(p))
@@ -3408,18 +3405,18 @@
 switch(type(p)){
 case hlist_node:case vlist_node:case rule_node:{d= width(p);goto found;
 }
-case ligature_node:/*666:*/
-#line 13134 "htex.w"
+case ligature_node:/*665:*/
+#line 13133 "htex.w"
 
 {mem[lig_trick]= mem[lig_char(p)];link(lig_trick)= link(p);
 p= lig_trick;goto reswitch;
 }
 
-/*:666*/
+/*:665*/
 #line 22031 "htex.w"
 
 case kern_node:case math_node:d= width(p);break;
-case glue_node:/*1177:*/
+case glue_node:/*1176:*/
 #line 22045 "htex.w"
 
 {q= glue_ptr(p);d= width(q);
@@ -3436,20 +3433,20 @@
 if(subtype(p)>=a_leaders)goto found;
 }
 
-/*:1177*/
+/*:1176*/
 #line 22034 "htex.w"
 break;
-case whatsit_node:/*1391:*/
-#line 25480 "htex.w"
+case whatsit_node:/*1390:*/
+#line 25468 "htex.w"
 d= 0
 
-/*:1391*/
+/*:1390*/
 #line 22035 "htex.w"
 ;break;
 default:d= 0;
 }
 
-/*:1176*/
+/*:1175*/
 #line 22011 "htex.w"
 ;
 if(v<max_dimen)v= v+d;
@@ -3463,12 +3460,12 @@
 }
 done:
 
-/*:1175*/
+/*:1174*/
 #line 21999 "htex.w"
 ;
 }
 
-/*1178:*/
+/*1177:*/
 #line 22063 "htex.w"
 
 if(par_shape_ptr==null)
@@ -3486,16 +3483,16 @@
 s= mem[p-1].sc;l= mem[p].sc;
 }
 
-/*:1178*/
+/*:1177*/
 #line 22002 "htex.w"
 ;
 pre_display_size= w;display_width= l;display_indent= s;
 }
 
-/*:1174*//*1229:*/
+/*:1173*//*1228:*/
 #line 22730 "htex.w"
 
-{/*1227:*/
+{/*1226:*/
 #line 22713 "htex.w"
 
 pointer b;
@@ -3509,7 +3506,7 @@
 pointer r;
 pointer t;
 
-/*:1227*/
+/*:1226*/
 #line 22731 "htex.w"
 
 adjust_tail= adjust_head;b= hpack(p,natural);p= list_ptr(b);
@@ -3521,7 +3518,7 @@
 else{e= width(a);q= e+math_quad;
 }
 if(w+q> z)
-/*1231:*/
+/*1230:*/
 #line 22769 "htex.w"
 
 {if((e!=0)&&((w-total_shrink[normal]+q<=z)||
@@ -3539,10 +3536,10 @@
 w= width(b);
 }
 
-/*:1231*/
+/*:1230*/
 #line 22742 "htex.w"
 ;
-/*1232:*/
+/*1231:*/
 #line 22793 "htex.w"
 
 d= half(z-w);
@@ -3551,10 +3548,10 @@
 if(p!=null)if(!is_char_node(p))if(type(p)==glue_node)d= 0;
 }
 
-/*:1232*/
+/*:1231*/
 #line 22744 "htex.w"
 ;
-/*1233:*/
+/*1232:*/
 #line 22806 "htex.w"
 
 tail_append(new_penalty(pre_display_penalty));
@@ -3571,10 +3568,10 @@
 }
 else{tail_append(new_glue(pointer_def[glue_kind][g1]));store_map(tail,node_pos,offset);}
 
-/*:1233*/
+/*:1232*/
 #line 22745 "htex.w"
 ;
-/*1234:*/
+/*1233:*/
 #line 22821 "htex.w"
 
 if(e!=0)
@@ -3588,10 +3585,10 @@
 }
 shift_amount(b)= s+d;append_to_vlist(b,offset)
 
-/*:1234*/
+/*:1233*/
 #line 22746 "htex.w"
 ;
-/*1235:*/
+/*1234:*/
 #line 22833 "htex.w"
 
 if((a!=null)&&(e==0)&&!l)
@@ -3608,7 +3605,7 @@
 store_map(tail,node_pos,offset);
 if(g2> 0){tail_append(new_glue(pointer_def[glue_kind][g2]));store_map(tail,node_pos,offset);}
 
-/*:1235*/
+/*:1234*/
 #line 22747 "htex.w"
 ;
 prev_graf= prev_graf+3;
@@ -3617,4 +3614,4 @@
 }
 }
 
-/*:1229*/
+/*:1228*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/htex.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,5 +1,5 @@
-/*1411:*/
-#line 25703 "htex.w"
+/*1410:*/
+#line 25691 "htex.w"
 
 #define banner "This is TeX, Version 3.141592653 (HINT)" \
 
@@ -325,7 +325,7 @@
 
 #define add_token_ref(A) incr(token_ref_count(A) ) 
 #define add_glue_ref(A) incr(glue_ref_count(A) ) 
-#define add_xdimen_ref(A) incr(xdimen_ref_count(A) )  \
+#define add_xdimen_ref(A) if(A!=null) incr(xdimen_ref_count(A) )  \
 
 #define escape 0 \
 
@@ -1589,21 +1589,21 @@
 #define open_ext(A) link(A+2)  \
 
 #define hitex_ext language_node+1
-#define par_node hitex_ext
-#define par_node_size 3
-#define par_type(A) type(A+1) 
+#define param_node hitex_ext
+#define param_node_size 3
+#define param_type(A) type(A+1) 
 #define int_type 0
 #define dimen_type 1
 #define glue_type 2
-#define par_number(A) subtype(A+1) 
-#define par_value(A) mem[A+2] \
+#define param_no(A) subtype(A+1) 
+#define param_value(A) mem[A+2] \
 
-#define graf_node hitex_ext+1
-#define graf_node_size 5
-#define graf_penalty(A) mem[A+1].i
-#define graf_extent(A) link(A+3) 
-#define graf_params(A) info(A+4) 
-#define graf_list(A) link(A+4)  \
+#define par_node hitex_ext+1
+#define par_node_size 5
+#define par_penalty(A) mem[A+1].i
+#define par_extent(A) link(A+3) 
+#define par_params(A) info(A+4) 
+#define par_list(A) link(A+4)  \
 
 #define disp_node hitex_ext+2
 #define disp_node_size 3
@@ -1618,18 +1618,14 @@
 #define baseline_node_no(A) mem[A+1].i \
 
 #define image_node hitex_ext+4
-#define image_node_size 9
-#define image_width(A) width(A) 
-#define image_height(A) height(A) 
-#define image_depth(A) depth(A) 
-#define image_no(A) mem[A+4].i
-#define image_stretch(A) mem[A+5].sc
-#define image_shrink(A) mem[A+6].sc
-#define image_stretch_order(A) stretch_order(A+7) 
-#define image_shrink_order(A) shrink_order(A+7) 
-#define image_name(A) link(A+7) 
-#define image_area(A) info(A+8) 
-#define image_ext(A) link(A+8)  \
+#define image_node_size 6
+#define image_width(A) mem[A+1].sc
+#define image_height(A) mem[A+2].sc
+#define image_no(A) link(A+3) 
+#define image_name(A) info(A+3) 
+#define image_area(A) info(A+4) 
+#define image_ext(A) link(A+4) 
+#define image_alt(A) link(A+5)  \
 
 #define hpack_node hitex_ext+5
 #define vpack_node hitex_ext+6
@@ -1728,7 +1724,7 @@
 #define end_write_token cs_token_flag+end_write \
 
 
-#line 25704 "htex.w"
+#line 25692 "htex.w"
 
 enum{/*11:*/
 #line 362 "htex.w"
@@ -1772,7 +1768,7 @@
 empty_string= 256
 
 /*:11*/
-#line 25705 "htex.w"
+#line 25693 "htex.w"
 };
 /*18:*/
 #line 502 "htex.w"
@@ -1793,7 +1789,7 @@
 typedef int16_t str_number;
 typedef uint8_t packed_ASCII_code;
 
-/*:38*//*105:*/
+/*:38*//*104:*/
 #line 2194 "htex.w"
 
 typedef int scaled;
@@ -1800,7 +1796,7 @@
 typedef int32_t nonnegative_integer;
 typedef int8_t small_number;
 
-/*:105*//*114:*/
+/*:104*//*113:*/
 #line 2405 "htex.w"
 
 #if __SIZEOF_FLOAT__==4
@@ -1810,7 +1806,7 @@
 #endif
 typedef float glue_ratio;
 
-/*:114*//*118:*/
+/*:113*//*117:*/
 #line 2514 "htex.w"
 
 typedef uint8_t quarterword;
@@ -1838,13 +1834,13 @@
 };}memory_word;
 typedef struct{FILE*f;memory_word d;}word_file;
 
-/*:118*//*156:*/
+/*:117*//*155:*/
 #line 3245 "htex.w"
 
 typedef int8_t glue_ord;
 
-/*:156*//*222:*/
-#line 4409 "htex.w"
+/*:155*//*221:*/
+#line 4408 "htex.w"
 
 typedef struct{int16_t mode_field;
 pointer head_field,tail_field;
@@ -1859,13 +1855,13 @@
 memory_word aux_field;
 }list_state_record;
 
-/*:222*//*280:*/
-#line 5998 "htex.w"
+/*:221*//*279:*/
+#line 5997 "htex.w"
 
 typedef int8_t group_code;
 
-/*:280*//*311:*/
-#line 6577 "htex.w"
+/*:279*//*310:*/
+#line 6576 "htex.w"
 
 typedef struct{
 quarterword state_field,index_field;
@@ -1872,29 +1868,29 @@
 halfword start_field,loc_field,limit_field,name_field;
 }in_state_record;
 
-/*:311*//*559:*/
-#line 10859 "htex.w"
+/*:310*//*558:*/
+#line 10858 "htex.w"
 
 typedef uint8_t internal_font_number;
 typedef uint16_t font_index;
 
-/*:559*//*606:*/
-#line 12051 "htex.w"
+/*:558*//*605:*/
+#line 12050 "htex.w"
 
 typedef int8_t dvi_index;
 
-/*:606*//*945:*/
-#line 18317 "htex.w"
+/*:605*//*944:*/
+#line 18316 "htex.w"
 
 typedef uint16_t trie_pointer;
 
-/*:945*//*950:*/
-#line 18386 "htex.w"
+/*:944*//*949:*/
+#line 18385 "htex.w"
 
 typedef int16_t hyph_pointer;
 
-/*:950*/
-#line 25706 "htex.w"
+/*:949*/
+#line 25694 "htex.w"
 
 extern void list_init(void);
 extern void hpack_page(void);
@@ -1949,4 +1945,4 @@
 extern void pop_nest(void);
 extern void push_nest(void);
 extern void delete_glue_ref(pointer p);
-void line_break(int final_widow_penalty,pointer par_ptr);/*:1411*/
+void line_break(int final_widow_penalty,pointer par_ptr);/*:1410*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/rendernative.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/rendernative.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/rendernative.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -1,51 +1,51 @@
 /*377:*/
-#line 7642 "hint.w"
+#line 7637 "hint.w"
 
 #ifndef _RENDERNATIVE_H
 #define _RENDERNATIVE_H
 
 /*329:*/
-#line 6568 "hint.w"
+#line 6563 "hint.w"
 
 extern void nativeInit(void);
 extern void nativeClear(void);
 /*:329*//*330:*/
-#line 6575 "hint.w"
+#line 6570 "hint.w"
 
 extern void nativeSetSize(int px_h,int px_v,double xdpi,double ydpi);
 /*:330*//*331:*/
-#line 6580 "hint.w"
+#line 6575 "hint.w"
 
 extern void nativeSetDark(int dark);
 /*:331*//*332:*/
-#line 6585 "hint.w"
+#line 6580 "hint.w"
 
 extern void nativeBlank(void);
 /*:332*//*333:*/
-#line 6595 "hint.w"
+#line 6590 "hint.w"
 
 typedef struct gcache_s*gcache_s_ptr;
 
 extern void nativeGlyph(double x,double dx,double y,double dy,double w,double h,struct gcache_s*g,uint8_t s);
 /*:333*//*334:*/
-#line 6606 "hint.w"
+#line 6601 "hint.w"
 
 void nativeRule(double x,double y,double w,double h);
 /*:334*//*335:*/
-#line 6612 "hint.w"
+#line 6607 "hint.w"
 
 void nativeImage(double x,double y,double w,double h,unsigned char*istart,unsigned char*iend);
 /*:335*//*336:*/
-#line 6618 "hint.w"
+#line 6613 "hint.w"
 
 extern void nativeSetPK(struct gcache_s*g);
 extern void nativeSetFreeType(struct gcache_s*g);
 /*:336*//*337:*/
-#line 6625 "hint.w"
+#line 6620 "hint.w"
 
 void nativeFreeGlyph(struct gcache_s*g);
 /*:337*/
-#line 7646 "hint.w"
+#line 7641 "hint.w"
 
 
 #endif

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/tables.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/tables.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/tables.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -54,7 +54,7 @@
 3,0,-4*1+0,-4*1+1,3,0,-4*2+0,-4*2+1, /* disc */
 3,2,2,2,2,2,2,2, /* language */
 3,6,6,10,6,10,10,14, /* rule */
-3,0,0,0,4,12,12,20, /* image */
+3,-4*11+0,-4*11+0,-4*11+0,-4*9+0,-4*8+1,-4*8+1,-4*7+2, /* image */
 3,-4*1+0,-4*1+0,-4*1+0,0,-4*1+1,-4*1+1,-4*1+1, /* leaders */
 3,6,-4*1+0,-4*5+0,-4*1+0,-4*5+0,-4*1+1,-4*5+1, /* baseline */
 -4*9+0,-4*13+0,-4*13+0,-4*17+0,-4*14+0,-4*18+0,-4*18+0,-4*22+0, /* hbox */

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2022-02-23 17:27:52 UTC (rev 62150)
@@ -69,7 +69,7 @@
 /* First part of user prologue.  */
 #line 2 "parser.y"
 
-	#line 10316 "format.w"
+	#line 10766 "format.w"
 	
 #include "hibasetypes.h"
 #include <string.h>
@@ -79,9 +79,9 @@
 #include "hiput.h"
 extern char**hfont_name;
 
-	/*358:*/
+	/*366:*/
 uint32_t definition_bits[0x100/32][32]= {
-	#line 7628 "format.w"
+	#line 8067 "format.w"
 	{0}};
 
 #define SET_DBIT(N,K) ((N)>0xFF?1:(definition_bits[N/32][K]	|= (1<<((N)&(32-1)))))
@@ -91,16 +91,16 @@
  RNG("Definition",(D).n,max_fixed[(D).k]+1,max_ref[(D).k]);
 #define REF(K,N) REF_RNG(K,N);if(!GET_DBIT(N,K)) \
  QUIT("Reference %d to %s before definition",(N),definition_name[K])
-	/*:358*/	/*362:*/
+	/*:366*/	/*370:*/
 #define DEF_REF(D,K,M,N)  DEF(D,K,M);\
 if ((int)(M)>max_default[K]) QUIT("Defining non default reference %d for %s",M,definition_name[K]); \
 if ((int)(N)>max_fixed[K]) QUIT("Defining reference %d for %s by non fixed reference %d",M,definition_name[K],N);
-	/*:362*/
+	/*:370*/
 
 extern void hset_entry(Entry*e,uint16_t i,uint32_t size,
 uint32_t xsize,char*file_name);
 
-	/*425:*/
+	/*433:*/
 #ifdef DEBUG
 #define  YYDEBUG 1
 extern int yydebug;
@@ -107,36 +107,36 @@
 #else
 #define YYDEBUG 0
 #endif
-	/*:425*/
+	/*:433*/
 extern int yylex(void);
 
-	/*354:*/
+	/*362:*/
 void hset_max(Kind k,int n)
 {
-	#line 7471 "format.w"
+	#line 7910 "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])
 	max_ref[k]= n;
 	}
-	/*:354*/	/*365:*/
+	/*:362*/	/*373:*/
 void check_param_def(Ref*df)
 {
-	#line 7777 "format.w"
+	#line 8216 "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)
 	QUIT("Parameter %d for %s not allowed in parameter list",df->n,definition_name[df->k]);
 	}
-	/*:365*/	/*424:*/
+	/*:373*/	/*432:*/
 extern int yylineno;
 int yyerror(const char*msg)
 {
-	#line 8902 "format.w"
+	#line 9341 "format.w"
 	QUIT(" in line %d %s",yylineno,msg);
 	return 0;
 	}
-	/*:424*/
+	/*:432*/
 
 
 
@@ -234,132 +234,137 @@
   YYSYMBOL_TABLE = 63,                     /* "table"  */
   YYSYMBOL_ITEM = 64,                      /* "item"  */
   YYSYMBOL_IMAGE = 65,                     /* "image"  */
-  YYSYMBOL_LABEL = 66,                     /* "label"  */
-  YYSYMBOL_BOT = 67,                       /* "bot"  */
-  YYSYMBOL_MID = 68,                       /* "mid"  */
-  YYSYMBOL_LINK = 69,                      /* "link"  */
-  YYSYMBOL_OUTLINE = 70,                   /* "outline"  */
-  YYSYMBOL_STREAM = 71,                    /* "stream"  */
-  YYSYMBOL_STREAMDEF = 72,                 /* "stream (definition)"  */
-  YYSYMBOL_FIRST = 73,                     /* "first"  */
-  YYSYMBOL_LAST = 74,                      /* "last"  */
-  YYSYMBOL_TOP = 75,                       /* "top"  */
-  YYSYMBOL_NOREFERENCE = 76,               /* "*"  */
-  YYSYMBOL_PAGE = 77,                      /* "page"  */
-  YYSYMBOL_RANGE = 78,                     /* "range"  */
-  YYSYMBOL_DIRECTORY = 79,                 /* "directory"  */
-  YYSYMBOL_SECTION = 80,                   /* "entry"  */
-  YYSYMBOL_DEFINITIONS = 81,               /* "definitions"  */
-  YYSYMBOL_MAX = 82,                       /* "max"  */
-  YYSYMBOL_PARAM = 83,                     /* "param"  */
-  YYSYMBOL_FONT = 84,                      /* "font"  */
-  YYSYMBOL_CONTENT = 85,                   /* "content"  */
-  YYSYMBOL_YYACCEPT = 86,                  /* $accept  */
-  YYSYMBOL_glyph = 87,                     /* glyph  */
-  YYSYMBOL_content_node = 88,              /* content_node  */
-  YYSYMBOL_start = 89,                     /* start  */
-  YYSYMBOL_integer = 90,                   /* integer  */
-  YYSYMBOL_string = 91,                    /* string  */
-  YYSYMBOL_number = 92,                    /* number  */
-  YYSYMBOL_dimension = 93,                 /* dimension  */
-  YYSYMBOL_xdimen = 94,                    /* xdimen  */
-  YYSYMBOL_xdimen_node = 95,               /* xdimen_node  */
-  YYSYMBOL_order = 96,                     /* order  */
-  YYSYMBOL_stretch = 97,                   /* stretch  */
-  YYSYMBOL_penalty = 98,                   /* penalty  */
-  YYSYMBOL_rule_dimension = 99,            /* rule_dimension  */
-  YYSYMBOL_rule = 100,                     /* rule  */
-  YYSYMBOL_rule_node = 101,                /* rule_node  */
-  YYSYMBOL_explicit = 102,                 /* explicit  */
-  YYSYMBOL_kern = 103,                     /* kern  */
-  YYSYMBOL_plus = 104,                     /* plus  */
-  YYSYMBOL_minus = 105,                    /* minus  */
-  YYSYMBOL_glue = 106,                     /* glue  */
-  YYSYMBOL_glue_node = 107,                /* glue_node  */
-  YYSYMBOL_position = 108,                 /* position  */
-  YYSYMBOL_content_list = 109,             /* content_list  */
-  YYSYMBOL_estimate = 110,                 /* estimate  */
-  YYSYMBOL_list = 111,                     /* list  */
-  YYSYMBOL_112_1 = 112,                    /* $@1  */
-  YYSYMBOL_text = 113,                     /* text  */
-  YYSYMBOL_txt = 114,                      /* txt  */
-  YYSYMBOL_115_2 = 115,                    /* $@2  */
-  YYSYMBOL_box_dimen = 116,                /* box_dimen  */
-  YYSYMBOL_box_shift = 117,                /* box_shift  */
-  YYSYMBOL_box_glue_set = 118,             /* box_glue_set  */
-  YYSYMBOL_box = 119,                      /* box  */
-  YYSYMBOL_hbox_node = 120,                /* hbox_node  */
-  YYSYMBOL_vbox_node = 121,                /* vbox_node  */
-  YYSYMBOL_box_flex = 122,                 /* box_flex  */
-  YYSYMBOL_xbox = 123,                     /* xbox  */
-  YYSYMBOL_box_goal = 124,                 /* box_goal  */
-  YYSYMBOL_hpack = 125,                    /* hpack  */
-  YYSYMBOL_vpack = 126,                    /* vpack  */
-  YYSYMBOL_127_3 = 127,                    /* $@3  */
-  YYSYMBOL_vxbox_node = 128,               /* vxbox_node  */
-  YYSYMBOL_hxbox_node = 129,               /* hxbox_node  */
-  YYSYMBOL_ltype = 130,                    /* ltype  */
-  YYSYMBOL_leaders = 131,                  /* leaders  */
-  YYSYMBOL_baseline = 132,                 /* baseline  */
-  YYSYMBOL_133_4 = 133,                    /* $@4  */
-  YYSYMBOL_cc_list = 134,                  /* cc_list  */
-  YYSYMBOL_lig_cc = 135,                   /* lig_cc  */
-  YYSYMBOL_ref = 136,                      /* ref  */
-  YYSYMBOL_ligature = 137,                 /* ligature  */
-  YYSYMBOL_138_5 = 138,                    /* $@5  */
-  YYSYMBOL_replace_count = 139,            /* replace_count  */
-  YYSYMBOL_disc = 140,                     /* disc  */
-  YYSYMBOL_disc_node = 141,                /* disc_node  */
-  YYSYMBOL_par_dimen = 142,                /* par_dimen  */
-  YYSYMBOL_par = 143,                      /* par  */
-  YYSYMBOL_144_6 = 144,                    /* $@6  */
-  YYSYMBOL_math = 145,                     /* math  */
-  YYSYMBOL_on_off = 146,                   /* on_off  */
-  YYSYMBOL_span_count = 147,               /* span_count  */
-  YYSYMBOL_table = 148,                    /* table  */
-  YYSYMBOL_image_dimen = 149,              /* image_dimen  */
-  YYSYMBOL_image = 150,                    /* image  */
-  YYSYMBOL_max_value = 151,                /* max_value  */
-  YYSYMBOL_placement = 152,                /* placement  */
-  YYSYMBOL_def_node = 153,                 /* def_node  */
-  YYSYMBOL_stream_link = 154,              /* stream_link  */
-  YYSYMBOL_stream_split = 155,             /* stream_split  */
-  YYSYMBOL_stream_info = 156,              /* stream_info  */
-  YYSYMBOL_157_7 = 157,                    /* $@7  */
-  YYSYMBOL_stream_type = 158,              /* stream_type  */
-  YYSYMBOL_stream_def_node = 159,          /* stream_def_node  */
-  YYSYMBOL_stream_ins_node = 160,          /* stream_ins_node  */
-  YYSYMBOL_stream = 161,                   /* stream  */
-  YYSYMBOL_page_priority = 162,            /* page_priority  */
-  YYSYMBOL_stream_def_list = 163,          /* stream_def_list  */
-  YYSYMBOL_page = 164,                     /* page  */
-  YYSYMBOL_165_8 = 165,                    /* $@8  */
-  YYSYMBOL_166_9 = 166,                    /* $@9  */
-  YYSYMBOL_hint = 167,                     /* hint  */
-  YYSYMBOL_directory_section = 168,        /* directory_section  */
-  YYSYMBOL_169_10 = 169,                   /* $@10  */
-  YYSYMBOL_entry_list = 170,               /* entry_list  */
-  YYSYMBOL_entry = 171,                    /* entry  */
-  YYSYMBOL_definition_section = 172,       /* definition_section  */
-  YYSYMBOL_173_11 = 173,                   /* $@11  */
-  YYSYMBOL_definition_list = 174,          /* definition_list  */
-  YYSYMBOL_max_definitions = 175,          /* max_definitions  */
-  YYSYMBOL_max_list = 176,                 /* max_list  */
-  YYSYMBOL_def_list = 177,                 /* def_list  */
-  YYSYMBOL_parameters = 178,               /* parameters  */
-  YYSYMBOL_empty_param_list = 179,         /* empty_param_list  */
-  YYSYMBOL_non_empty_param_list = 180,     /* non_empty_param_list  */
-  YYSYMBOL_181_12 = 181,                   /* $@12  */
-  YYSYMBOL_font = 182,                     /* font  */
-  YYSYMBOL_font_head = 183,                /* font_head  */
-  YYSYMBOL_font_param_list = 184,          /* font_param_list  */
-  YYSYMBOL_font_param = 185,               /* font_param  */
-  YYSYMBOL_fref = 186,                     /* fref  */
-  YYSYMBOL_xdimen_ref = 187,               /* xdimen_ref  */
-  YYSYMBOL_param_ref = 188,                /* param_ref  */
-  YYSYMBOL_stream_ref = 189,               /* stream_ref  */
-  YYSYMBOL_content_section = 190,          /* content_section  */
-  YYSYMBOL_191_13 = 191                    /* $@13  */
+  YYSYMBOL_WIDTH = 66,                     /* "width"  */
+  YYSYMBOL_HEIGHT = 67,                    /* "height"  */
+  YYSYMBOL_LABEL = 68,                     /* "label"  */
+  YYSYMBOL_BOT = 69,                       /* "bot"  */
+  YYSYMBOL_MID = 70,                       /* "mid"  */
+  YYSYMBOL_LINK = 71,                      /* "link"  */
+  YYSYMBOL_OUTLINE = 72,                   /* "outline"  */
+  YYSYMBOL_STREAM = 73,                    /* "stream"  */
+  YYSYMBOL_STREAMDEF = 74,                 /* "stream (definition)"  */
+  YYSYMBOL_FIRST = 75,                     /* "first"  */
+  YYSYMBOL_LAST = 76,                      /* "last"  */
+  YYSYMBOL_TOP = 77,                       /* "top"  */
+  YYSYMBOL_NOREFERENCE = 78,               /* "*"  */
+  YYSYMBOL_PAGE = 79,                      /* "page"  */
+  YYSYMBOL_RANGE = 80,                     /* "range"  */
+  YYSYMBOL_DIRECTORY = 81,                 /* "directory"  */
+  YYSYMBOL_SECTION = 82,                   /* "entry"  */
+  YYSYMBOL_DEFINITIONS = 83,               /* "definitions"  */
+  YYSYMBOL_MAX = 84,                       /* "max"  */
+  YYSYMBOL_PARAM = 85,                     /* "param"  */
+  YYSYMBOL_FONT = 86,                      /* "font"  */
+  YYSYMBOL_CONTENT = 87,                   /* "content"  */
+  YYSYMBOL_YYACCEPT = 88,                  /* $accept  */
+  YYSYMBOL_glyph = 89,                     /* glyph  */
+  YYSYMBOL_content_node = 90,              /* content_node  */
+  YYSYMBOL_start = 91,                     /* start  */
+  YYSYMBOL_integer = 92,                   /* integer  */
+  YYSYMBOL_string = 93,                    /* string  */
+  YYSYMBOL_number = 94,                    /* number  */
+  YYSYMBOL_dimension = 95,                 /* dimension  */
+  YYSYMBOL_xdimen = 96,                    /* xdimen  */
+  YYSYMBOL_xdimen_node = 97,               /* xdimen_node  */
+  YYSYMBOL_order = 98,                     /* order  */
+  YYSYMBOL_stretch = 99,                   /* stretch  */
+  YYSYMBOL_penalty = 100,                  /* penalty  */
+  YYSYMBOL_rule_dimension = 101,           /* rule_dimension  */
+  YYSYMBOL_rule = 102,                     /* rule  */
+  YYSYMBOL_rule_node = 103,                /* rule_node  */
+  YYSYMBOL_explicit = 104,                 /* explicit  */
+  YYSYMBOL_kern = 105,                     /* kern  */
+  YYSYMBOL_plus = 106,                     /* plus  */
+  YYSYMBOL_minus = 107,                    /* minus  */
+  YYSYMBOL_glue = 108,                     /* glue  */
+  YYSYMBOL_glue_node = 109,                /* glue_node  */
+  YYSYMBOL_position = 110,                 /* position  */
+  YYSYMBOL_content_list = 111,             /* content_list  */
+  YYSYMBOL_estimate = 112,                 /* estimate  */
+  YYSYMBOL_list = 113,                     /* list  */
+  YYSYMBOL_114_1 = 114,                    /* $@1  */
+  YYSYMBOL_text = 115,                     /* text  */
+  YYSYMBOL_txt = 116,                      /* txt  */
+  YYSYMBOL_117_2 = 117,                    /* $@2  */
+  YYSYMBOL_box_dimen = 118,                /* box_dimen  */
+  YYSYMBOL_box_shift = 119,                /* box_shift  */
+  YYSYMBOL_box_glue_set = 120,             /* box_glue_set  */
+  YYSYMBOL_box = 121,                      /* box  */
+  YYSYMBOL_hbox_node = 122,                /* hbox_node  */
+  YYSYMBOL_vbox_node = 123,                /* vbox_node  */
+  YYSYMBOL_box_flex = 124,                 /* box_flex  */
+  YYSYMBOL_xbox = 125,                     /* xbox  */
+  YYSYMBOL_box_goal = 126,                 /* box_goal  */
+  YYSYMBOL_hpack = 127,                    /* hpack  */
+  YYSYMBOL_vpack = 128,                    /* vpack  */
+  YYSYMBOL_129_3 = 129,                    /* $@3  */
+  YYSYMBOL_vxbox_node = 130,               /* vxbox_node  */
+  YYSYMBOL_hxbox_node = 131,               /* hxbox_node  */
+  YYSYMBOL_ltype = 132,                    /* ltype  */
+  YYSYMBOL_leaders = 133,                  /* leaders  */
+  YYSYMBOL_baseline = 134,                 /* baseline  */
+  YYSYMBOL_135_4 = 135,                    /* $@4  */
+  YYSYMBOL_cc_list = 136,                  /* cc_list  */
+  YYSYMBOL_lig_cc = 137,                   /* lig_cc  */
+  YYSYMBOL_ref = 138,                      /* ref  */
+  YYSYMBOL_ligature = 139,                 /* ligature  */
+  YYSYMBOL_140_5 = 140,                    /* $@5  */
+  YYSYMBOL_replace_count = 141,            /* replace_count  */
+  YYSYMBOL_disc = 142,                     /* disc  */
+  YYSYMBOL_disc_node = 143,                /* disc_node  */
+  YYSYMBOL_par_dimen = 144,                /* par_dimen  */
+  YYSYMBOL_par = 145,                      /* par  */
+  YYSYMBOL_146_6 = 146,                    /* $@6  */
+  YYSYMBOL_math = 147,                     /* math  */
+  YYSYMBOL_on_off = 148,                   /* on_off  */
+  YYSYMBOL_span_count = 149,               /* span_count  */
+  YYSYMBOL_table = 150,                    /* table  */
+  YYSYMBOL_image_aspect = 151,             /* image_aspect  */
+  YYSYMBOL_image_width = 152,              /* image_width  */
+  YYSYMBOL_image_height = 153,             /* image_height  */
+  YYSYMBOL_image_spec = 154,               /* image_spec  */
+  YYSYMBOL_image = 155,                    /* image  */
+  YYSYMBOL_max_value = 156,                /* max_value  */
+  YYSYMBOL_placement = 157,                /* placement  */
+  YYSYMBOL_def_node = 158,                 /* def_node  */
+  YYSYMBOL_stream_link = 159,              /* stream_link  */
+  YYSYMBOL_stream_split = 160,             /* stream_split  */
+  YYSYMBOL_stream_info = 161,              /* stream_info  */
+  YYSYMBOL_162_7 = 162,                    /* $@7  */
+  YYSYMBOL_stream_type = 163,              /* stream_type  */
+  YYSYMBOL_stream_def_node = 164,          /* stream_def_node  */
+  YYSYMBOL_stream_ins_node = 165,          /* stream_ins_node  */
+  YYSYMBOL_stream = 166,                   /* stream  */
+  YYSYMBOL_page_priority = 167,            /* page_priority  */
+  YYSYMBOL_stream_def_list = 168,          /* stream_def_list  */
+  YYSYMBOL_page = 169,                     /* page  */
+  YYSYMBOL_170_8 = 170,                    /* $@8  */
+  YYSYMBOL_171_9 = 171,                    /* $@9  */
+  YYSYMBOL_hint = 172,                     /* hint  */
+  YYSYMBOL_directory_section = 173,        /* directory_section  */
+  YYSYMBOL_174_10 = 174,                   /* $@10  */
+  YYSYMBOL_entry_list = 175,               /* entry_list  */
+  YYSYMBOL_entry = 176,                    /* entry  */
+  YYSYMBOL_definition_section = 177,       /* definition_section  */
+  YYSYMBOL_178_11 = 178,                   /* $@11  */
+  YYSYMBOL_definition_list = 179,          /* definition_list  */
+  YYSYMBOL_max_definitions = 180,          /* max_definitions  */
+  YYSYMBOL_max_list = 181,                 /* max_list  */
+  YYSYMBOL_def_list = 182,                 /* def_list  */
+  YYSYMBOL_parameters = 183,               /* parameters  */
+  YYSYMBOL_empty_param_list = 184,         /* empty_param_list  */
+  YYSYMBOL_non_empty_param_list = 185,     /* non_empty_param_list  */
+  YYSYMBOL_186_12 = 186,                   /* $@12  */
+  YYSYMBOL_font = 187,                     /* font  */
+  YYSYMBOL_font_head = 188,                /* font_head  */
+  YYSYMBOL_font_param_list = 189,          /* font_param_list  */
+  YYSYMBOL_font_param = 190,               /* font_param  */
+  YYSYMBOL_fref = 191,                     /* fref  */
+  YYSYMBOL_xdimen_ref = 192,               /* xdimen_ref  */
+  YYSYMBOL_param_ref = 193,                /* param_ref  */
+  YYSYMBOL_stream_ref = 194,               /* stream_ref  */
+  YYSYMBOL_content_section = 195,          /* content_section  */
+  YYSYMBOL_196_13 = 196                    /* $@13  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -687,19 +692,19 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   657
+#define YYLAST   642
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  86
+#define YYNTOKENS  88
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  106
+#define YYNNTS  109
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  266
+#define YYNRULES  274
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  566
+#define YYNSTATES  576
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   340
+#define YYMAXUTOK   342
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -747,7 +752,7 @@
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85
+      85,    86,    87
 };
 
 #if YYDEBUG
@@ -754,33 +759,34 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   264,   264,   267,   270,   274,   274,   278,   282,   282,
-     288,   290,   292,   294,   297,   300,   304,   307,   310,   313,
-     319,   324,   326,   328,   330,   334,   338,   341,   345,   345,
-     348,   354,   357,   359,   361,   364,   367,   371,   373,   376,
-     378,   381,   384,   388,   394,   397,   398,   399,   402,   405,
-     412,   411,   420,   420,   422,   425,   428,   431,   434,   437,
-     440,   443,   443,   448,   452,   455,   459,   462,   465,   470,
-     474,   477,   480,   480,   482,   485,   488,   492,   495,   498,
-     501,   505,   508,   508,   514,   517,   522,   525,   529,   529,
-     531,   533,   535,   537,   540,   543,   546,   549,   553,   553,
-     562,   567,   567,   570,   573,   576,   579,   579,   586,   590,
-     593,   597,   601,   604,   609,   614,   616,   619,   622,   625,
-     628,   628,   633,   636,   640,   644,   647,   650,   653,   656,
-     659,   662,   665,   668,   672,   676,   678,   681,   685,   689,
-     692,   695,   698,   702,   705,   709,   713,   715,   718,   721,
-     725,   732,   734,   736,   738,   741,   746,   751,   761,   763,
-     766,   769,   769,   773,   775,   777,   779,   783,   789,   794,
-     794,   796,   799,   802,   805,   810,   813,   817,   817,   819,
-     821,   819,   828,   831,   835,   837,   837,   840,   840,   841,
-     846,   846,   853,   853,   855,   880,   880,   882,   885,   888,
-     891,   894,   897,   900,   903,   906,   909,   912,   915,   918,
-     921,   924,   927,   930,   936,   939,   942,   945,   948,   951,
-     954,   957,   960,   963,   966,   969,   972,   975,   980,   983,
-     986,   990,   991,   994,   998,  1001,  1001,  1009,  1011,  1016,
-    1016,  1019,  1022,  1025,  1028,  1031,  1034,  1037,  1040,  1044,
-    1048,  1051,  1054,  1060,  1063,  1067,  1071,  1074,  1077,  1080,
-    1083,  1086,  1089,  1092,  1096,  1103,  1103
+       0,   268,   268,   271,   274,   278,   278,   282,   286,   286,
+     292,   294,   296,   298,   301,   304,   308,   311,   314,   317,
+     321,   326,   328,   330,   332,   336,   340,   343,   347,   347,
+     350,   356,   359,   361,   363,   366,   369,   373,   375,   378,
+     380,   383,   386,   390,   396,   399,   400,   401,   404,   407,
+     414,   413,   422,   422,   424,   427,   430,   433,   436,   439,
+     442,   445,   445,   450,   454,   457,   461,   464,   467,   472,
+     476,   479,   482,   482,   484,   487,   490,   494,   497,   500,
+     503,   507,   510,   510,   516,   519,   524,   527,   531,   531,
+     533,   535,   537,   539,   542,   545,   548,   551,   555,   555,
+     564,   569,   569,   572,   575,   578,   581,   581,   588,   592,
+     595,   599,   603,   606,   611,   616,   618,   621,   624,   627,
+     630,   630,   635,   638,   642,   646,   649,   652,   655,   658,
+     661,   664,   667,   670,   674,   678,   680,   683,   687,   691,
+     694,   697,   700,   704,   707,   711,   715,   717,   720,   723,
+     726,   729,   733,   737,   741,   745,   750,   754,   758,   765,
+     767,   769,   771,   774,   779,   784,   794,   796,   799,   802,
+     802,   806,   808,   810,   812,   816,   822,   827,   827,   829,
+     832,   835,   838,   843,   846,   850,   850,   852,   854,   852,
+     861,   864,   868,   870,   870,   873,   873,   874,   879,   879,
+     886,   886,   888,   913,   913,   915,   918,   921,   924,   927,
+     930,   933,   936,   939,   942,   945,   948,   951,   954,   957,
+     960,   963,   969,   972,   975,   978,   981,   984,   987,   990,
+     993,   996,   999,  1002,  1005,  1008,  1013,  1016,  1019,  1023,
+    1024,  1027,  1031,  1034,  1034,  1042,  1044,  1049,  1049,  1052,
+    1055,  1058,  1061,  1064,  1067,  1070,  1073,  1077,  1081,  1084,
+    1087,  1093,  1096,  1100,  1104,  1107,  1110,  1113,  1116,  1119,
+    1122,  1125,  1129,  1136,  1136
 };
 #endif
 
@@ -808,29 +814,30 @@
   "\"depth\"", "\"add\"", "\"to\"", "\"leaders\"", "\"align\"",
   "\"center\"", "\"expand\"", "\"baseline\"", "\"ligature\"", "\"disc\"",
   "\"par\"", "\"math\"", "\"on\"", "\"off\"", "\"adjust\"", "\"table\"",
-  "\"item\"", "\"image\"", "\"label\"", "\"bot\"", "\"mid\"", "\"link\"",
-  "\"outline\"", "\"stream\"", "\"stream (definition)\"", "\"first\"",
-  "\"last\"", "\"top\"", "\"*\"", "\"page\"", "\"range\"", "\"directory\"",
-  "\"entry\"", "\"definitions\"", "\"max\"", "\"param\"", "\"font\"",
-  "\"content\"", "$accept", "glyph", "content_node", "start", "integer",
-  "string", "number", "dimension", "xdimen", "xdimen_node", "order",
-  "stretch", "penalty", "rule_dimension", "rule", "rule_node", "explicit",
-  "kern", "plus", "minus", "glue", "glue_node", "position", "content_list",
-  "estimate", "list", "$@1", "text", "txt", "$@2", "box_dimen",
-  "box_shift", "box_glue_set", "box", "hbox_node", "vbox_node", "box_flex",
-  "xbox", "box_goal", "hpack", "vpack", "$@3", "vxbox_node", "hxbox_node",
-  "ltype", "leaders", "baseline", "$@4", "cc_list", "lig_cc", "ref",
-  "ligature", "$@5", "replace_count", "disc", "disc_node", "par_dimen",
-  "par", "$@6", "math", "on_off", "span_count", "table", "image_dimen",
-  "image", "max_value", "placement", "def_node", "stream_link",
-  "stream_split", "stream_info", "$@7", "stream_type", "stream_def_node",
-  "stream_ins_node", "stream", "page_priority", "stream_def_list", "page",
-  "$@8", "$@9", "hint", "directory_section", "$@10", "entry_list", "entry",
-  "definition_section", "$@11", "definition_list", "max_definitions",
-  "max_list", "def_list", "parameters", "empty_param_list",
-  "non_empty_param_list", "$@12", "font", "font_head", "font_param_list",
-  "font_param", "fref", "xdimen_ref", "param_ref", "stream_ref",
-  "content_section", "$@13", YY_NULLPTR
+  "\"item\"", "\"image\"", "\"width\"", "\"height\"", "\"label\"",
+  "\"bot\"", "\"mid\"", "\"link\"", "\"outline\"", "\"stream\"",
+  "\"stream (definition)\"", "\"first\"", "\"last\"", "\"top\"", "\"*\"",
+  "\"page\"", "\"range\"", "\"directory\"", "\"entry\"", "\"definitions\"",
+  "\"max\"", "\"param\"", "\"font\"", "\"content\"", "$accept", "glyph",
+  "content_node", "start", "integer", "string", "number", "dimension",
+  "xdimen", "xdimen_node", "order", "stretch", "penalty", "rule_dimension",
+  "rule", "rule_node", "explicit", "kern", "plus", "minus", "glue",
+  "glue_node", "position", "content_list", "estimate", "list", "$@1",
+  "text", "txt", "$@2", "box_dimen", "box_shift", "box_glue_set", "box",
+  "hbox_node", "vbox_node", "box_flex", "xbox", "box_goal", "hpack",
+  "vpack", "$@3", "vxbox_node", "hxbox_node", "ltype", "leaders",
+  "baseline", "$@4", "cc_list", "lig_cc", "ref", "ligature", "$@5",
+  "replace_count", "disc", "disc_node", "par_dimen", "par", "$@6", "math",
+  "on_off", "span_count", "table", "image_aspect", "image_width",
+  "image_height", "image_spec", "image", "max_value", "placement",
+  "def_node", "stream_link", "stream_split", "stream_info", "$@7",
+  "stream_type", "stream_def_node", "stream_ins_node", "stream",
+  "page_priority", "stream_def_list", "page", "$@8", "$@9", "hint",
+  "directory_section", "$@10", "entry_list", "entry", "definition_section",
+  "$@11", "definition_list", "max_definitions", "max_list", "def_list",
+  "parameters", "empty_param_list", "non_empty_param_list", "$@12", "font",
+  "font_head", "font_param_list", "font_param", "fref", "xdimen_ref",
+  "param_ref", "stream_ref", "content_section", "$@13", YY_NULLPTR
 };
 
 static const char *
@@ -840,7 +847,7 @@
 }
 #endif
 
-#define YYPACT_NINF (-326)
+#define YYPACT_NINF (-242)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -854,63 +861,64 @@
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      48,    -4,   110,   113,   107,  -326,    52,   137,  -326,  -326,
-      74,  -326,  -326,   153,  -326,   211,    85,  -326,  -326,    94,
-    -326,  -326,  -326,   275,  -326,   278,   190,   280,   159,  -326,
-     313,  -326,    31,  -326,  -326,   585,  -326,  -326,  -326,  -326,
-    -326,  -326,  -326,  -326,   223,   467,  -326,   203,   234,   234,
-     234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
-     234,   234,   240,   248,   116,   219,   253,   140,   210,   229,
-     182,   182,   220,   182,   220,   182,   121,   229,   234,    71,
-     229,    41,    66,   271,    79,   301,   261,   234,   234,  -326,
-    -326,   268,   270,   279,   284,   286,   288,   294,   297,   315,
-     325,   326,   327,   328,   333,   334,   335,   337,   338,   339,
-     343,   242,  -326,   229,   182,   219,   223,   152,   229,   345,
-     182,   234,   210,   348,   223,   350,   223,    82,   251,   323,
-     342,   353,  -326,  -326,  -326,   355,   357,   358,  -326,  -326,
-    -326,  -326,   231,  -326,   152,   359,   361,  -326,   165,   362,
-     182,   341,   372,   373,   182,   220,   375,   377,   182,   264,
-     379,   220,   380,   305,   384,   385,  -326,   363,   200,   387,
-     389,  -326,   390,   391,   395,   396,   398,   397,    66,   401,
-     234,  -326,  -326,   404,   234,  -326,  -326,  -326,  -326,   405,
-    -326,    66,    66,  -326,   350,   406,   264,   264,   407,  -326,
-     408,   530,   409,   399,   182,   410,   411,   255,  -326,   234,
-      80,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,   413,   414,   416,   417,   418,   419,   421,   422,
-     423,   427,   429,  -326,   430,   432,   433,  -326,   435,  -326,
-    -326,   436,   182,   437,   345,  -326,  -326,  -326,   438,   440,
-     441,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-     152,  -326,  -326,   234,  -326,   442,  -326,   302,   182,   420,
-    -326,  -326,   182,   293,  -326,  -326,  -326,   121,   121,    66,
-    -326,   341,  -326,   400,  -326,  -326,   229,  -326,  -326,  -326,
-     345,  -326,  -326,   345,  -326,  -326,  -326,   176,  -326,  -326,
-    -326,    66,  -326,  -326,    66,  -326,    66,    66,  -326,    38,
-     345,    66,    66,    53,   345,    66,  -326,  -326,  -326,    66,
-      66,  -326,  -326,  -326,   445,   182,   341,  -326,  -326,   446,
-     448,    66,    66,  -326,  -326,  -326,  -326,   439,   450,  -326,
-      66,    66,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,  -326,  -326,  -326,  -326,   452,  -326,  -326,   451,
-    -326,   453,  -326,   345,   345,  -326,  -326,  -326,  -326,   456,
-    -326,   182,  -326,   164,  -326,   182,  -326,  -326,   182,   182,
-      66,  -326,  -326,  -326,  -326,  -326,   420,   121,   182,   458,
-     460,    49,  -326,  -326,  -326,   345,  -326,  -326,   434,  -326,
-      66,    35,  -326,    66,  -326,    66,  -326,  -326,   424,  -326,
-    -326,   345,    66,  -326,  -326,  -326,   324,    66,    66,  -326,
-    -326,   420,  -326,  -326,  -326,    66,  -326,   182,  -326,   345,
-     463,  -326,   345,  -326,   462,   412,  -326,   105,  -326,  -326,
-     454,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,    66,    66,  -326,  -326,  -326,   152,  -326,  -326,  -326,
-    -326,  -326,   350,  -326,  -326,  -326,   184,  -326,  -326,  -326,
-    -326,  -326,   466,    39,   345,  -326,   182,  -326,   210,   234,
-     234,   234,   234,   234,   234,   234,   234,  -326,  -326,  -326,
-     264,    72,   471,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,   399,  -326,  -326,  -326,    39,  -326,    66,  -326,
-    -326,   242,   223,   152,   210,   182,   234,   210,   348,    66,
-    -326,  -326,  -326,  -326,   470,   345,   345,   473,   476,   478,
-     182,   480,   481,   482,   483,   484,  -326,  -326,   489,   345,
-    -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,    66,
-    -326,   345,   425,  -326,   234,    69
+      55,    10,   108,   129,   135,  -242,    81,   170,  -242,  -242,
+     104,  -242,  -242,   191,  -242,   209,   113,  -242,  -242,   140,
+    -242,  -242,  -242,   216,  -242,   227,   220,   238,   177,  -242,
+      59,  -242,    -2,  -242,  -242,   568,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,  -242,   280,   391,  -242,   252,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   257,   260,    75,   278,   264,   175,   246,   217,
+     164,   164,   256,   164,   256,   164,   110,   217,   255,    70,
+     217,    88,    94,   167,    87,   300,   286,   255,   255,  -242,
+    -242,   299,   310,   313,   321,   339,   341,   343,   344,   345,
+     349,   352,   353,   354,   355,   356,   357,   358,   359,   360,
+     342,   115,  -242,   217,   164,   278,   280,   181,   217,   364,
+     164,   255,   246,   362,   280,   363,   280,    90,   254,   365,
+     366,   367,  -242,  -242,  -242,   370,   371,   377,  -242,  -242,
+    -242,  -242,   297,  -242,   181,   379,   382,  -242,   198,   383,
+     164,   361,   384,   386,   164,   256,   389,   392,   164,   275,
+     393,   256,   394,   315,   397,   400,  -242,   380,   269,   402,
+     404,  -242,   406,   407,   408,   409,   411,   415,    94,   418,
+     255,  -242,  -242,   419,   255,  -242,  -242,  -242,  -242,   420,
+    -242,    94,    94,  -242,   363,   421,   275,   275,   422,  -242,
+     423,   513,   427,   430,   164,   434,    94,   436,   277,  -242,
+     255,    76,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,   437,   441,   445,   446,   447,   448,   449,
+     450,   453,   454,   457,  -242,   458,   463,   464,  -242,   465,
+    -242,  -242,   468,   164,   469,   364,  -242,  -242,  -242,   470,
+     471,   474,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,   181,  -242,  -242,   255,  -242,   475,  -242,   322,   164,
+     455,  -242,  -242,   164,   311,  -242,  -242,  -242,   110,   110,
+      94,  -242,   361,  -242,   433,  -242,  -242,   217,  -242,  -242,
+    -242,   364,  -242,  -242,   364,  -242,  -242,  -242,   193,  -242,
+    -242,  -242,    94,  -242,  -242,    94,  -242,    94,    94,  -242,
+      45,   364,    94,    94,    51,   364,    94,  -242,  -242,  -242,
+      94,    94,  -242,  -242,  -242,   480,  -242,   304,  -242,  -242,
+    -242,   481,   483,    94,    94,  -242,  -242,  -242,  -242,   472,
+     485,  -242,    94,    94,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,   487,  -242,
+    -242,   486,  -242,   489,  -242,   364,   364,  -242,  -242,  -242,
+    -242,   493,  -242,   164,  -242,   197,  -242,   164,  -242,  -242,
+     164,   164,    94,  -242,  -242,  -242,  -242,  -242,   455,   110,
+     164,   494,   495,   154,  -242,  -242,  -242,   364,  -242,  -242,
+     473,  -242,    94,    46,  -242,    94,  -242,    94,  -242,  -242,
+     459,  -242,  -242,   364,    94,  -242,  -242,  -242,   340,    94,
+      94,  -242,   240,   435,  -242,  -242,  -242,    94,  -242,   164,
+    -242,   364,   497,  -242,   364,  -242,   498,   451,  -242,    77,
+    -242,  -242,   488,  -242,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,    94,    94,  -242,  -242,  -242,   181,  -242,
+    -242,  -242,  -242,  -242,   363,  -242,  -242,  -242,   200,  -242,
+    -242,  -242,   440,  -242,   250,  -242,  -242,   505,    47,   364,
+    -242,   164,  -242,   246,   255,   255,   255,   255,   255,   255,
+     255,   255,  -242,  -242,  -242,   275,   107,   506,  -242,  -242,
+    -242,  -242,  -242,  -242,  -242,  -242,  -242,   430,   262,  -242,
+    -242,  -242,  -242,  -242,  -242,    47,  -242,    94,  -242,  -242,
+     115,   280,   181,   246,   164,   255,   246,   362,    94,  -242,
+    -242,  -242,  -242,  -242,   507,   364,   364,   508,   510,   511,
+     164,   512,   516,   517,   521,   522,  -242,  -242,   523,   364,
+    -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,    94,
+    -242,   364,   443,  -242,   255,    86
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -918,11 +926,11 @@
    means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,     0,     0,     0,     0,     1,     0,     0,   185,   190,
-       0,   184,   187,     0,   265,     0,     0,   192,    44,     0,
-     186,   188,   195,     0,    45,     0,     0,     0,     4,   191,
-       0,   193,     4,   266,    46,     0,    32,    72,    73,    88,
-      89,   115,   169,   170,     0,     0,   194,     0,     0,     0,
+       0,     0,     0,     0,     0,     1,     0,     0,   193,   198,
+       0,   192,   195,     0,   273,     0,     0,   200,    44,     0,
+     194,   196,   203,     0,    45,     0,     0,     0,     4,   199,
+       0,   201,     4,   274,    46,     0,    32,    72,    73,    88,
+      89,   115,   177,   178,     0,     0,   202,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
        0,     0,    64,     0,    64,     0,     0,     0,     0,    33,
@@ -930,83 +938,84 @@
        9,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   105,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,    47,     0,   154,     0,     0,
+       0,     0,    33,     0,     0,    47,     0,   162,     0,     0,
        0,     0,     6,     5,    26,     0,     0,     0,    10,    11,
       12,    29,     0,    28,     0,     0,     0,    34,     0,     0,
       19,    37,     0,     0,     0,    64,     0,     0,     0,     0,
        0,    64,     0,     0,     0,     0,     4,     0,    90,     0,
        0,    98,     0,     0,   106,     0,   109,     0,   113,     0,
-     116,   250,    44,     0,    44,   135,   136,   234,   251,     0,
+     116,   258,    44,     0,    44,   135,   136,   242,   259,     0,
      137,     0,     0,    44,    47,     0,     0,     0,     0,   139,
-       0,    47,     0,     0,   147,     0,     0,     0,   252,    44,
-       0,   189,   199,   208,   198,   203,   204,   202,   206,   207,
-     200,   201,   205,   213,   150,   210,   211,   212,   209,   197,
-     196,    44,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   106,     0,     0,     0,   179,     0,    48,
-      44,     0,     0,     0,     0,   152,   153,   151,     0,     0,
-       0,     2,     7,     3,    27,   253,   263,    13,    15,    14,
-       0,    31,   259,     0,    35,     0,    36,     0,     0,    39,
-      42,   256,     0,    66,    70,    71,    65,     0,     0,     0,
-      87,    37,    86,     0,    85,    84,     0,    91,    92,    93,
-       0,    97,   261,     0,   100,   262,   257,     0,   108,   110,
-     258,   112,   114,   120,     0,   124,     0,     0,   134,    47,
-     128,     0,     0,    47,   125,     0,    50,    44,   138,     0,
-       0,   145,   140,   142,     0,     0,    37,   260,   149,     0,
-       0,     0,     0,   168,   164,   165,   166,     0,     0,   163,
-       0,     0,   216,   229,   219,   215,   228,   217,   220,   218,
-     230,   221,   222,   223,   224,   225,   175,   227,   231,   233,
-     226,     0,   214,     0,   237,   155,   182,   183,    30,     0,
-     254,    17,    18,     0,    38,     0,    41,    63,     0,     0,
-       0,    80,    78,    79,    77,    81,    39,     0,     0,     0,
-       0,     0,    94,    95,    96,     0,   103,   104,     0,   111,
-       0,    47,   123,     0,   119,     0,   117,   235,     0,   129,
-     130,   131,     0,   126,   127,    44,     0,     0,     0,   141,
-     146,    39,   156,   174,   171,     0,   173,     0,   161,     0,
-       0,   176,     0,   232,     0,     0,   239,     0,   240,   255,
-       0,    21,    22,    23,    24,    25,    40,    67,    68,    69,
-      74,     0,     0,    82,    43,   264,     0,    99,   101,   121,
-     122,   118,    47,   132,   133,    52,    61,    49,   143,   144,
-     148,   172,     0,     0,     0,   157,     0,   238,    33,     0,
-       0,     0,     0,     0,     0,     0,     0,    16,    76,    75,
-       0,     0,     0,    51,    60,    58,    59,    55,    57,    56,
-      54,    53,     0,    20,   159,   158,     0,   162,     0,   180,
-     249,     0,     0,     0,    33,     0,     0,    33,     0,     0,
-     107,   102,   236,    62,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    83,   160,     0,     0,
-     241,   246,   247,   242,   245,   243,   244,   248,   167,     0,
-     177,   181,     0,   178,     0,     0
+       0,    47,     0,     0,   147,     0,     0,     0,     0,   260,
+      44,     0,   197,   207,   216,   206,   211,   212,   210,   214,
+     215,   208,   209,   213,   221,   158,   218,   219,   220,   217,
+     205,   204,    44,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   106,     0,     0,     0,   187,     0,
+      48,    44,     0,     0,     0,     0,   160,   161,   159,     0,
+       0,     0,     2,     7,     3,    27,   261,   271,    13,    15,
+      14,     0,    31,   267,     0,    35,     0,    36,     0,     0,
+      39,    42,   264,     0,    66,    70,    71,    65,     0,     0,
+       0,    87,    37,    86,     0,    85,    84,     0,    91,    92,
+      93,     0,    97,   269,     0,   100,   270,   265,     0,   108,
+     110,   266,   112,   114,   120,     0,   124,     0,     0,   134,
+      47,   128,     0,     0,    47,   125,     0,    50,    44,   138,
+       0,     0,   145,   140,   142,     0,   146,   149,   268,   156,
+     157,     0,     0,     0,     0,   176,   172,   173,   174,     0,
+       0,   171,     0,     0,   224,   237,   227,   223,   236,   225,
+     228,   226,   238,   229,   230,   231,   232,   233,   183,   235,
+     239,   241,   234,     0,   222,     0,   245,   163,   190,   191,
+      30,     0,   262,    17,    18,     0,    38,     0,    41,    63,
+       0,     0,     0,    80,    78,    79,    77,    81,    39,     0,
+       0,     0,     0,     0,    94,    95,    96,     0,   103,   104,
+       0,   111,     0,    47,   123,     0,   119,     0,   117,   243,
+       0,   129,   130,   131,     0,   126,   127,    44,     0,     0,
+       0,   141,     0,   151,   164,   182,   179,     0,   181,     0,
+     169,     0,     0,   184,     0,   240,     0,     0,   247,     0,
+     248,   263,     0,    21,    22,    23,    24,    25,    40,    67,
+      68,    69,    74,     0,     0,    82,    43,   272,     0,    99,
+     101,   121,   122,   118,    47,   132,   133,    52,    61,    49,
+     143,   144,   151,   148,     0,   152,   180,     0,     0,     0,
+     165,     0,   246,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,    16,    76,    75,     0,     0,     0,    51,    60,
+      58,    59,    55,    57,    56,    54,    53,     0,     0,   153,
+     154,   150,    20,   167,   166,     0,   170,     0,   188,   257,
+       0,     0,     0,    33,     0,     0,    33,     0,     0,   107,
+     102,   244,    62,   155,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    83,   168,     0,     0,
+     249,   254,   255,   250,   253,   251,   252,   256,   175,     0,
+     185,   189,     0,   186,     0,     0
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -326,  -326,   -65,   -23,    97,   -79,   -83,   -13,   -62,  -232,
-    -326,  -191,   -27,  -118,   -94,   195,   -67,   -26,  -228,  -325,
-     -97,  -226,    -1,   172,   -86,   -55,  -326,  -326,  -326,  -326,
-     198,   -36,  -326,   431,  -111,   201,  -326,   428,  -147,  -326,
-    -326,  -326,  -326,  -326,  -326,   381,   386,  -326,  -326,  -326,
-     -45,   -96,  -326,  -326,   -95,   132,  -326,  -326,  -326,  -326,
-     300,  -326,  -326,  -326,   -93,  -326,  -326,   139,    -7,  -326,
-    -326,  -326,  -326,   -50,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
-    -326,  -326,    42,   -89,  -227,  -326,  -326,  -326,  -326,  -326,
-    -290,  -222,   -92,  -326,  -326,  -326
+    -242,  -242,   -83,   -23,   100,   -87,   -86,    -8,   -54,  -233,
+    -242,  -137,   -19,   -94,   -96,   229,   -51,    -5,   239,   134,
+     -99,  -217,    28,   205,   -95,   -35,  -242,  -242,  -242,  -242,
+     127,   -33,  -242,   476,  -147,   242,  -242,   466,  -169,  -242,
+    -242,  -242,  -242,  -242,  -242,   425,   426,  -242,  -242,  -242,
+     -45,  -103,  -242,  -242,   -97,   174,  -242,  -242,  -242,  -242,
+     331,  -242,  -242,  -242,  -242,    63,  -242,  -100,  -242,  -242,
+     179,    26,  -242,  -242,  -242,  -242,   -18,  -242,  -242,  -242,
+    -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,  -242,
+    -242,  -242,  -242,  -242,  -242,    82,  -110,  -188,  -242,  -242,
+    -242,  -242,  -242,  -166,  -241,   -73,  -242,  -242,  -242
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,   131,    34,   194,   134,    91,   142,   150,   151,   348,
-     455,   384,   135,   144,   145,    36,   176,   149,   279,   386,
-     152,   168,   187,    25,   327,   195,   425,   476,   511,   512,
-     155,   159,   390,   156,    37,    38,   397,   162,   289,   160,
-     164,   500,    39,    40,   300,   169,   172,   303,   501,   408,
-     520,   175,   307,   178,   179,    41,   182,   183,   410,   189,
-     190,   203,   198,   336,   206,   110,   258,    31,   516,   517,
-     349,   483,   350,    42,    43,   340,   442,   561,   248,   366,
-     536,     2,     3,    12,    15,    21,     7,    13,    23,    17,
-      27,   369,   251,   191,   322,   472,   253,   254,   374,   448,
-     521,   184,   192,   209,    11,    18
+       0,   131,    34,   194,   134,    91,   142,   150,   151,   350,
+     457,   386,   135,   144,   145,    36,   176,   149,   280,   388,
+     152,   168,   187,    25,   328,   195,   427,   478,   516,   517,
+     155,   159,   392,   156,    37,    38,   399,   162,   290,   160,
+     164,   505,    39,    40,   301,   169,   172,   304,   506,   410,
+     529,   175,   308,   178,   179,    41,   182,   183,   412,   189,
+     190,   203,   198,   337,   433,   485,   206,   207,   110,   259,
+      31,   525,   526,   351,   488,   352,    42,    43,   342,   444,
+     571,   249,   368,   546,     2,     3,    12,    15,    21,     7,
+      13,    23,    17,    27,   371,   252,   191,   323,   474,   254,
+     255,   376,   450,   530,   184,   192,   210,    11,    18
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1014,142 +1023,140 @@
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      30,   148,    35,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,    24,   180,   200,
-     136,   239,   146,   238,   153,   244,   270,   245,   373,   202,
-     246,   170,   173,   174,   177,   181,   188,   237,   163,   250,
-     205,   249,   208,   210,   249,   247,   112,   252,   112,   329,
-     330,     1,   234,   167,   143,   391,   393,   154,   154,   249,
-     154,   201,   154,   396,   171,   392,   394,   277,   233,   166,
-     236,   460,   166,   240,   466,     4,   243,   405,   112,    70,
-     321,   325,    32,   166,   343,   199,   274,   413,   313,   415,
-      70,    71,   317,   314,    70,   316,   167,    62,   193,   147,
-     232,   185,   186,   275,   143,   530,   480,   171,   431,    63,
-       5,   193,   531,     8,   435,   514,     6,   342,   417,   283,
-     341,   417,   129,   311,   166,   291,   130,   489,   112,   490,
-     491,   143,   492,     9,   493,   188,   320,   324,   334,   188,
-      10,   282,   344,   345,   346,   286,   138,   112,   139,   255,
-     256,   140,   378,   344,   345,   346,    16,   257,   138,    14,
-     139,   494,   495,   140,   188,   461,   141,    22,   319,   323,
-     496,   138,   112,   139,    26,   462,   140,   451,   141,   467,
-      35,   273,   406,   452,   453,   454,   407,   347,   138,   403,
-     139,   335,   326,   140,   456,   383,    44,   457,   458,   399,
-     522,   523,   524,   525,   526,   527,   528,   484,   231,   419,
-     111,   422,   235,   423,    19,    20,   486,   503,   504,   505,
-     506,   507,   508,   509,   510,   132,   112,   133,   379,    47,
-     351,   167,    89,    90,   395,   138,   112,   139,   147,   371,
-     140,   112,   181,   181,   267,   268,   269,   127,   132,   368,
-     133,   400,   297,   298,   299,   128,   409,   143,   518,   412,
-     137,   414,   416,   158,   347,   347,   420,   421,   207,   387,
-     424,   161,   211,   161,   427,   428,   212,   401,    28,    29,
-     167,    32,    33,    45,    46,   213,   434,   436,   196,   197,
-     214,   411,   215,   411,   216,   439,   440,   418,   450,   323,
-     217,   418,   383,   218,   549,   383,   383,   204,   112,   548,
-     473,   259,   260,   287,   288,   185,   186,   559,   411,   381,
-     382,   219,   430,   388,   389,    48,    24,    32,   477,    49,
-     261,   220,   221,   222,   223,   459,    50,    51,    52,   224,
-     225,   226,    53,   227,   228,   229,    30,   230,   166,   262,
-     445,   447,   181,   529,   204,   469,   249,   263,   470,   264,
-     471,   265,   266,   271,    54,   272,   276,   474,    55,    56,
-      57,   278,   478,   479,   347,   482,   280,   281,    58,   284,
-     481,   285,   167,   290,   292,   463,   250,   293,   294,   295,
-      59,   301,   296,   302,   304,   305,    60,    61,   418,   306,
-     308,   310,    32,    35,   309,   312,   498,   499,   315,   318,
-     328,   331,   332,   333,   337,   338,   347,   352,   353,   167,
-     354,   355,   356,   357,   475,   358,   359,   360,   542,   539,
-     543,   361,   544,   362,   363,   545,   364,   365,   515,   367,
-     370,   372,   375,   538,   376,   377,   380,   533,   398,   429,
-     432,   385,   433,   143,    28,   437,   438,   540,   441,   444,
-     449,   167,   464,   535,   465,    70,   468,   485,   487,   488,
-     513,   515,   497,   519,   546,   532,   547,   550,   274,    92,
-     551,   243,   552,    93,   553,   554,   555,   556,   557,    35,
-      94,    95,    96,   558,   537,   402,    97,   564,   541,   426,
-     241,   404,   157,   165,   560,   446,   242,   339,   443,   534,
-     143,   563,   167,   347,   502,     0,     0,     0,    98,   565,
-       0,     0,    99,   100,   101,     0,   347,     0,     0,     0,
-       0,     0,   102,   103,     0,    64,   249,   104,   562,   105,
-       0,     0,   347,     0,   106,   107,     0,     0,     0,     0,
-     108,   109,    65,     0,    66,    67,     0,    68,     0,    69,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    70,    71,     0,    72,    73,    74,    75,     0,     0,
-       0,    76,     0,     0,     0,    77,    78,    79,    80,    81,
-      64,     0,    82,    83,    84,    85,     0,     0,     0,    86,
-       0,    87,    88,     0,     0,     0,     0,    65,     0,    66,
-      67,     0,    68,     0,    69,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    70,    71,     0,    72,
-      73,    74,    75,     0,     0,     0,    76,     0,     0,     0,
-      77,    78,    79,    80,    81,     0,     0,    82,    83,    84,
-      85,     0,     0,     0,    86,     0,    87,    88
+      30,   200,    35,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   148,   245,   240,
+     136,   239,   146,   247,   153,   246,   180,   330,   331,   238,
+     251,   170,   173,   174,   177,   181,   188,   248,   375,   253,
+     205,   163,   209,   211,   322,   326,    24,   394,   396,   202,
+     271,   250,   250,   167,   112,   393,   395,   250,     1,   143,
+     235,   201,   154,   154,   278,   154,    62,   154,   234,   171,
+     237,    48,   315,   241,   317,    49,   244,   112,    63,   166,
+     345,   129,    50,    51,    52,   130,    70,   407,    53,   166,
+      32,     4,    70,   199,   275,   112,   167,   166,   147,   494,
+     343,   495,   496,   276,   497,   233,   498,   314,     5,   143,
+      54,   318,   171,   166,    55,    56,    57,   112,   336,   193,
+     335,   132,   284,   133,    58,   523,   193,   415,   292,   417,
+     419,   419,     6,   499,   500,   188,   143,   344,    59,   188,
+     539,     8,   501,   312,    60,    61,   283,   540,   185,   186,
+     287,   346,   347,   348,   405,   437,   321,   325,   464,   256,
+     257,   346,   347,   348,     9,   188,   463,   258,   320,   324,
+     138,   339,   139,    10,   421,   140,   424,   380,   425,   468,
+      35,   138,   112,   139,   196,   197,   140,   138,   349,   139,
+     469,    14,   140,   385,    16,    70,    71,    22,   401,   408,
+     161,   141,   161,   409,   138,   112,   139,   141,   489,   140,
+     453,   232,    19,    20,   274,   236,   454,   455,   456,    28,
+      29,   327,    26,   138,   112,   139,    44,   491,   140,   381,
+      32,    33,   167,   508,   509,   510,   511,   512,   513,   514,
+     515,    45,    46,   181,   181,   373,   138,   482,   139,    47,
+     458,   140,   402,   459,   460,   397,   138,   520,   139,   111,
+     353,   140,   112,   143,   127,   349,   349,   128,   138,   543,
+     139,   137,   527,   140,   147,   389,   475,   411,   403,   370,
+     414,   167,   416,   418,   132,   112,   133,   422,   423,    89,
+      90,   426,   413,   208,   413,   429,   430,   452,   420,   158,
+     324,   385,   420,   212,   385,   385,   204,   112,   436,   438,
+     268,   269,   270,   559,   260,   261,   213,   441,   442,   214,
+     413,   298,   299,   300,   288,   289,   569,   215,   558,   531,
+     532,   533,   534,   535,   536,   537,   538,   185,   186,   383,
+     384,   390,   391,    32,   479,   216,   231,   217,    30,   218,
+     219,   220,   447,   449,   181,   221,    24,   461,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   166,   204,   250,
+     432,   264,   262,   263,   265,   266,   349,   471,   483,   251,
+     472,   267,   473,   272,   167,   487,   273,   277,   281,   476,
+     282,   279,   465,   285,   480,   481,   286,   291,   293,   294,
+     420,   295,   486,    92,   296,    35,   302,    93,   303,   297,
+     305,   306,   307,   309,    94,    95,    96,   310,   349,   311,
+      97,   167,   313,   316,   319,   329,   332,   333,   503,   504,
+     521,   334,   553,    32,   542,   552,   549,   555,   338,   554,
+     340,   354,    98,   524,   548,   355,    99,   100,   101,   356,
+     357,   358,   359,   360,   361,   477,   102,   362,   363,   103,
+     143,   364,   365,   104,   521,   105,   167,   366,   367,   369,
+     106,   107,   372,   374,   377,   378,   108,   109,   379,   382,
+     524,   400,   550,   528,   431,   434,   387,   435,   439,    28,
+     244,   440,   545,   443,    35,   446,   275,   451,   466,   467,
+      70,   490,   484,   556,   492,   470,   502,   518,   493,   522,
+     541,   547,   560,   557,   561,   562,   563,   574,    64,   250,
+     564,   565,   167,   349,   143,   566,   567,   568,   551,   575,
+     404,   398,   462,   428,   570,    65,   349,    66,    67,   341,
+      68,   165,    69,   406,   242,   519,   243,   157,   572,   448,
+     445,   544,   349,   573,    70,    71,   507,    72,    73,    74,
+      75,     0,     0,     0,    76,     0,     0,     0,    77,    78,
+      79,    80,    81,    64,     0,    82,    83,    84,    85,     0,
+       0,     0,     0,     0,    86,     0,    87,    88,     0,     0,
+      65,     0,    66,    67,     0,    68,     0,    69,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    70,
+      71,     0,    72,    73,    74,    75,     0,     0,     0,    76,
+       0,     0,     0,    77,    78,    79,    80,    81,     0,     0,
+      82,    83,    84,    85,     0,     0,     0,     0,     0,    86,
+       0,    87,    88
 };
 
 static const yytype_int16 yycheck[] =
 {
-      23,    68,    25,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    18,    80,    84,
-      65,   118,    67,   117,    69,   121,   144,   122,   254,    84,
-     123,    76,    77,    78,    79,    80,    81,   116,    74,   125,
-      85,     6,    87,    88,     6,   124,     7,   126,     7,   196,
-     197,     3,   114,    76,    67,   287,   288,    70,    71,     6,
-      73,    84,    75,   291,    77,   287,   288,   150,   113,     3,
-     115,   396,     3,   118,    25,    79,   121,   303,     7,    41,
-     191,   192,     3,     3,     4,     6,   148,   314,   180,   316,
-      41,    42,   184,   182,    41,   184,   119,    66,    32,    28,
-     113,    60,    61,   148,   117,    33,   431,   120,   336,    78,
-       0,    32,    40,     6,   341,    76,     3,   209,    83,   155,
-     209,    83,     6,   178,     3,   161,    10,    22,     7,    24,
-      25,   144,    27,    81,    29,   180,   191,   192,   203,   184,
-       3,   154,    73,    74,    75,   158,     6,     7,     8,    67,
-      68,    11,   270,    73,    74,    75,     3,    75,     6,    85,
-       8,    56,    57,    11,   209,   397,    26,    82,   191,   192,
-      65,     6,     7,     8,    80,   397,    11,    13,    26,   405,
-     203,    16,     6,    19,    20,    21,    10,   210,     6,   300,
-       8,   204,   193,    11,   385,   278,     6,   388,   389,   296,
-     490,   491,   492,   493,   494,   495,   496,   439,   111,   320,
-       7,   322,   115,   324,     3,     4,   442,    33,    34,    35,
-      36,    37,    38,    39,    40,     6,     7,     8,   273,    70,
-     231,   254,     9,    10,   289,     6,     7,     8,    28,   252,
-      11,     7,   287,   288,    13,    14,    15,     7,     6,   250,
-       8,   296,    52,    53,    54,     7,   311,   270,   484,   314,
-       7,   316,   317,    43,   287,   288,   321,   322,     7,   282,
-     325,    73,     4,    75,   329,   330,     6,   300,     3,     4,
-     303,     3,     4,     3,     4,     6,   341,   342,    17,    18,
-       6,   314,     6,   316,     6,   350,   351,   320,   381,   322,
-       6,   324,   385,     6,   536,   388,   389,     6,     7,   535,
-     421,    60,    61,    49,    50,    60,    61,   549,   341,    17,
-      18,     6,   335,    30,    31,    12,   327,     3,     4,    16,
-       7,     6,     6,     6,     6,   390,    23,    24,    25,     6,
-       6,     6,    29,     6,     6,     6,   369,     4,     3,     7,
-     373,   374,   397,   500,     6,   410,     6,     4,   413,     4,
-     415,     4,     4,     4,    51,     4,     4,   422,    55,    56,
-      57,    30,   427,   428,   397,   437,     4,     4,    65,     4,
-     435,     4,   405,     4,     4,   398,   472,    82,     4,     4,
-      77,     4,    29,     4,     4,     4,    83,    84,   421,     4,
-       4,     4,     3,   426,     6,     4,   461,   462,     4,     4,
-       4,     4,     4,     4,     4,     4,   439,     4,     4,   442,
-       4,     4,     4,     4,   425,     4,     4,     4,   525,   523,
-     526,     4,   527,     4,     4,   528,     4,     4,   483,     4,
-       4,     4,     4,   522,     4,     4,     4,   512,    48,     4,
-       4,    31,     4,   466,     3,    16,     6,   524,     6,     6,
-       4,   484,     4,   518,     4,    41,    32,     4,     6,    57,
-       4,   516,    18,   486,   529,     4,     6,     4,   540,    12,
-       4,   526,     4,    16,     4,     4,     4,     4,     4,   512,
-      23,    24,    25,     4,   521,   300,    29,    72,   524,   327,
-     119,   300,    71,    75,   559,   373,   120,   207,   369,   516,
-     523,   561,   535,   536,   472,    -1,    -1,    -1,    51,   564,
-      -1,    -1,    55,    56,    57,    -1,   549,    -1,    -1,    -1,
-      -1,    -1,    65,    66,    -1,     5,     6,    70,   561,    72,
-      -1,    -1,   565,    -1,    77,    78,    -1,    -1,    -1,    -1,
-      83,    84,    22,    -1,    24,    25,    -1,    27,    -1,    29,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    41,    42,    -1,    44,    45,    46,    47,    -1,    -1,
-      -1,    51,    -1,    -1,    -1,    55,    56,    57,    58,    59,
-       5,    -1,    62,    63,    64,    65,    -1,    -1,    -1,    69,
-      -1,    71,    72,    -1,    -1,    -1,    -1,    22,    -1,    24,
-      25,    -1,    27,    -1,    29,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    -1,    44,
-      45,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    -1,    -1,    -1,    69,    -1,    71,    72
+      23,    84,    25,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    68,   121,   118,
+      65,   117,    67,   123,    69,   122,    80,   196,   197,   116,
+     125,    76,    77,    78,    79,    80,    81,   124,   255,   126,
+      85,    74,    87,    88,   191,   192,    18,   288,   289,    84,
+     144,     6,     6,    76,     7,   288,   289,     6,     3,    67,
+     114,    84,    70,    71,   150,    73,    68,    75,   113,    77,
+     115,    12,   182,   118,   184,    16,   121,     7,    80,     3,
+       4,     6,    23,    24,    25,    10,    41,   304,    29,     3,
+       3,    81,    41,     6,   148,     7,   119,     3,    28,    22,
+     210,    24,    25,   148,    27,   113,    29,   180,     0,   117,
+      51,   184,   120,     3,    55,    56,    57,     7,   204,    32,
+     203,     6,   155,     8,    65,    78,    32,   315,   161,   317,
+      85,    85,     3,    56,    57,   180,   144,   210,    79,   184,
+      33,     6,    65,   178,    85,    86,   154,    40,    60,    61,
+     158,    75,    76,    77,   301,   343,   191,   192,   399,    69,
+      70,    75,    76,    77,    83,   210,   399,    77,   191,   192,
+       6,   206,     8,     3,   321,    11,   323,   271,   325,    25,
+     203,     6,     7,     8,    17,    18,    11,     6,   211,     8,
+     407,    87,    11,   279,     3,    41,    42,    84,   297,     6,
+      73,    26,    75,    10,     6,     7,     8,    26,   441,    11,
+      13,   111,     3,     4,    16,   115,    19,    20,    21,     3,
+       4,   193,    82,     6,     7,     8,     6,   444,    11,   274,
+       3,     4,   255,    33,    34,    35,    36,    37,    38,    39,
+      40,     3,     4,   288,   289,   253,     6,     7,     8,    72,
+     387,    11,   297,   390,   391,   290,     6,     7,     8,     7,
+     232,    11,     7,   271,     7,   288,   289,     7,     6,     7,
+       8,     7,   489,    11,    28,   283,   423,   312,   301,   251,
+     315,   304,   317,   318,     6,     7,     8,   322,   323,     9,
+      10,   326,   315,     7,   317,   330,   331,   383,   321,    43,
+     323,   387,   325,     4,   390,   391,     6,     7,   343,   344,
+      13,    14,    15,   546,    60,    61,     6,   352,   353,     6,
+     343,    52,    53,    54,    49,    50,   559,     6,   545,   495,
+     496,   497,   498,   499,   500,   501,   505,    60,    61,    17,
+      18,    30,    31,     3,     4,     6,     4,     6,   371,     6,
+       6,     6,   375,   376,   399,     6,   328,   392,     6,     6,
+       6,     6,     6,     6,     6,     6,     6,     3,     6,     6,
+      66,     4,     7,     7,     4,     4,   399,   412,   432,   474,
+     415,     4,   417,     4,   407,   439,     4,     4,     4,   424,
+       4,    30,   400,     4,   429,   430,     4,     4,     4,    84,
+     423,     4,   437,    12,     4,   428,     4,    16,     4,    29,
+       4,     4,     4,     4,    23,    24,    25,     6,   441,     4,
+      29,   444,     4,     4,     4,     4,     4,     4,   463,   464,
+     484,     4,   535,     3,   517,   534,   532,   537,     4,   536,
+       4,     4,    51,   488,   531,     4,    55,    56,    57,     4,
+       4,     4,     4,     4,     4,   427,    65,     4,     4,    68,
+     468,     4,     4,    72,   518,    74,   489,     4,     4,     4,
+      79,    80,     4,     4,     4,     4,    85,    86,     4,     4,
+     525,    48,   533,   491,     4,     4,    31,     4,    16,     3,
+     535,     6,   527,     6,   517,     6,   550,     4,     4,     4,
+      41,     4,    67,   538,     6,    32,    18,    67,    57,     4,
+       4,   530,     4,     6,     4,     4,     4,    74,     5,     6,
+       4,     4,   545,   546,   532,     4,     4,     4,   533,   574,
+     301,   292,   398,   328,   569,    22,   559,    24,    25,   208,
+      27,    75,    29,   301,   119,   482,   120,    71,   571,   375,
+     371,   525,   575,   571,    41,    42,   474,    44,    45,    46,
+      47,    -1,    -1,    -1,    51,    -1,    -1,    -1,    55,    56,
+      57,    58,    59,     5,    -1,    62,    63,    64,    65,    -1,
+      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,    -1,
+      22,    -1,    24,    25,    -1,    27,    -1,    29,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      42,    -1,    44,    45,    46,    47,    -1,    -1,    -1,    51,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,    71,
+      -1,    73,    74
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -1156,95 +1163,97 @@
    state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,   167,   168,    79,     0,     3,   172,     6,    81,
-       3,   190,   169,   173,    85,   170,     3,   175,   191,     3,
-       4,   171,    82,   174,   108,   109,    80,   176,     3,     4,
-      89,   153,     3,     4,    88,    89,   101,   120,   121,   128,
-     129,   141,   159,   160,     6,     3,     4,    70,    12,    16,
-      23,    24,    25,    29,    51,    55,    56,    57,    65,    77,
-      83,    84,    66,    78,     5,    22,    24,    25,    27,    29,
+       0,     3,   172,   173,    81,     0,     3,   177,     6,    83,
+       3,   195,   174,   178,    87,   175,     3,   180,   196,     3,
+       4,   176,    84,   179,   110,   111,    82,   181,     3,     4,
+      91,   158,     3,     4,    90,    91,   103,   122,   123,   130,
+     131,   143,   164,   165,     6,     3,     4,    72,    12,    16,
+      23,    24,    25,    29,    51,    55,    56,    57,    65,    79,
+      85,    86,    68,    80,     5,    22,    24,    25,    27,    29,
       41,    42,    44,    45,    46,    47,    51,    55,    56,    57,
-      58,    59,    62,    63,    64,    65,    69,    71,    72,     9,
-      10,    91,    12,    16,    23,    24,    25,    29,    51,    55,
-      56,    57,    65,    66,    70,    72,    77,    78,    83,    84,
-     151,     7,     7,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,     7,     7,     6,
-      10,    87,     6,     8,    90,    98,   136,     7,     6,     8,
-      11,    26,    92,    93,    99,   100,   136,    28,   102,   103,
-      93,    94,   106,   136,    93,   116,   119,   119,    43,   117,
-     125,   116,   123,   117,   126,   123,     3,    89,   107,   131,
-     136,    93,   132,   136,   136,   137,   102,   136,   139,   140,
-      94,   136,   142,   143,   187,    60,    61,   108,   136,   145,
-     146,   179,   188,    32,    89,   111,    17,    18,   148,     6,
-      88,    89,   111,   147,     6,   136,   150,     7,   136,   189,
-     136,     4,     6,     6,     6,     6,     6,     6,     6,     6,
+      58,    59,    62,    63,    64,    65,    71,    73,    74,     9,
+      10,    93,    12,    16,    23,    24,    25,    29,    51,    55,
+      56,    57,    65,    68,    72,    74,    79,    80,    85,    86,
+     156,     7,     7,   138,   138,   138,   138,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   138,     7,     7,     6,
+      10,    89,     6,     8,    92,   100,   138,     7,     6,     8,
+      11,    26,    94,    95,   101,   102,   138,    28,   104,   105,
+      95,    96,   108,   138,    95,   118,   121,   121,    43,   119,
+     127,   118,   125,   119,   128,   125,     3,    91,   109,   133,
+     138,    95,   134,   138,   138,   139,   104,   138,   141,   142,
+      96,   138,   144,   145,   192,    60,    61,   110,   138,   147,
+     148,   184,   193,    32,    91,   113,    17,    18,   150,     6,
+      90,    91,   113,   149,     6,   138,   154,   155,     7,   138,
+     194,   138,     4,     6,     6,     6,     6,     6,     6,     6,
        6,     6,     6,     6,     6,     6,     6,     6,     6,     6,
-       4,    90,    93,   136,    94,    90,   136,    91,   100,   106,
-     136,   131,   132,   136,   137,   140,   150,    91,   164,     6,
-     110,   178,    91,   182,   183,    67,    68,    75,   152,    60,
-      61,     7,     7,     4,     4,     4,     4,    13,    14,    15,
-      99,     4,     4,    16,    94,   136,     4,    92,    30,   104,
-       4,     4,    93,   117,     4,     4,    93,    49,    50,   124,
-       4,   117,     4,    82,     4,     4,    29,    52,    53,    54,
-     130,     4,     4,   133,     4,     4,     4,   138,     4,     6,
-       4,   111,     4,   188,   179,     4,   179,   188,     4,    89,
-     111,   120,   180,    89,   111,   120,   108,   110,     4,   124,
-     124,     4,     4,     4,    88,    93,   149,     4,     4,   146,
-     161,   179,   188,     4,    73,    74,    75,    89,    95,   156,
-     158,   108,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,   165,     4,   108,   177,
-       4,    93,     4,   107,   184,     4,     4,     4,    99,   136,
-       4,    17,    18,    92,    97,    31,   105,    93,    30,    31,
-     118,    95,   187,    95,   187,   111,   104,   122,    48,   106,
-     136,    89,   101,   120,   121,   107,     6,    10,   135,   111,
-     144,    89,   111,   180,   111,   180,   111,    83,    89,   120,
-     111,   111,   120,   120,   111,   112,   109,   111,   111,     4,
-      93,   104,     4,     4,   111,   180,   111,    16,     6,   111,
-     111,     6,   162,   153,     6,    89,   141,    89,   185,     4,
-      92,    13,    19,    20,    21,    96,    97,    97,    97,   111,
-     105,    95,   187,    93,     4,     4,    25,   107,    32,   111,
-     111,   111,   181,   120,   111,   108,   113,     4,   111,   111,
-     105,   111,    94,   157,    95,     4,   107,     6,    57,    22,
-      24,    25,    27,    29,    56,    57,    65,    18,   111,   111,
-     127,   134,   178,    33,    34,    35,    36,    37,    38,    39,
-      40,   114,   115,     4,    76,   136,   154,   155,   107,    93,
-     136,   186,   186,   186,   186,   186,   186,   186,   186,   124,
-      33,    40,     4,    88,   154,   111,   166,    98,    91,   100,
-     102,   103,   106,   137,   140,   150,   111,     6,   107,    95,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,    95,
-     111,   163,    89,   159,    72,   136
+       6,     4,    92,    95,   138,    96,    92,   138,    93,   102,
+     108,   138,   133,   134,   138,   139,   142,   155,    93,   169,
+       6,   112,   183,    93,   187,   188,    69,    70,    77,   157,
+      60,    61,     7,     7,     4,     4,     4,     4,    13,    14,
+      15,   101,     4,     4,    16,    96,   138,     4,    94,    30,
+     106,     4,     4,    95,   119,     4,     4,    95,    49,    50,
+     126,     4,   119,     4,    84,     4,     4,    29,    52,    53,
+      54,   132,     4,     4,   135,     4,     4,     4,   140,     4,
+       6,     4,   113,     4,   193,   184,     4,   184,   193,     4,
+      91,   113,   122,   185,    91,   113,   122,   110,   112,     4,
+     126,   126,     4,     4,     4,    90,    94,   151,     4,   113,
+       4,   148,   166,   184,   193,     4,    75,    76,    77,    91,
+      97,   161,   163,   110,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,   170,     4,
+     110,   182,     4,    95,     4,   109,   189,     4,     4,     4,
+     101,   138,     4,    17,    18,    94,    99,    31,   107,    95,
+      30,    31,   120,    97,   192,    97,   192,   113,   106,   124,
+      48,   108,   138,    91,   103,   122,   123,   109,     6,    10,
+     137,   113,   146,    91,   113,   185,   113,   185,   113,    85,
+      91,   122,   113,   113,   122,   122,   113,   114,   111,   113,
+     113,     4,    66,   152,     4,     4,   113,   185,   113,    16,
+       6,   113,   113,     6,   167,   158,     6,    91,   143,    91,
+     190,     4,    94,    13,    19,    20,    21,    98,    99,    99,
+      99,   113,   107,    97,   192,    95,     4,     4,    25,   109,
+      32,   113,   113,   113,   186,   122,   113,   110,   115,     4,
+     113,   113,     7,    96,    67,   153,   113,    96,   162,    97,
+       4,   109,     6,    57,    22,    24,    25,    27,    29,    56,
+      57,    65,    18,   113,   113,   129,   136,   183,    33,    34,
+      35,    36,    37,    38,    39,    40,   116,   117,    67,   153,
+       7,    96,     4,    78,   138,   159,   160,   109,    95,   138,
+     191,   191,   191,   191,   191,   191,   191,   191,   126,    33,
+      40,     4,    90,     7,   159,   113,   171,   100,    93,   102,
+     104,   105,   108,   139,   142,   155,   113,     6,   109,    97,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,    97,
+     113,   168,    91,   164,    74,   138
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    86,    87,    88,    89,    90,    90,    87,    91,    91,
-      92,    92,    92,    93,    93,    93,    94,    94,    94,    94,
-      95,    96,    96,    96,    96,    97,    98,    88,    99,    99,
-     100,   101,    88,   102,   102,   103,    88,   104,   104,   105,
-     105,   106,    88,   107,   108,   109,   109,   110,   110,   111,
-     112,   111,   113,   113,   114,   114,   114,   114,   114,   114,
-     114,   115,   114,   116,   117,   117,   118,   118,   118,   119,
-     120,   121,    88,    88,   122,   123,   123,   124,   124,   124,
-     124,   125,   127,   126,   128,   128,   129,   129,    88,    88,
-     130,   130,   130,   130,   131,   131,   131,    88,   133,   132,
-      88,   134,   134,   135,   135,   136,   138,   137,    88,   139,
-     139,   140,   140,   140,   141,    88,   142,   143,   143,   143,
-     144,   143,   143,   143,    88,   145,   145,   145,   145,   145,
-     145,   145,   145,   145,    88,   146,   146,   145,    88,   147,
-      88,    88,    88,   148,   148,    88,   149,   149,   150,    88,
-     151,   152,   152,   152,   152,    88,    88,   153,   154,   154,
-     155,   157,   156,   158,   158,   158,   158,   159,   160,    88,
-      88,   161,   161,   161,    88,   162,   162,   163,   163,   165,
-     166,   164,    88,    88,   167,   169,   168,   170,   170,   171,
-     173,   172,   174,   174,   175,   176,   176,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   177,   177,   178,   179,   181,   180,   182,   183,   184,
-     184,   185,   185,   185,   185,   185,   185,   185,   185,   186,
-     187,   188,   189,    88,    88,    88,    88,    88,    88,    88,
-      88,    88,    88,    88,   107,   191,   190
+       0,    88,    89,    90,    91,    92,    92,    89,    93,    93,
+      94,    94,    94,    95,    95,    95,    96,    96,    96,    96,
+      97,    98,    98,    98,    98,    99,   100,    90,   101,   101,
+     102,   103,    90,   104,   104,   105,    90,   106,   106,   107,
+     107,   108,    90,   109,   110,   111,   111,   112,   112,   113,
+     114,   113,   115,   115,   116,   116,   116,   116,   116,   116,
+     116,   117,   116,   118,   119,   119,   120,   120,   120,   121,
+     122,   123,    90,    90,   124,   125,   125,   126,   126,   126,
+     126,   127,   129,   128,   130,   130,   131,   131,    90,    90,
+     132,   132,   132,   132,   133,   133,   133,    90,   135,   134,
+      90,   136,   136,   137,   137,   138,   140,   139,    90,   141,
+     141,   142,   142,   142,   143,    90,   144,   145,   145,   145,
+     146,   145,   145,   145,    90,   147,   147,   147,   147,   147,
+     147,   147,   147,   147,    90,   148,   148,   147,    90,   149,
+      90,    90,    90,   150,   150,    90,   151,   151,   152,   152,
+     153,   153,   154,   154,   154,   154,   155,    90,   156,   157,
+     157,   157,   157,    90,    90,   158,   159,   159,   160,   162,
+     161,   163,   163,   163,   163,   164,   165,    90,    90,   166,
+     166,   166,    90,   167,   167,   168,   168,   170,   171,   169,
+      90,    90,   172,   174,   173,   175,   175,   176,   178,   177,
+     179,   179,   180,   181,   181,   156,   156,   156,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
+     156,   156,   158,   158,   158,   158,   158,   158,   158,   158,
+     158,   158,   158,   158,   158,   158,   158,   158,   158,   182,
+     182,   183,   184,   186,   185,   187,   188,   189,   189,   190,
+     190,   190,   190,   190,   190,   190,   190,   191,   192,   193,
+     194,    90,    90,    90,    90,    90,    90,    90,    90,    90,
+      90,    90,   109,   196,   195
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -1264,19 +1273,20 @@
        2,     3,     2,     1,     4,     1,     1,     3,     4,     3,
        0,     4,     4,     3,     4,     2,     3,     3,     2,     3,
        3,     3,     4,     4,     4,     1,     1,     1,     4,     1,
-       4,     5,     4,     4,     4,     4,     2,     0,     4,     4,
-       2,     1,     1,     1,     0,     5,     5,     7,     1,     1,
-       3,     0,     4,     1,     1,     1,     1,    10,     4,     1,
-       1,     2,     3,     2,     5,     0,     1,     0,     2,     0,
-       0,    10,     5,     5,     3,     0,     6,     0,     2,     5,
-       0,     6,     0,     2,     4,     0,     4,     2,     2,     2,
+       4,     5,     4,     4,     4,     4,     1,     0,     2,     0,
+       2,     0,     4,     5,     5,     6,     2,     4,     2,     1,
+       1,     1,     0,     5,     5,     7,     1,     1,     3,     0,
+       4,     1,     1,     1,     1,    10,     4,     1,     1,     2,
+       3,     2,     5,     0,     1,     0,     2,     0,     0,    10,
+       5,     5,     3,     0,     6,     0,     2,     5,     0,     6,
+       0,     2,     4,     0,     4,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     5,     5,     5,     5,     5,     5,
-       5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
-       5,     1,     2,     2,     1,     0,     5,     2,     4,     2,
-       2,     5,     5,     5,     5,     5,     5,     5,     5,     1,
-       1,     1,     1,     4,     5,     6,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     0,     5
+       2,     2,     5,     5,     5,     5,     5,     5,     5,     5,
+       5,     5,     5,     5,     5,     5,     5,     5,     5,     1,
+       2,     2,     1,     0,     5,     2,     4,     2,     2,     5,
+       5,     5,     5,     5,     5,     5,     5,     1,     1,     1,
+       1,     4,     5,     6,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     0,     5
 };
 
 
@@ -2010,1138 +2020,1202 @@
   switch (yyn)
     {
   case 2: /* glyph: UNSIGNED REFERENCE  */
-#line 264 "parser.y"
+#line 268 "parser.y"
                         {
-	#line 418 "format.w"
+	#line 423 "format.w"
 	(yyval.c).c= (yyvsp[-1].u);REF(font_kind,(yyvsp[0].u));(yyval.c).f= (yyvsp[0].u);}
-#line 2018 "parser.c"
+#line 2028 "parser.c"
     break;
 
   case 3: /* content_node: start "glyph" glyph ">"  */
-#line 267 "parser.y"
+#line 271 "parser.y"
                                   {
-	#line 419 "format.w"
+	#line 424 "format.w"
 	hput_tags((yyvsp[-3].u),hput_glyph(&((yyvsp[-1].c))));}
-#line 2026 "parser.c"
+#line 2036 "parser.c"
     break;
 
   case 4: /* start: "<"  */
-#line 270 "parser.y"
+#line 274 "parser.y"
            {
-	#line 420 "format.w"
+	#line 425 "format.w"
 	HPUTNODE;(yyval.u)= (uint32_t)(hpos++-hstart);}
-#line 2034 "parser.c"
+#line 2044 "parser.c"
     break;
 
   case 6: /* integer: UNSIGNED  */
-#line 274 "parser.y"
+#line 278 "parser.y"
                          {
-	#line 941 "format.w"
+	#line 946 "format.w"
 	RNG("number",(yyvsp[0].u),0,0x7FFFFFFF);}
-#line 2042 "parser.c"
+#line 2052 "parser.c"
     break;
 
   case 7: /* glyph: CHARCODE REFERENCE  */
-#line 278 "parser.y"
+#line 282 "parser.y"
                         {
-	#line 1082 "format.w"
+	#line 1087 "format.w"
 	(yyval.c).c= (yyvsp[-1].u);REF(font_kind,(yyvsp[0].u));(yyval.c).f= (yyvsp[0].u);}
-#line 2050 "parser.c"
+#line 2060 "parser.c"
     break;
 
   case 9: /* string: CHARCODE  */
-#line 282 "parser.y"
+#line 286 "parser.y"
                          {
-	#line 1187 "format.w"
+	#line 1192 "format.w"
 	static char s[2];
 	RNG("String element",(yyvsp[0].u),0x20,0x7E);
 	s[0]= (yyvsp[0].u);s[1]= 0;(yyval.s)= s;}
-#line 2060 "parser.c"
+#line 2070 "parser.c"
     break;
 
   case 10: /* number: UNSIGNED  */
-#line 288 "parser.y"
+#line 292 "parser.y"
                {
-	#line 1339 "format.w"
+	#line 1345 "format.w"
 	(yyval.f)= (float64_t)(yyvsp[0].u);}
-#line 2068 "parser.c"
+#line 2078 "parser.c"
     break;
 
   case 11: /* number: SIGNED  */
-#line 290 "parser.y"
+#line 294 "parser.y"
                                        {
-	#line 1339 "format.w"
+	#line 1345 "format.w"
 	(yyval.f)= (float64_t)(yyvsp[0].i);}
-#line 2076 "parser.c"
+#line 2086 "parser.c"
     break;
 
   case 13: /* dimension: number "pt"  */
-#line 294 "parser.y"
+#line 298 "parser.y"
                    {
-	#line 1682 "format.w"
+	#line 1696 "format.w"
 	(yyval.d)= ROUND((yyvsp[-1].f)*ONE);RNG("Dimension",(yyval.d),-MAX_DIMEN,MAX_DIMEN);}
-#line 2084 "parser.c"
+#line 2094 "parser.c"
     break;
 
   case 14: /* dimension: number "in"  */
-#line 297 "parser.y"
+#line 301 "parser.y"
                     {
-	#line 1683 "format.w"
+	#line 1697 "format.w"
 	(yyval.d)= ROUND((yyvsp[-1].f)*ONE*72.27);RNG("Dimension",(yyval.d),-MAX_DIMEN,MAX_DIMEN);}
-#line 2092 "parser.c"
+#line 2102 "parser.c"
     break;
 
   case 15: /* dimension: number "mm"  */
-#line 300 "parser.y"
+#line 304 "parser.y"
                   {
-	#line 1684 "format.w"
+	#line 1698 "format.w"
 	(yyval.d)= ROUND((yyvsp[-1].f)*ONE*(72.27/25.4));RNG("Dimension",(yyval.d),-MAX_DIMEN,MAX_DIMEN);}
-#line 2100 "parser.c"
+#line 2110 "parser.c"
     break;
 
   case 16: /* xdimen: dimension number "h" number "v"  */
-#line 304 "parser.y"
+#line 308 "parser.y"
                                   {
-	#line 1762 "format.w"
+	#line 1776 "format.w"
 	(yyval.xd).w= (yyvsp[-4].d);(yyval.xd).h= (yyvsp[-3].f);(yyval.xd).v= (yyvsp[-1].f);}
-#line 2108 "parser.c"
+#line 2118 "parser.c"
     break;
 
   case 17: /* xdimen: dimension number "h"  */
-#line 307 "parser.y"
+#line 311 "parser.y"
                            {
-	#line 1763 "format.w"
+	#line 1777 "format.w"
 	(yyval.xd).w= (yyvsp[-2].d);(yyval.xd).h= (yyvsp[-1].f);(yyval.xd).v= 0.0;}
-#line 2116 "parser.c"
+#line 2126 "parser.c"
     break;
 
   case 18: /* xdimen: dimension number "v"  */
-#line 310 "parser.y"
+#line 314 "parser.y"
                            {
-	#line 1764 "format.w"
+	#line 1778 "format.w"
 	(yyval.xd).w= (yyvsp[-2].d);(yyval.xd).h= 0.0;(yyval.xd).v= (yyvsp[-1].f);}
-#line 2124 "parser.c"
+#line 2134 "parser.c"
     break;
 
   case 19: /* xdimen: dimension  */
-#line 313 "parser.y"
+#line 317 "parser.y"
                   {
-	#line 1765 "format.w"
+	#line 1779 "format.w"
 	(yyval.xd).w= (yyvsp[0].d);(yyval.xd).h= 0.0;(yyval.xd).v= 0.0;}
-#line 2132 "parser.c"
+#line 2142 "parser.c"
     break;
 
   case 20: /* xdimen_node: start "xdimen" xdimen ">"  */
-#line 319 "parser.y"
+#line 321 "parser.y"
                                    {
-	#line 1769 "format.w"
+	#line 1781 "format.w"
 	hput_tags((yyvsp[-3].u),hput_xdimen(&((yyvsp[-1].xd))));}
-#line 2140 "parser.c"
+#line 2150 "parser.c"
     break;
 
   case 21: /* order: "pt"  */
-#line 324 "parser.y"
+#line 326 "parser.y"
         {
-	#line 1947 "format.w"
+	#line 1960 "format.w"
 	(yyval.o)= normal_o;}
-#line 2148 "parser.c"
+#line 2158 "parser.c"
     break;
 
   case 22: /* order: "fil"  */
-#line 326 "parser.y"
+#line 328 "parser.y"
                             {
-	#line 1947 "format.w"
+	#line 1960 "format.w"
 	(yyval.o)= fil_o;}
-#line 2156 "parser.c"
+#line 2166 "parser.c"
     break;
 
   case 23: /* order: "fill"  */
-#line 328 "parser.y"
+#line 330 "parser.y"
                              {
-	#line 1947 "format.w"
+	#line 1960 "format.w"
 	(yyval.o)= fill_o;}
-#line 2164 "parser.c"
+#line 2174 "parser.c"
     break;
 
   case 24: /* order: "filll"  */
-#line 330 "parser.y"
+#line 332 "parser.y"
                               {
-	#line 1947 "format.w"
+	#line 1960 "format.w"
 	(yyval.o)= filll_o;}
-#line 2172 "parser.c"
+#line 2182 "parser.c"
     break;
 
   case 25: /* stretch: number order  */
-#line 334 "parser.y"
+#line 336 "parser.y"
                     {
-	#line 1949 "format.w"
+	#line 1962 "format.w"
 	(yyval.st).f= (yyvsp[-1].f);(yyval.st).o= (yyvsp[0].o);}
-#line 2180 "parser.c"
+#line 2190 "parser.c"
     break;
 
   case 26: /* penalty: integer  */
-#line 338 "parser.y"
+#line 340 "parser.y"
                {
-	#line 2003 "format.w"
+	#line 2016 "format.w"
 	RNG("Penalty",(yyvsp[0].i),-20000,+20000);(yyval.i)= (yyvsp[0].i);}
-#line 2188 "parser.c"
+#line 2198 "parser.c"
     break;
 
   case 27: /* content_node: start "penalty" penalty ">"  */
-#line 341 "parser.y"
+#line 343 "parser.y"
                                       {
-	#line 2004 "format.w"
+	#line 2017 "format.w"
 	hput_tags((yyvsp[-3].u),hput_int((yyvsp[-1].i)));}
-#line 2196 "parser.c"
+#line 2206 "parser.c"
     break;
 
   case 29: /* rule_dimension: "|"  */
-#line 345 "parser.y"
+#line 347 "parser.y"
                                         {
-	#line 2179 "format.w"
+	#line 2192 "format.w"
 	(yyval.d)= RUNNING_DIMEN;}
-#line 2204 "parser.c"
+#line 2214 "parser.c"
     break;
 
   case 30: /* rule: rule_dimension rule_dimension rule_dimension  */
-#line 349 "parser.y"
+#line 351 "parser.y"
 {
-	#line 2181 "format.w"
+	#line 2194 "format.w"
 	(yyval.r).h= (yyvsp[-2].d);(yyval.r).d= (yyvsp[-1].d);(yyval.r).w= (yyvsp[0].d);
 	if((yyvsp[0].d)==RUNNING_DIMEN&&((yyvsp[-2].d)==RUNNING_DIMEN||(yyvsp[-1].d)==RUNNING_DIMEN))
 	QUIT("Incompatible running dimensions 0x%x 0x%x 0x%x",(yyvsp[-2].d),(yyvsp[-1].d),(yyvsp[0].d));}
-#line 2214 "parser.c"
+#line 2224 "parser.c"
     break;
 
   case 31: /* rule_node: start "rule" rule ">"  */
-#line 354 "parser.y"
+#line 356 "parser.y"
                              {
-	#line 2184 "format.w"
+	#line 2197 "format.w"
 	hput_tags((yyvsp[-3].u),hput_rule(&((yyvsp[-1].r))));}
-#line 2222 "parser.c"
+#line 2232 "parser.c"
     break;
 
   case 33: /* explicit: %empty  */
-#line 359 "parser.y"
+#line 361 "parser.y"
          {
-	#line 2292 "format.w"
+	#line 2305 "format.w"
 	(yyval.b)= false;}
-#line 2230 "parser.c"
+#line 2240 "parser.c"
     break;
 
   case 34: /* explicit: "!"  */
-#line 361 "parser.y"
+#line 363 "parser.y"
                                  {
-	#line 2292 "format.w"
+	#line 2305 "format.w"
 	(yyval.b)= true;}
-#line 2238 "parser.c"
+#line 2248 "parser.c"
     break;
 
   case 35: /* kern: explicit xdimen  */
-#line 364 "parser.y"
+#line 366 "parser.y"
                     {
-	#line 2293 "format.w"
+	#line 2306 "format.w"
 	(yyval.kt).x= (yyvsp[-1].b);(yyval.kt).d= (yyvsp[0].xd);}
-#line 2246 "parser.c"
+#line 2256 "parser.c"
     break;
 
   case 36: /* content_node: start "kern" kern ">"  */
-#line 367 "parser.y"
+#line 369 "parser.y"
                                 {
-	#line 2294 "format.w"
+	#line 2307 "format.w"
 	hput_tags((yyvsp[-3].u),hput_kern(&((yyvsp[-1].kt))));}
-#line 2254 "parser.c"
+#line 2264 "parser.c"
     break;
 
   case 37: /* plus: %empty  */
-#line 371 "parser.y"
+#line 373 "parser.y"
      {
-	#line 2504 "format.w"
+	#line 2517 "format.w"
 	(yyval.st).f= 0.0;(yyval.st).o= 0;}
-#line 2262 "parser.c"
+#line 2272 "parser.c"
     break;
 
   case 38: /* plus: "plus" stretch  */
-#line 373 "parser.y"
+#line 375 "parser.y"
                                              {
-	#line 2504 "format.w"
+	#line 2517 "format.w"
 	(yyval.st)= (yyvsp[0].st);}
-#line 2270 "parser.c"
+#line 2280 "parser.c"
     break;
 
   case 39: /* minus: %empty  */
-#line 376 "parser.y"
+#line 378 "parser.y"
       {
-	#line 2505 "format.w"
+	#line 2518 "format.w"
 	(yyval.st).f= 0.0;(yyval.st).o= 0;}
-#line 2278 "parser.c"
+#line 2288 "parser.c"
     break;
 
   case 40: /* minus: "minus" stretch  */
-#line 378 "parser.y"
+#line 380 "parser.y"
                                               {
-	#line 2505 "format.w"
+	#line 2518 "format.w"
 	(yyval.st)= (yyvsp[0].st);}
-#line 2286 "parser.c"
+#line 2296 "parser.c"
     break;
 
   case 41: /* glue: xdimen plus minus  */
-#line 381 "parser.y"
+#line 383 "parser.y"
                       {
-	#line 2506 "format.w"
+	#line 2519 "format.w"
 	(yyval.g).w= (yyvsp[-2].xd);(yyval.g).p= (yyvsp[-1].st);(yyval.g).m= (yyvsp[0].st);}
-#line 2294 "parser.c"
+#line 2304 "parser.c"
     break;
 
   case 42: /* content_node: start "glue" glue ">"  */
-#line 384 "parser.y"
+#line 386 "parser.y"
                                 {
-	#line 2507 "format.w"
+	#line 2520 "format.w"
 	if(ZERO_GLUE((yyvsp[-1].g))){HPUT8(zero_skip_no);
 	hput_tags((yyvsp[-3].u),TAG(glue_kind,0));}else hput_tags((yyvsp[-3].u),hput_glue(&((yyvsp[-1].g))));}
-#line 2303 "parser.c"
+#line 2313 "parser.c"
     break;
 
   case 43: /* glue_node: start "glue" glue ">"  */
-#line 389 "parser.y"
+#line 391 "parser.y"
 {
-	#line 2510 "format.w"
+	#line 2523 "format.w"
 	if(ZERO_GLUE((yyvsp[-1].g))){hpos--;(yyval.b)= false;}
 	else{hput_tags((yyvsp[-3].u),hput_glue(&((yyvsp[-1].g))));(yyval.b)= true;}}
-#line 2312 "parser.c"
+#line 2322 "parser.c"
     break;
 
   case 44: /* position: %empty  */
-#line 394 "parser.y"
+#line 396 "parser.y"
          {
-	#line 2786 "format.w"
+	#line 2799 "format.w"
 	(yyval.u)= hpos-hstart;}
-#line 2320 "parser.c"
+#line 2330 "parser.c"
     break;
 
   case 47: /* estimate: %empty  */
-#line 399 "parser.y"
+#line 401 "parser.y"
          {
-	#line 2789 "format.w"
+	#line 2802 "format.w"
 	hpos+= 2;}
-#line 2328 "parser.c"
+#line 2338 "parser.c"
     break;
 
   case 48: /* estimate: UNSIGNED  */
-#line 402 "parser.y"
+#line 404 "parser.y"
                  {
-	#line 2790 "format.w"
+	#line 2803 "format.w"
 	hpos+= hsize_bytes((yyvsp[0].u))+1;}
-#line 2336 "parser.c"
+#line 2346 "parser.c"
     break;
 
   case 49: /* list: start estimate content_list ">"  */
-#line 406 "parser.y"
+#line 408 "parser.y"
 {
-	#line 2792 "format.w"
+	#line 2805 "format.w"
 	(yyval.l).k= list_kind;(yyval.l).p= (yyvsp[-1].u);(yyval.l).s= (hpos-hstart)-(yyvsp[-1].u);
 	hput_tags((yyvsp[-3].u),hput_list((yyvsp[-3].u)+1,&((yyval.l))));}
-#line 2345 "parser.c"
+#line 2355 "parser.c"
     break;
 
   case 50: /* $@1: %empty  */
-#line 412 "parser.y"
+#line 414 "parser.y"
 {
-	#line 3199 "format.w"
+	#line 3212 "format.w"
 	hpos+= 4;}
-#line 2353 "parser.c"
+#line 2363 "parser.c"
     break;
 
   case 51: /* list: TXT_START position $@1 text TXT_END  */
-#line 416 "parser.y"
+#line 418 "parser.y"
 {
-	#line 3201 "format.w"
+	#line 3214 "format.w"
 	(yyval.l).k= text_kind;(yyval.l).p= (yyvsp[-1].u);(yyval.l).s= (hpos-hstart)-(yyvsp[-1].u);
 	hput_tags((yyvsp[-3].u),hput_list((yyvsp[-3].u)+1,&((yyval.l))));}
-#line 2362 "parser.c"
+#line 2372 "parser.c"
     break;
 
   case 54: /* txt: TXT_CC  */
-#line 422 "parser.y"
+#line 424 "parser.y"
           {
-	#line 3205 "format.w"
+	#line 3218 "format.w"
 	hput_txt_cc((yyvsp[0].u));}
-#line 2370 "parser.c"
+#line 2380 "parser.c"
     break;
 
   case 55: /* txt: TXT_FONT  */
-#line 425 "parser.y"
+#line 427 "parser.y"
                  {
-	#line 3206 "format.w"
+	#line 3219 "format.w"
 	REF(font_kind,(yyvsp[0].u));hput_txt_font((yyvsp[0].u));}
-#line 2378 "parser.c"
+#line 2388 "parser.c"
     break;
 
   case 56: /* txt: TXT_GLOBAL  */
-#line 428 "parser.y"
+#line 430 "parser.y"
                    {
-	#line 3207 "format.w"
+	#line 3220 "format.w"
 	REF((yyvsp[0].rf).k,(yyvsp[0].rf).n);hput_txt_global(&((yyvsp[0].rf)));}
-#line 2386 "parser.c"
+#line 2396 "parser.c"
     break;
 
   case 57: /* txt: TXT_LOCAL  */
-#line 431 "parser.y"
+#line 433 "parser.y"
                   {
-	#line 3208 "format.w"
+	#line 3221 "format.w"
 	RNG("Font parameter",(yyvsp[0].u),0,11);hput_txt_local((yyvsp[0].u));}
-#line 2394 "parser.c"
+#line 2404 "parser.c"
     break;
 
   case 58: /* txt: TXT_FONT_GLUE  */
-#line 434 "parser.y"
+#line 436 "parser.y"
                       {
-	#line 3209 "format.w"
+	#line 3222 "format.w"
 	HPUTX(1);HPUT8(txt_glue);}
-#line 2402 "parser.c"
+#line 2412 "parser.c"
     break;
 
   case 59: /* txt: TXT_FONT_HYPHEN  */
-#line 437 "parser.y"
+#line 439 "parser.y"
                         {
-	#line 3210 "format.w"
+	#line 3223 "format.w"
 	HPUTX(1);HPUT8(txt_hyphen);}
-#line 2410 "parser.c"
+#line 2420 "parser.c"
     break;
 
   case 60: /* txt: TXT_IGNORE  */
-#line 440 "parser.y"
+#line 442 "parser.y"
                    {
-	#line 3211 "format.w"
+	#line 3224 "format.w"
 	HPUTX(1);HPUT8(txt_ignore);}
-#line 2418 "parser.c"
+#line 2428 "parser.c"
     break;
 
   case 61: /* $@2: %empty  */
-#line 443 "parser.y"
+#line 445 "parser.y"
          {
-	#line 3212 "format.w"
+	#line 3225 "format.w"
 	HPUTX(1);HPUT8(txt_node);}
-#line 2426 "parser.c"
+#line 2436 "parser.c"
     break;
 
   case 63: /* box_dimen: dimension dimension dimension  */
-#line 449 "parser.y"
+#line 451 "parser.y"
 {
-	#line 3472 "format.w"
+	#line 3485 "format.w"
 	(yyval.info)= hput_box_dimen((yyvsp[-2].d),(yyvsp[-1].d),(yyvsp[0].d));}
-#line 2434 "parser.c"
+#line 2444 "parser.c"
     break;
 
   case 64: /* box_shift: %empty  */
-#line 452 "parser.y"
+#line 454 "parser.y"
           {
-	#line 3473 "format.w"
+	#line 3486 "format.w"
 	(yyval.info)= b000;}
-#line 2442 "parser.c"
+#line 2452 "parser.c"
     break;
 
   case 65: /* box_shift: "shifted" dimension  */
-#line 455 "parser.y"
+#line 457 "parser.y"
                           {
-	#line 3474 "format.w"
+	#line 3487 "format.w"
 	(yyval.info)= hput_box_shift((yyvsp[0].d));}
-#line 2450 "parser.c"
+#line 2460 "parser.c"
     break;
 
   case 66: /* box_glue_set: %empty  */
-#line 459 "parser.y"
+#line 461 "parser.y"
              {
-	#line 3476 "format.w"
+	#line 3489 "format.w"
 	(yyval.info)= b000;}
-#line 2458 "parser.c"
+#line 2468 "parser.c"
     break;
 
   case 67: /* box_glue_set: "plus" stretch  */
-#line 462 "parser.y"
+#line 464 "parser.y"
                      {
-	#line 3477 "format.w"
+	#line 3490 "format.w"
 	(yyval.info)= hput_box_glue_set(+1,(yyvsp[0].st).f,(yyvsp[0].st).o);}
-#line 2466 "parser.c"
+#line 2476 "parser.c"
     break;
 
   case 68: /* box_glue_set: "minus" stretch  */
-#line 465 "parser.y"
+#line 467 "parser.y"
                       {
-	#line 3478 "format.w"
+	#line 3491 "format.w"
 	(yyval.info)= hput_box_glue_set(-1,(yyvsp[0].st).f,(yyvsp[0].st).o);}
-#line 2474 "parser.c"
+#line 2484 "parser.c"
     break;
 
   case 69: /* box: box_dimen box_shift box_glue_set list  */
-#line 470 "parser.y"
+#line 472 "parser.y"
                                          {
-	#line 3481 "format.w"
+	#line 3494 "format.w"
 	(yyval.info)= (yyvsp[-3].info)	|(yyvsp[-2].info)	|(yyvsp[-1].info);}
-#line 2482 "parser.c"
+#line 2492 "parser.c"
     break;
 
   case 70: /* hbox_node: start "hbox" box ">"  */
-#line 474 "parser.y"
+#line 476 "parser.y"
                             {
-	#line 3483 "format.w"
+	#line 3496 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(hbox_kind,(yyvsp[-1].info)));}
-#line 2490 "parser.c"
+#line 2500 "parser.c"
     break;
 
   case 71: /* vbox_node: start "vbox" box ">"  */
-#line 477 "parser.y"
+#line 479 "parser.y"
                             {
-	#line 3484 "format.w"
+	#line 3497 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(vbox_kind,(yyvsp[-1].info)));}
-#line 2498 "parser.c"
+#line 2508 "parser.c"
     break;
 
   case 74: /* box_flex: plus minus  */
-#line 482 "parser.y"
+#line 484 "parser.y"
                    {
-	#line 3665 "format.w"
+	#line 3678 "format.w"
 	hput_stretch(&((yyvsp[-1].st)));hput_stretch(&((yyvsp[0].st)));}
-#line 2506 "parser.c"
+#line 2516 "parser.c"
     break;
 
   case 75: /* xbox: box_dimen box_shift box_flex xdimen_ref list  */
-#line 485 "parser.y"
+#line 487 "parser.y"
                                                  {
-	#line 3666 "format.w"
+	#line 3679 "format.w"
 	(yyval.info)= (yyvsp[-4].info)	|(yyvsp[-3].info);}
-#line 2514 "parser.c"
+#line 2524 "parser.c"
     break;
 
   case 76: /* xbox: box_dimen box_shift box_flex xdimen_node list  */
-#line 488 "parser.y"
+#line 490 "parser.y"
                                                       {
-	#line 3667 "format.w"
+	#line 3680 "format.w"
 	(yyval.info)= (yyvsp[-4].info)	|(yyvsp[-3].info)	|b100;}
-#line 2522 "parser.c"
+#line 2532 "parser.c"
     break;
 
   case 77: /* box_goal: "to" xdimen_ref  */
-#line 492 "parser.y"
+#line 494 "parser.y"
                       {
-	#line 3669 "format.w"
+	#line 3682 "format.w"
 	(yyval.info)= b000;}
-#line 2530 "parser.c"
+#line 2540 "parser.c"
     break;
 
   case 78: /* box_goal: "add" xdimen_ref  */
-#line 495 "parser.y"
+#line 497 "parser.y"
                        {
-	#line 3670 "format.w"
+	#line 3683 "format.w"
 	(yyval.info)= b001;}
-#line 2538 "parser.c"
+#line 2548 "parser.c"
     break;
 
   case 79: /* box_goal: "to" xdimen_node  */
-#line 498 "parser.y"
+#line 500 "parser.y"
                        {
-	#line 3671 "format.w"
+	#line 3684 "format.w"
 	(yyval.info)= b100;}
-#line 2546 "parser.c"
+#line 2556 "parser.c"
     break;
 
   case 80: /* box_goal: "add" xdimen_node  */
-#line 501 "parser.y"
+#line 503 "parser.y"
                         {
-	#line 3672 "format.w"
+	#line 3685 "format.w"
 	(yyval.info)= b101;}
-#line 2554 "parser.c"
+#line 2564 "parser.c"
     break;
 
   case 81: /* hpack: box_shift box_goal list  */
-#line 505 "parser.y"
+#line 507 "parser.y"
                              {
-	#line 3674 "format.w"
+	#line 3687 "format.w"
 	(yyval.info)= (yyvsp[-1].info);}
-#line 2562 "parser.c"
+#line 2572 "parser.c"
     break;
 
   case 82: /* $@3: %empty  */
-#line 508 "parser.y"
+#line 510 "parser.y"
                                    {
-	#line 3675 "format.w"
+	#line 3688 "format.w"
 	HPUT32((yyvsp[0].d));}
-#line 2570 "parser.c"
+#line 2580 "parser.c"
     break;
 
   case 83: /* vpack: box_shift "max" "depth" dimension $@3 box_goal list  */
-#line 510 "parser.y"
+#line 512 "parser.y"
                                  {
-	#line 3675 "format.w"
+	#line 3688 "format.w"
 	(yyval.info)= (yyvsp[-6].info)	|(yyvsp[-1].info);}
-#line 2578 "parser.c"
+#line 2588 "parser.c"
     break;
 
   case 84: /* vxbox_node: start "vset" xbox ">"  */
-#line 514 "parser.y"
+#line 516 "parser.y"
                               {
-	#line 3677 "format.w"
+	#line 3690 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(vset_kind,(yyvsp[-1].info)));}
-#line 2586 "parser.c"
+#line 2596 "parser.c"
     break;
 
   case 85: /* vxbox_node: start "vpack" vpack ">"  */
-#line 517 "parser.y"
+#line 519 "parser.y"
                               {
-	#line 3678 "format.w"
+	#line 3691 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(vpack_kind,(yyvsp[-1].info)));}
-#line 2594 "parser.c"
+#line 2604 "parser.c"
     break;
 
   case 86: /* hxbox_node: start "hset" xbox ">"  */
-#line 522 "parser.y"
+#line 524 "parser.y"
                               {
-	#line 3681 "format.w"
+	#line 3694 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(hset_kind,(yyvsp[-1].info)));}
-#line 2602 "parser.c"
+#line 2612 "parser.c"
     break;
 
   case 87: /* hxbox_node: start "hpack" hpack ">"  */
-#line 525 "parser.y"
+#line 527 "parser.y"
                               {
-	#line 3682 "format.w"
+	#line 3695 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(hpack_kind,(yyvsp[-1].info)));}
-#line 2610 "parser.c"
+#line 2620 "parser.c"
     break;
 
   case 90: /* ltype: %empty  */
-#line 531 "parser.y"
+#line 533 "parser.y"
       {
-	#line 3792 "format.w"
+	#line 3805 "format.w"
 	(yyval.info)= 1;}
-#line 2618 "parser.c"
+#line 2628 "parser.c"
     break;
 
   case 91: /* ltype: "align"  */
-#line 533 "parser.y"
+#line 535 "parser.y"
                       {
-	#line 3792 "format.w"
+	#line 3805 "format.w"
 	(yyval.info)= 1;}
-#line 2626 "parser.c"
+#line 2636 "parser.c"
     break;
 
   case 92: /* ltype: "center"  */
-#line 535 "parser.y"
+#line 537 "parser.y"
                        {
-	#line 3792 "format.w"
+	#line 3805 "format.w"
 	(yyval.info)= 2;}
-#line 2634 "parser.c"
+#line 2644 "parser.c"
     break;
 
   case 93: /* ltype: "expand"  */
-#line 537 "parser.y"
+#line 539 "parser.y"
                        {
-	#line 3792 "format.w"
+	#line 3805 "format.w"
 	(yyval.info)= 3;}
-#line 2642 "parser.c"
+#line 2652 "parser.c"
     break;
 
   case 94: /* leaders: glue_node ltype rule_node  */
-#line 540 "parser.y"
+#line 542 "parser.y"
                                  {
-	#line 3793 "format.w"
+	#line 3806 "format.w"
 	if((yyvsp[-2].b))(yyval.info)= (yyvsp[-1].info)	|b100;else (yyval.info)= (yyvsp[-1].info);}
-#line 2650 "parser.c"
+#line 2660 "parser.c"
     break;
 
   case 95: /* leaders: glue_node ltype hbox_node  */
-#line 543 "parser.y"
+#line 545 "parser.y"
                                   {
-	#line 3794 "format.w"
+	#line 3807 "format.w"
 	if((yyvsp[-2].b))(yyval.info)= (yyvsp[-1].info)	|b100;else (yyval.info)= (yyvsp[-1].info);}
-#line 2658 "parser.c"
+#line 2668 "parser.c"
     break;
 
   case 96: /* leaders: glue_node ltype vbox_node  */
-#line 546 "parser.y"
+#line 548 "parser.y"
                                   {
-	#line 3795 "format.w"
+	#line 3808 "format.w"
 	if((yyvsp[-2].b))(yyval.info)= (yyvsp[-1].info)	|b100;else (yyval.info)= (yyvsp[-1].info);}
-#line 2666 "parser.c"
+#line 2676 "parser.c"
     break;
 
   case 97: /* content_node: start "leaders" leaders ">"  */
-#line 549 "parser.y"
+#line 551 "parser.y"
                                       {
-	#line 3796 "format.w"
+	#line 3809 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(leaders_kind,(yyvsp[-1].info)));}
-#line 2674 "parser.c"
+#line 2684 "parser.c"
     break;
 
   case 98: /* $@4: %empty  */
-#line 553 "parser.y"
+#line 555 "parser.y"
                   {
-	#line 3902 "format.w"
+	#line 3915 "format.w"
 	if((yyvsp[0].d)!=0)HPUT32((yyvsp[0].d));}
-#line 2682 "parser.c"
+#line 2692 "parser.c"
     break;
 
   case 99: /* baseline: dimension $@4 glue_node glue_node  */
-#line 556 "parser.y"
+#line 558 "parser.y"
                    {
-	#line 3903 "format.w"
+	#line 3916 "format.w"
 	(yyval.info)= b000;if((yyvsp[-3].d)!=0)(yyval.info)	|= b001;
 	if((yyvsp[-1].b))(yyval.info)	|= b100;
 	if((yyvsp[0].b))(yyval.info)	|= b010;
 	}
-#line 2693 "parser.c"
+#line 2703 "parser.c"
     break;
 
   case 100: /* content_node: start "baseline" baseline ">"  */
-#line 563 "parser.y"
+#line 565 "parser.y"
 {
-	#line 3908 "format.w"
+	#line 3921 "format.w"
 	if((yyvsp[-1].info)==b000)HPUT8(0);hput_tags((yyvsp[-3].u),TAG(baseline_kind,(yyvsp[-1].info)));}
-#line 2701 "parser.c"
+#line 2711 "parser.c"
     break;
 
   case 102: /* cc_list: cc_list TXT_CC  */
-#line 567 "parser.y"
+#line 569 "parser.y"
                                {
-	#line 3991 "format.w"
+	#line 4004 "format.w"
 	hput_utf8((yyvsp[0].u));}
-#line 2709 "parser.c"
+#line 2719 "parser.c"
     break;
 
   case 103: /* lig_cc: UNSIGNED  */
-#line 570 "parser.y"
+#line 572 "parser.y"
                {
-	#line 3992 "format.w"
+	#line 4005 "format.w"
 	RNG("UTF-8 code",(yyvsp[0].u),0,0x1FFFFF);(yyval.u)= hpos-hstart;hput_utf8((yyvsp[0].u));}
-#line 2717 "parser.c"
+#line 2727 "parser.c"
     break;
 
   case 104: /* lig_cc: CHARCODE  */
-#line 573 "parser.y"
+#line 575 "parser.y"
                {
-	#line 3993 "format.w"
+	#line 4006 "format.w"
 	(yyval.u)= hpos-hstart;hput_utf8((yyvsp[0].u));}
-#line 2725 "parser.c"
+#line 2735 "parser.c"
     break;
 
   case 105: /* ref: REFERENCE  */
-#line 576 "parser.y"
+#line 578 "parser.y"
              {
-	#line 3994 "format.w"
+	#line 4007 "format.w"
 	HPUT8((yyvsp[0].u));(yyval.u)= (yyvsp[0].u);}
-#line 2733 "parser.c"
+#line 2743 "parser.c"
     break;
 
   case 106: /* $@5: %empty  */
-#line 579 "parser.y"
+#line 581 "parser.y"
             {
-	#line 3995 "format.w"
+	#line 4008 "format.w"
 	REF(font_kind,(yyvsp[0].u));}
-#line 2741 "parser.c"
+#line 2751 "parser.c"
     break;
 
   case 107: /* ligature: ref $@5 lig_cc TXT_START cc_list TXT_END  */
-#line 582 "parser.y"
+#line 584 "parser.y"
 {
-	#line 3996 "format.w"
+	#line 4009 "format.w"
 	(yyval.lg).f= (yyvsp[-5].u);(yyval.lg).l.p= (yyvsp[-3].u);(yyval.lg).l.s= (hpos-hstart)-(yyvsp[-3].u);
 	RNG("Ligature size",(yyval.lg).l.s,0,255);}
-#line 2750 "parser.c"
+#line 2760 "parser.c"
     break;
 
   case 108: /* content_node: start "ligature" ligature ">"  */
-#line 586 "parser.y"
+#line 588 "parser.y"
                                         {
-	#line 3998 "format.w"
+	#line 4011 "format.w"
 	hput_tags((yyvsp[-3].u),hput_ligature(&((yyvsp[-1].lg))));}
-#line 2758 "parser.c"
+#line 2768 "parser.c"
     break;
 
   case 109: /* replace_count: explicit  */
-#line 590 "parser.y"
+#line 592 "parser.y"
                       {
-	#line 4108 "format.w"
+	#line 4121 "format.w"
 	if((yyvsp[0].b)){(yyval.u)= 0x80;HPUT8(0x80);}else (yyval.u)= 0x00;}
-#line 2766 "parser.c"
+#line 2776 "parser.c"
     break;
 
   case 110: /* replace_count: explicit UNSIGNED  */
-#line 593 "parser.y"
+#line 595 "parser.y"
                           {
-	#line 4109 "format.w"
+	#line 4122 "format.w"
 	RNG("Replace count",(yyvsp[0].u),0,31);
 	(yyval.u)= ((yyvsp[0].u))	|(((yyvsp[-1].b))?0x80:0x00);if((yyval.u)!=0)HPUT8((yyval.u));}
-#line 2775 "parser.c"
+#line 2785 "parser.c"
     break;
 
   case 111: /* disc: replace_count list list  */
-#line 597 "parser.y"
+#line 599 "parser.y"
                             {
-	#line 4111 "format.w"
+	#line 4124 "format.w"
 	(yyval.dc).r= (yyvsp[-2].u);(yyval.dc).p= (yyvsp[-1].l);(yyval.dc).q= (yyvsp[0].l);
 	if((yyvsp[0].l).s==0){hpos= hpos-2;if((yyvsp[-1].l).s==0)hpos= hpos-2;}}
-#line 2784 "parser.c"
+#line 2794 "parser.c"
     break;
 
   case 112: /* disc: replace_count list  */
-#line 601 "parser.y"
+#line 603 "parser.y"
                            {
-	#line 4113 "format.w"
+	#line 4126 "format.w"
 	(yyval.dc).r= (yyvsp[-1].u);(yyval.dc).p= (yyvsp[0].l);if((yyvsp[0].l).s==0)hpos= hpos-2;(yyval.dc).q.s= 0;}
-#line 2792 "parser.c"
+#line 2802 "parser.c"
     break;
 
   case 113: /* disc: replace_count  */
-#line 604 "parser.y"
+#line 606 "parser.y"
                       {
-	#line 4114 "format.w"
+	#line 4127 "format.w"
 	(yyval.dc).r= (yyvsp[0].u);(yyval.dc).p.s= 0;(yyval.dc).q.s= 0;}
-#line 2800 "parser.c"
+#line 2810 "parser.c"
     break;
 
   case 114: /* disc_node: start "disc" disc ">"  */
-#line 610 "parser.y"
+#line 612 "parser.y"
 {
-	#line 4118 "format.w"
+	#line 4131 "format.w"
 	hput_tags((yyvsp[-3].u),hput_disc(&((yyvsp[-1].dc))));}
-#line 2808 "parser.c"
+#line 2818 "parser.c"
     break;
 
   case 116: /* par_dimen: xdimen  */
-#line 616 "parser.y"
+#line 618 "parser.y"
                 {
-	#line 4270 "format.w"
+	#line 4285 "format.w"
 	hput_xdimen_node(&((yyvsp[0].xd)));}
-#line 2816 "parser.c"
+#line 2826 "parser.c"
     break;
 
   case 117: /* par: xdimen_ref param_ref list  */
-#line 619 "parser.y"
+#line 621 "parser.y"
                              {
-	#line 4271 "format.w"
+	#line 4286 "format.w"
 	(yyval.info)= b000;}
-#line 2824 "parser.c"
+#line 2834 "parser.c"
     break;
 
   case 118: /* par: xdimen_ref empty_param_list non_empty_param_list list  */
-#line 622 "parser.y"
+#line 624 "parser.y"
                                                               {
-	#line 4272 "format.w"
+	#line 4287 "format.w"
 	(yyval.info)= b010;}
-#line 2832 "parser.c"
+#line 2842 "parser.c"
     break;
 
   case 119: /* par: xdimen_ref empty_param_list list  */
-#line 625 "parser.y"
+#line 627 "parser.y"
                                          {
-	#line 4273 "format.w"
+	#line 4288 "format.w"
 	(yyval.info)= b010;}
-#line 2840 "parser.c"
+#line 2850 "parser.c"
     break;
 
   case 120: /* $@6: %empty  */
-#line 628 "parser.y"
+#line 630 "parser.y"
                          {
-	#line 4274 "format.w"
+	#line 4289 "format.w"
 	hput_xdimen_node(&((yyvsp[-1].xd)));}
-#line 2848 "parser.c"
+#line 2858 "parser.c"
     break;
 
   case 121: /* par: xdimen param_ref $@6 list  */
-#line 630 "parser.y"
+#line 632 "parser.y"
                                      {
-	#line 4274 "format.w"
+	#line 4289 "format.w"
 	(yyval.info)= b100;}
-#line 2856 "parser.c"
+#line 2866 "parser.c"
     break;
 
   case 122: /* par: par_dimen empty_param_list non_empty_param_list list  */
-#line 633 "parser.y"
+#line 635 "parser.y"
                                                              {
-	#line 4275 "format.w"
+	#line 4290 "format.w"
 	(yyval.info)= b110;}
-#line 2864 "parser.c"
+#line 2874 "parser.c"
     break;
 
   case 123: /* par: par_dimen empty_param_list list  */
-#line 636 "parser.y"
+#line 638 "parser.y"
                                         {
-	#line 4276 "format.w"
+	#line 4291 "format.w"
 	(yyval.info)= b110;}
-#line 2872 "parser.c"
+#line 2882 "parser.c"
     break;
 
   case 124: /* content_node: start "par" par ">"  */
-#line 640 "parser.y"
+#line 642 "parser.y"
                               {
-	#line 4278 "format.w"
+	#line 4293 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(par_kind,(yyvsp[-1].info)));}
-#line 2880 "parser.c"
+#line 2890 "parser.c"
     break;
 
   case 125: /* math: param_ref list  */
-#line 644 "parser.y"
+#line 646 "parser.y"
                    {
-	#line 4344 "format.w"
+	#line 4359 "format.w"
 	(yyval.info)= b000;}
-#line 2888 "parser.c"
+#line 2898 "parser.c"
     break;
 
   case 126: /* math: param_ref list hbox_node  */
-#line 647 "parser.y"
+#line 649 "parser.y"
                                  {
-	#line 4345 "format.w"
+	#line 4360 "format.w"
 	(yyval.info)= b001;}
-#line 2896 "parser.c"
+#line 2906 "parser.c"
     break;
 
   case 127: /* math: param_ref hbox_node list  */
-#line 650 "parser.y"
+#line 652 "parser.y"
                                  {
-	#line 4346 "format.w"
+	#line 4361 "format.w"
 	(yyval.info)= b010;}
-#line 2904 "parser.c"
+#line 2914 "parser.c"
     break;
 
   case 128: /* math: empty_param_list list  */
-#line 653 "parser.y"
+#line 655 "parser.y"
                               {
-	#line 4347 "format.w"
+	#line 4362 "format.w"
 	(yyval.info)= b100;}
-#line 2912 "parser.c"
+#line 2922 "parser.c"
     break;
 
   case 129: /* math: empty_param_list list hbox_node  */
-#line 656 "parser.y"
+#line 658 "parser.y"
                                         {
-	#line 4348 "format.w"
+	#line 4363 "format.w"
 	(yyval.info)= b101;}
-#line 2920 "parser.c"
+#line 2930 "parser.c"
     break;
 
   case 130: /* math: empty_param_list hbox_node list  */
-#line 659 "parser.y"
+#line 661 "parser.y"
                                         {
-	#line 4349 "format.w"
+	#line 4364 "format.w"
 	(yyval.info)= b110;}
-#line 2928 "parser.c"
+#line 2938 "parser.c"
     break;
 
   case 131: /* math: empty_param_list non_empty_param_list list  */
-#line 662 "parser.y"
+#line 664 "parser.y"
                                                    {
-	#line 4350 "format.w"
+	#line 4365 "format.w"
 	(yyval.info)= b100;}
-#line 2936 "parser.c"
+#line 2946 "parser.c"
     break;
 
   case 132: /* math: empty_param_list non_empty_param_list list hbox_node  */
-#line 665 "parser.y"
+#line 667 "parser.y"
                                                              {
-	#line 4351 "format.w"
+	#line 4366 "format.w"
 	(yyval.info)= b101;}
-#line 2944 "parser.c"
+#line 2954 "parser.c"
     break;
 
   case 133: /* math: empty_param_list non_empty_param_list hbox_node list  */
-#line 668 "parser.y"
+#line 670 "parser.y"
                                                              {
-	#line 4352 "format.w"
+	#line 4367 "format.w"
 	(yyval.info)= b110;}
-#line 2952 "parser.c"
+#line 2962 "parser.c"
     break;
 
   case 134: /* content_node: start "math" math ">"  */
-#line 672 "parser.y"
+#line 674 "parser.y"
                                 {
-	#line 4354 "format.w"
+	#line 4369 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(math_kind,(yyvsp[-1].info)));}
-#line 2960 "parser.c"
+#line 2970 "parser.c"
     break;
 
   case 135: /* on_off: "on"  */
-#line 676 "parser.y"
+#line 678 "parser.y"
          {
-	#line 4404 "format.w"
+	#line 4419 "format.w"
 	(yyval.i)= 1;}
-#line 2968 "parser.c"
+#line 2978 "parser.c"
     break;
 
   case 136: /* on_off: "off"  */
-#line 678 "parser.y"
+#line 680 "parser.y"
                     {
-	#line 4404 "format.w"
+	#line 4419 "format.w"
 	(yyval.i)= 0;}
-#line 2976 "parser.c"
+#line 2986 "parser.c"
     break;
 
   case 137: /* math: on_off  */
-#line 681 "parser.y"
+#line 683 "parser.y"
            {
-	#line 4405 "format.w"
+	#line 4420 "format.w"
 	(yyval.info)= b011	|((yyvsp[0].i)<<2);}
-#line 2984 "parser.c"
+#line 2994 "parser.c"
     break;
 
   case 138: /* content_node: start "adjust" list ">"  */
-#line 685 "parser.y"
+#line 687 "parser.y"
                                   {
-	#line 4436 "format.w"
+	#line 4451 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(adjust_kind,1));}
-#line 2992 "parser.c"
+#line 3002 "parser.c"
     break;
 
   case 139: /* span_count: UNSIGNED  */
-#line 689 "parser.y"
+#line 691 "parser.y"
                    {
-	#line 4535 "format.w"
+	#line 4550 "format.w"
 	(yyval.info)= hput_span_count((yyvsp[0].u));}
-#line 3000 "parser.c"
+#line 3010 "parser.c"
     break;
 
   case 140: /* content_node: start "item" content_node ">"  */
-#line 692 "parser.y"
+#line 694 "parser.y"
                                         {
-	#line 4536 "format.w"
+	#line 4551 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(item_kind,1));}
-#line 3008 "parser.c"
+#line 3018 "parser.c"
     break;
 
   case 141: /* content_node: start "item" span_count content_node ">"  */
-#line 695 "parser.y"
+#line 697 "parser.y"
                                                    {
-	#line 4537 "format.w"
+	#line 4552 "format.w"
 	hput_tags((yyvsp[-4].u),TAG(item_kind,(yyvsp[-2].info)));}
-#line 3016 "parser.c"
+#line 3026 "parser.c"
     break;
 
   case 142: /* content_node: start "item" list ">"  */
-#line 698 "parser.y"
+#line 700 "parser.y"
                                 {
-	#line 4538 "format.w"
+	#line 4553 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(item_kind,b000));}
-#line 3024 "parser.c"
+#line 3034 "parser.c"
     break;
 
   case 143: /* table: "h" box_goal list list  */
-#line 702 "parser.y"
+#line 704 "parser.y"
                           {
-	#line 4540 "format.w"
+	#line 4555 "format.w"
 	(yyval.info)= (yyvsp[-2].info);}
-#line 3032 "parser.c"
+#line 3042 "parser.c"
     break;
 
   case 144: /* table: "v" box_goal list list  */
-#line 705 "parser.y"
+#line 707 "parser.y"
                           {
-	#line 4541 "format.w"
+	#line 4556 "format.w"
 	(yyval.info)= (yyvsp[-2].info)	|b010;}
-#line 3040 "parser.c"
+#line 3050 "parser.c"
     break;
 
   case 145: /* content_node: start "table" table ">"  */
-#line 709 "parser.y"
+#line 711 "parser.y"
                                   {
-	#line 4543 "format.w"
+	#line 4558 "format.w"
 	hput_tags((yyvsp[-3].u),TAG(table_kind,(yyvsp[-1].info)));}
-#line 3048 "parser.c"
+#line 3058 "parser.c"
     break;
 
-  case 146: /* image_dimen: dimension dimension  */
-#line 713 "parser.y"
-                               {
-	#line 4631 "format.w"
-	(yyval.x).w= (yyvsp[-1].d);(yyval.x).h= (yyvsp[0].d);}
-#line 3056 "parser.c"
+  case 146: /* image_aspect: number  */
+#line 715 "parser.y"
+                   {
+	#line 4692 "format.w"
+	(yyval.f)= (yyvsp[0].f);}
+#line 3066 "parser.c"
     break;
 
-  case 147: /* image_dimen: %empty  */
-#line 715 "parser.y"
-                                 {
-	#line 4631 "format.w"
-	(yyval.x).w= (yyval.x).h= 0;}
-#line 3064 "parser.c"
+  case 147: /* image_aspect: %empty  */
+#line 717 "parser.y"
+                         {
+	#line 4692 "format.w"
+	(yyval.f)= 0.0;}
+#line 3074 "parser.c"
     break;
 
-  case 148: /* image: UNSIGNED image_dimen plus minus  */
-#line 718 "parser.y"
-                                     {
-	#line 4632 "format.w"
-	(yyval.x).w= (yyvsp[-2].x).w;(yyval.x).h= (yyvsp[-2].x).h;(yyval.x).p= (yyvsp[-1].st);(yyval.x).m= (yyvsp[0].st);RNG("Section number",(yyvsp[-3].u),3,max_section_no);(yyval.x).n= (yyvsp[-3].u);}
-#line 3072 "parser.c"
+  case 148: /* image_width: "width" xdimen  */
+#line 720 "parser.y"
+                        {
+	#line 4693 "format.w"
+	(yyval.xd)= (yyvsp[0].xd);}
+#line 3082 "parser.c"
     break;
 
-  case 149: /* content_node: start "image" image ">"  */
-#line 721 "parser.y"
+  case 149: /* image_width: %empty  */
+#line 723 "parser.y"
+         {
+	#line 4694 "format.w"
+	(yyval.xd)= xdimen_defaults[zero_xdimen_no];}
+#line 3090 "parser.c"
+    break;
+
+  case 150: /* image_height: "height" xdimen  */
+#line 726 "parser.y"
+                          {
+	#line 4695 "format.w"
+	(yyval.xd)= (yyvsp[0].xd);}
+#line 3098 "parser.c"
+    break;
+
+  case 151: /* image_height: %empty  */
+#line 729 "parser.y"
+         {
+	#line 4696 "format.w"
+	(yyval.xd)= xdimen_defaults[zero_xdimen_no];}
+#line 3106 "parser.c"
+    break;
+
+  case 152: /* image_spec: UNSIGNED image_aspect image_width image_height  */
+#line 734 "parser.y"
+{
+	#line 4699 "format.w"
+	(yyval.info)= hput_image_spec((yyvsp[-3].u),(yyvsp[-2].f),0,&((yyvsp[-1].xd)),0,&((yyvsp[0].xd)));}
+#line 3114 "parser.c"
+    break;
+
+  case 153: /* image_spec: UNSIGNED image_aspect "width" REFERENCE image_height  */
+#line 738 "parser.y"
+{
+	#line 4701 "format.w"
+	(yyval.info)= hput_image_spec((yyvsp[-4].u),(yyvsp[-3].f),(yyvsp[-1].u),NULL,0,&((yyvsp[0].xd)));}
+#line 3122 "parser.c"
+    break;
+
+  case 154: /* image_spec: UNSIGNED image_aspect image_width "height" REFERENCE  */
+#line 742 "parser.y"
+{
+	#line 4703 "format.w"
+	(yyval.info)= hput_image_spec((yyvsp[-4].u),(yyvsp[-3].f),0,&((yyvsp[-2].xd)),(yyvsp[0].u),NULL);}
+#line 3130 "parser.c"
+    break;
+
+  case 155: /* image_spec: UNSIGNED image_aspect "width" REFERENCE "height" REFERENCE  */
+#line 746 "parser.y"
+{
+	#line 4705 "format.w"
+	(yyval.info)= hput_image_spec((yyvsp[-5].u),(yyvsp[-4].f),(yyvsp[-2].u),NULL,(yyvsp[0].u),NULL);}
+#line 3138 "parser.c"
+    break;
+
+  case 156: /* image: image_spec list  */
+#line 750 "parser.y"
+                     {
+	#line 4707 "format.w"
+	(yyval.info)= (yyvsp[-1].info);}
+#line 3146 "parser.c"
+    break;
+
+  case 157: /* content_node: start "image" image ">"  */
+#line 754 "parser.y"
                                   {
-	#line 4633 "format.w"
-	hput_tags((yyvsp[-3].u),hput_image(&((yyvsp[-1].x))));}
-#line 3080 "parser.c"
+	#line 4709 "format.w"
+	hput_tags((yyvsp[-3].u),TAG(image_kind,(yyvsp[-1].info)));}
+#line 3154 "parser.c"
     break;
 
-  case 150: /* max_value: "outline" UNSIGNED  */
-#line 725 "parser.y"
+  case 158: /* max_value: "outline" UNSIGNED  */
+#line 758 "parser.y"
                           {
-	#line 4870 "format.w"
+	#line 5309 "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);
 	}
-#line 3091 "parser.c"
+#line 3165 "parser.c"
     break;
 
-  case 151: /* placement: "top"  */
-#line 732 "parser.y"
+  case 159: /* placement: "top"  */
+#line 765 "parser.y"
              {
-	#line 4962 "format.w"
+	#line 5401 "format.w"
 	(yyval.i)= LABEL_TOP;}
-#line 3099 "parser.c"
+#line 3173 "parser.c"
     break;
 
-  case 152: /* placement: "bot"  */
-#line 734 "parser.y"
+  case 160: /* placement: "bot"  */
+#line 767 "parser.y"
                             {
-	#line 4962 "format.w"
+	#line 5401 "format.w"
 	(yyval.i)= LABEL_BOT;}
-#line 3107 "parser.c"
+#line 3181 "parser.c"
     break;
 
-  case 153: /* placement: "mid"  */
-#line 736 "parser.y"
+  case 161: /* placement: "mid"  */
+#line 769 "parser.y"
                             {
-	#line 4962 "format.w"
+	#line 5401 "format.w"
 	(yyval.i)= LABEL_MID;}
-#line 3115 "parser.c"
+#line 3189 "parser.c"
     break;
 
-  case 154: /* placement: %empty  */
-#line 738 "parser.y"
+  case 162: /* placement: %empty  */
+#line 771 "parser.y"
                          {
-	#line 4962 "format.w"
+	#line 5401 "format.w"
 	(yyval.i)= LABEL_MID;}
-#line 3123 "parser.c"
+#line 3197 "parser.c"
     break;
 
-  case 155: /* content_node: "<" "label" REFERENCE placement ">"  */
-#line 742 "parser.y"
+  case 163: /* content_node: "<" "label" REFERENCE placement ">"  */
+#line 775 "parser.y"
 {
-	#line 4964 "format.w"
+	#line 5403 "format.w"
 	hset_label((yyvsp[-2].u),(yyvsp[-1].i));}
-#line 3131 "parser.c"
+#line 3205 "parser.c"
     break;
 
-  case 156: /* content_node: start "link" REFERENCE on_off ">"  */
-#line 747 "parser.y"
+  case 164: /* content_node: start "link" REFERENCE on_off ">"  */
+#line 780 "parser.y"
 {
-	#line 5222 "format.w"
+	#line 5661 "format.w"
 	hput_tags((yyvsp[-4].u),hput_link((yyvsp[-2].u),(yyvsp[-1].i)));}
-#line 3139 "parser.c"
+#line 3213 "parser.c"
     break;
 
-  case 157: /* def_node: "<" "outline" REFERENCE integer position list ">"  */
-#line 751 "parser.y"
+  case 165: /* def_node: "<" "outline" REFERENCE integer position list ">"  */
+#line 784 "parser.y"
                                                           {
-	#line 5352 "format.w"
+	#line 5791 "format.w"
 	
 	static int outline_no= -1;
 	(yyval.rf).k= outline_kind;(yyval.rf).n= (yyvsp[-4].u);
@@ -3149,215 +3223,215 @@
 	outline_no++;
 	hset_outline(outline_no,(yyvsp[-4].u),(yyvsp[-3].i),(yyvsp[-2].u));
 	}
-#line 3153 "parser.c"
+#line 3227 "parser.c"
     break;
 
-  case 158: /* stream_link: ref  */
-#line 761 "parser.y"
+  case 166: /* stream_link: ref  */
+#line 794 "parser.y"
                {
-	#line 5767 "format.w"
+	#line 6206 "format.w"
 	REF_RNG(stream_kind,(yyvsp[0].u));}
-#line 3161 "parser.c"
+#line 3235 "parser.c"
     break;
 
-  case 159: /* stream_link: "*"  */
-#line 763 "parser.y"
+  case 167: /* stream_link: "*"  */
+#line 796 "parser.y"
                                                     {
-	#line 5767 "format.w"
+	#line 6206 "format.w"
 	HPUT8(255);}
-#line 3169 "parser.c"
+#line 3243 "parser.c"
     break;
 
-  case 160: /* stream_split: stream_link stream_link UNSIGNED  */
-#line 766 "parser.y"
+  case 168: /* stream_split: stream_link stream_link UNSIGNED  */
+#line 799 "parser.y"
                                              {
-	#line 5768 "format.w"
+	#line 6207 "format.w"
 	RNG("split ratio",(yyvsp[0].u),0,1000);HPUT16((yyvsp[0].u));}
-#line 3177 "parser.c"
+#line 3251 "parser.c"
     break;
 
-  case 161: /* $@7: %empty  */
-#line 769 "parser.y"
+  case 169: /* $@7: %empty  */
+#line 802 "parser.y"
                                 {
-	#line 5769 "format.w"
+	#line 6208 "format.w"
 	RNG("magnification factor",(yyvsp[0].u),0,1000);HPUT16((yyvsp[0].u));}
-#line 3185 "parser.c"
+#line 3259 "parser.c"
     break;
 
-  case 163: /* stream_type: stream_info  */
-#line 773 "parser.y"
+  case 171: /* stream_type: stream_info  */
+#line 806 "parser.y"
                        {
-	#line 5771 "format.w"
+	#line 6210 "format.w"
 	(yyval.info)= 0;}
-#line 3193 "parser.c"
+#line 3267 "parser.c"
     break;
 
-  case 164: /* stream_type: "first"  */
-#line 775 "parser.y"
+  case 172: /* stream_type: "first"  */
+#line 808 "parser.y"
                       {
-	#line 5771 "format.w"
+	#line 6210 "format.w"
 	(yyval.info)= 1;}
-#line 3201 "parser.c"
+#line 3275 "parser.c"
     break;
 
-  case 165: /* stream_type: "last"  */
-#line 777 "parser.y"
+  case 173: /* stream_type: "last"  */
+#line 810 "parser.y"
                      {
-	#line 5771 "format.w"
+	#line 6210 "format.w"
 	(yyval.info)= 2;}
-#line 3209 "parser.c"
+#line 3283 "parser.c"
     break;
 
-  case 166: /* stream_type: "top"  */
-#line 779 "parser.y"
+  case 174: /* stream_type: "top"  */
+#line 812 "parser.y"
                     {
-	#line 5771 "format.w"
+	#line 6210 "format.w"
 	(yyval.info)= 3;}
-#line 3217 "parser.c"
+#line 3291 "parser.c"
     break;
 
-  case 167: /* stream_def_node: start "stream (definition)" ref stream_type list xdimen_node glue_node list glue_node ">"  */
-#line 785 "parser.y"
+  case 175: /* stream_def_node: start "stream (definition)" ref stream_type list xdimen_node glue_node list glue_node ">"  */
+#line 818 "parser.y"
 {
-	#line 5775 "format.w"
+	#line 6214 "format.w"
 	DEF((yyval.rf),stream_kind,(yyvsp[-7].u));hput_tags((yyvsp[-9].u),TAG(stream_kind,(yyvsp[-6].info)	|b100));}
-#line 3225 "parser.c"
+#line 3299 "parser.c"
     break;
 
-  case 168: /* stream_ins_node: start "stream (definition)" ref ">"  */
-#line 790 "parser.y"
+  case 176: /* stream_ins_node: start "stream (definition)" ref ">"  */
+#line 823 "parser.y"
 {
-	#line 5778 "format.w"
+	#line 6217 "format.w"
 	RNG("Stream insertion",(yyvsp[-1].u),0,max_ref[stream_kind]);hput_tags((yyvsp[-3].u),TAG(stream_kind,b100));}
-#line 3233 "parser.c"
+#line 3307 "parser.c"
     break;
 
-  case 171: /* stream: empty_param_list list  */
-#line 796 "parser.y"
+  case 179: /* stream: empty_param_list list  */
+#line 829 "parser.y"
                             {
-	#line 5873 "format.w"
+	#line 6312 "format.w"
 	(yyval.info)= b010;}
-#line 3241 "parser.c"
+#line 3315 "parser.c"
     break;
 
-  case 172: /* stream: empty_param_list non_empty_param_list list  */
-#line 799 "parser.y"
+  case 180: /* stream: empty_param_list non_empty_param_list list  */
+#line 832 "parser.y"
                                                    {
-	#line 5874 "format.w"
+	#line 6313 "format.w"
 	(yyval.info)= b010;}
-#line 3249 "parser.c"
+#line 3323 "parser.c"
     break;
 
-  case 173: /* stream: param_ref list  */
-#line 802 "parser.y"
+  case 181: /* stream: param_ref list  */
+#line 835 "parser.y"
                        {
-	#line 5875 "format.w"
+	#line 6314 "format.w"
 	(yyval.info)= b000;}
-#line 3257 "parser.c"
+#line 3331 "parser.c"
     break;
 
-  case 174: /* content_node: start "stream" stream_ref stream ">"  */
-#line 806 "parser.y"
+  case 182: /* content_node: start "stream" stream_ref stream ">"  */
+#line 839 "parser.y"
 {
-	#line 5877 "format.w"
+	#line 6316 "format.w"
 	hput_tags((yyvsp[-4].u),TAG(stream_kind,(yyvsp[-1].info)));}
-#line 3265 "parser.c"
+#line 3339 "parser.c"
     break;
 
-  case 175: /* page_priority: %empty  */
-#line 810 "parser.y"
+  case 183: /* page_priority: %empty  */
+#line 843 "parser.y"
               {
-	#line 5980 "format.w"
+	#line 6419 "format.w"
 	HPUT8(1);}
-#line 3273 "parser.c"
+#line 3347 "parser.c"
     break;
 
-  case 176: /* page_priority: UNSIGNED  */
-#line 813 "parser.y"
+  case 184: /* page_priority: UNSIGNED  */
+#line 846 "parser.y"
                  {
-	#line 5981 "format.w"
+	#line 6420 "format.w"
 	RNG("page priority",(yyvsp[0].u),0,255);HPUT8((yyvsp[0].u));}
-#line 3281 "parser.c"
+#line 3355 "parser.c"
     break;
 
-  case 179: /* $@8: %empty  */
-#line 819 "parser.y"
+  case 187: /* $@8: %empty  */
+#line 852 "parser.y"
            {
-	#line 5985 "format.w"
+	#line 6424 "format.w"
 	hput_string((yyvsp[0].s));}
-#line 3289 "parser.c"
+#line 3363 "parser.c"
     break;
 
-  case 180: /* $@9: %empty  */
-#line 821 "parser.y"
+  case 188: /* $@9: %empty  */
+#line 854 "parser.y"
                                                           {
-	#line 5985 "format.w"
+	#line 6424 "format.w"
 	HPUT32((yyvsp[0].d));}
-#line 3297 "parser.c"
+#line 3371 "parser.c"
     break;
 
-  case 182: /* content_node: "<" "range" REFERENCE "on" ">"  */
-#line 828 "parser.y"
+  case 190: /* content_node: "<" "range" REFERENCE "on" ">"  */
+#line 861 "parser.y"
                                          {
-	#line 6097 "format.w"
+	#line 6536 "format.w"
 	REF(page_kind,(yyvsp[-2].u));hput_range((yyvsp[-2].u),true);}
-#line 3305 "parser.c"
+#line 3379 "parser.c"
     break;
 
-  case 183: /* content_node: "<" "range" REFERENCE "off" ">"  */
-#line 831 "parser.y"
+  case 191: /* content_node: "<" "range" REFERENCE "off" ">"  */
+#line 864 "parser.y"
                                       {
-	#line 6098 "format.w"
+	#line 6537 "format.w"
 	REF(page_kind,(yyvsp[-2].u));hput_range((yyvsp[-2].u),false);}
-#line 3313 "parser.c"
+#line 3387 "parser.c"
     break;
 
-  case 185: /* $@10: %empty  */
-#line 837 "parser.y"
+  case 193: /* $@10: %empty  */
+#line 870 "parser.y"
                                           {
-	#line 6789 "format.w"
+	#line 7228 "format.w"
 	new_directory((yyvsp[0].u)+1);new_output_buffers();}
-#line 3321 "parser.c"
+#line 3395 "parser.c"
     break;
 
-  case 189: /* entry: "<" "entry" UNSIGNED string ">"  */
-#line 842 "parser.y"
+  case 197: /* entry: "<" "entry" UNSIGNED string ">"  */
+#line 875 "parser.y"
 {
-	#line 6792 "format.w"
+	#line 7231 "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 3329 "parser.c"
+#line 3403 "parser.c"
     break;
 
-  case 190: /* $@11: %empty  */
-#line 846 "parser.y"
+  case 198: /* $@11: %empty  */
+#line 879 "parser.y"
                                     {
-	#line 7327 "format.w"
+	#line 7766 "format.w"
 	hput_definitions_start();}
-#line 3337 "parser.c"
+#line 3411 "parser.c"
     break;
 
-  case 191: /* definition_section: "<" "definitions" $@11 max_definitions definition_list ">"  */
-#line 850 "parser.y"
+  case 199: /* definition_section: "<" "definitions" $@11 max_definitions definition_list ">"  */
+#line 883 "parser.y"
    {
-	#line 7329 "format.w"
+	#line 7768 "format.w"
 	hput_definitions_end();}
-#line 3345 "parser.c"
+#line 3419 "parser.c"
     break;
 
-  case 194: /* max_definitions: "<" "max" max_list ">"  */
-#line 856 "parser.y"
+  case 202: /* max_definitions: "<" "max" max_list ">"  */
+#line 889 "parser.y"
 {
-	#line 7445 "format.w"
-		/*245:*/
+	#line 7884 "format.w"
+		/*253:*/
 	if(max_ref[label_kind]>=0)
 	ALLOCATE(labels,max_ref[label_kind]+1,Label);
-		/*:245*/	/*266:*/
+		/*:253*/	/*274:*/
 	if(max_outline>=0)
 	ALLOCATE(outlines,max_outline+1,Outline);
-		/*:266*/	/*293:*/
+		/*:274*/	/*301:*/
 	ALLOCATE(page_on,max_ref[page_kind]+1,int);
 	ALLOCATE(range_pos,2*(max_ref[range_kind]+1),RangePos);
-		/*:293*/	/*359:*/
+		/*:301*/	/*367:*/
 	definition_bits[0][int_kind]= (1<<(MAX_INT_DEFAULT+1))-1;
 	definition_bits[0][dimen_kind]= (1<<(MAX_DIMEN_DEFAULT+1))-1;
 	definition_bits[0][xdimen_kind]= (1<<(MAX_XDIMEN_DEFAULT+1))-1;
@@ -3366,544 +3440,544 @@
 	definition_bits[0][page_kind]= (1<<(MAX_PAGE_DEFAULT+1))-1;
 	definition_bits[0][stream_kind]= (1<<(MAX_STREAM_DEFAULT+1))-1;
 	definition_bits[0][range_kind]= (1<<(MAX_RANGE_DEFAULT+1))-1;
-		/*:359*/	/*374:*/
+		/*:367*/	/*382:*/
 	ALLOCATE(hfont_name,max_ref[font_kind]+1,char*);
-		/*:374*/hput_max_definitions();}
-#line 3373 "parser.c"
+		/*:382*/hput_max_definitions();}
+#line 3447 "parser.c"
     break;
 
-  case 197: /* max_value: "font" UNSIGNED  */
-#line 882 "parser.y"
+  case 205: /* max_value: "font" UNSIGNED  */
+#line 915 "parser.y"
                        {
-	#line 7449 "format.w"
+	#line 7888 "format.w"
 	hset_max(font_kind,(yyvsp[0].u));}
-#line 3381 "parser.c"
+#line 3455 "parser.c"
     break;
 
-  case 198: /* max_value: "int" UNSIGNED  */
-#line 885 "parser.y"
+  case 206: /* max_value: "int" UNSIGNED  */
+#line 918 "parser.y"
                          {
-	#line 7450 "format.w"
+	#line 7889 "format.w"
 	hset_max(int_kind,(yyvsp[0].u));}
-#line 3389 "parser.c"
+#line 3463 "parser.c"
     break;
 
-  case 199: /* max_value: "dimen" UNSIGNED  */
-#line 888 "parser.y"
+  case 207: /* max_value: "dimen" UNSIGNED  */
+#line 921 "parser.y"
                        {
-	#line 7451 "format.w"
+	#line 7890 "format.w"
 	hset_max(dimen_kind,(yyvsp[0].u));}
-#line 3397 "parser.c"
+#line 3471 "parser.c"
     break;
 
-  case 200: /* max_value: "ligature" UNSIGNED  */
-#line 891 "parser.y"
+  case 208: /* max_value: "ligature" UNSIGNED  */
+#line 924 "parser.y"
                           {
-	#line 7452 "format.w"
+	#line 7891 "format.w"
 	hset_max(ligature_kind,(yyvsp[0].u));}
-#line 3405 "parser.c"
+#line 3479 "parser.c"
     break;
 
-  case 201: /* max_value: "disc" UNSIGNED  */
-#line 894 "parser.y"
+  case 209: /* max_value: "disc" UNSIGNED  */
+#line 927 "parser.y"
                       {
-	#line 7453 "format.w"
+	#line 7892 "format.w"
 	hset_max(disc_kind,(yyvsp[0].u));}
-#line 3413 "parser.c"
+#line 3487 "parser.c"
     break;
 
-  case 202: /* max_value: "glue" UNSIGNED  */
-#line 897 "parser.y"
+  case 210: /* max_value: "glue" UNSIGNED  */
+#line 930 "parser.y"
                       {
-	#line 7454 "format.w"
+	#line 7893 "format.w"
 	hset_max(glue_kind,(yyvsp[0].u));}
-#line 3421 "parser.c"
+#line 3495 "parser.c"
     break;
 
-  case 203: /* max_value: "language" UNSIGNED  */
-#line 900 "parser.y"
+  case 211: /* max_value: "language" UNSIGNED  */
+#line 933 "parser.y"
                           {
-	#line 7455 "format.w"
+	#line 7894 "format.w"
 	hset_max(language_kind,(yyvsp[0].u));}
-#line 3429 "parser.c"
+#line 3503 "parser.c"
     break;
 
-  case 204: /* max_value: "rule" UNSIGNED  */
-#line 903 "parser.y"
+  case 212: /* max_value: "rule" UNSIGNED  */
+#line 936 "parser.y"
                       {
-	#line 7456 "format.w"
+	#line 7895 "format.w"
 	hset_max(rule_kind,(yyvsp[0].u));}
-#line 3437 "parser.c"
+#line 3511 "parser.c"
     break;
 
-  case 205: /* max_value: "image" UNSIGNED  */
-#line 906 "parser.y"
+  case 213: /* max_value: "image" UNSIGNED  */
+#line 939 "parser.y"
                        {
-	#line 7457 "format.w"
+	#line 7896 "format.w"
 	hset_max(image_kind,(yyvsp[0].u));}
-#line 3445 "parser.c"
+#line 3519 "parser.c"
     break;
 
-  case 206: /* max_value: "leaders" UNSIGNED  */
-#line 909 "parser.y"
+  case 214: /* max_value: "leaders" UNSIGNED  */
+#line 942 "parser.y"
                          {
-	#line 7458 "format.w"
+	#line 7897 "format.w"
 	hset_max(leaders_kind,(yyvsp[0].u));}
-#line 3453 "parser.c"
+#line 3527 "parser.c"
     break;
 
-  case 207: /* max_value: "baseline" UNSIGNED  */
-#line 912 "parser.y"
+  case 215: /* max_value: "baseline" UNSIGNED  */
+#line 945 "parser.y"
                           {
-	#line 7459 "format.w"
+	#line 7898 "format.w"
 	hset_max(baseline_kind,(yyvsp[0].u));}
-#line 3461 "parser.c"
+#line 3535 "parser.c"
     break;
 
-  case 208: /* max_value: "xdimen" UNSIGNED  */
-#line 915 "parser.y"
+  case 216: /* max_value: "xdimen" UNSIGNED  */
+#line 948 "parser.y"
                         {
-	#line 7460 "format.w"
+	#line 7899 "format.w"
 	hset_max(xdimen_kind,(yyvsp[0].u));}
-#line 3469 "parser.c"
+#line 3543 "parser.c"
     break;
 
-  case 209: /* max_value: "param" UNSIGNED  */
-#line 918 "parser.y"
+  case 217: /* max_value: "param" UNSIGNED  */
+#line 951 "parser.y"
                        {
-	#line 7461 "format.w"
+	#line 7900 "format.w"
 	hset_max(param_kind,(yyvsp[0].u));}
-#line 3477 "parser.c"
+#line 3551 "parser.c"
     break;
 
-  case 210: /* max_value: "stream (definition)" UNSIGNED  */
-#line 921 "parser.y"
+  case 218: /* max_value: "stream (definition)" UNSIGNED  */
+#line 954 "parser.y"
                            {
-	#line 7462 "format.w"
+	#line 7901 "format.w"
 	hset_max(stream_kind,(yyvsp[0].u));}
-#line 3485 "parser.c"
+#line 3559 "parser.c"
     break;
 
-  case 211: /* max_value: "page" UNSIGNED  */
-#line 924 "parser.y"
+  case 219: /* max_value: "page" UNSIGNED  */
+#line 957 "parser.y"
                       {
-	#line 7463 "format.w"
+	#line 7902 "format.w"
 	hset_max(page_kind,(yyvsp[0].u));}
-#line 3493 "parser.c"
+#line 3567 "parser.c"
     break;
 
-  case 212: /* max_value: "range" UNSIGNED  */
-#line 927 "parser.y"
+  case 220: /* max_value: "range" UNSIGNED  */
+#line 960 "parser.y"
                        {
-	#line 7464 "format.w"
+	#line 7903 "format.w"
 	hset_max(range_kind,(yyvsp[0].u));}
-#line 3501 "parser.c"
+#line 3575 "parser.c"
     break;
 
-  case 213: /* max_value: "label" UNSIGNED  */
-#line 930 "parser.y"
+  case 221: /* max_value: "label" UNSIGNED  */
+#line 963 "parser.y"
                        {
-	#line 7465 "format.w"
+	#line 7904 "format.w"
 	hset_max(label_kind,(yyvsp[0].u));}
-#line 3509 "parser.c"
+#line 3583 "parser.c"
     break;
 
-  case 214: /* def_node: start "font" ref font ">"  */
-#line 936 "parser.y"
+  case 222: /* def_node: start "font" ref font ">"  */
+#line 969 "parser.y"
                        {
-	#line 7662 "format.w"
+	#line 8101 "format.w"
 	DEF((yyval.rf),font_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),(yyvsp[-1].info));}
-#line 3517 "parser.c"
+#line 3591 "parser.c"
     break;
 
-  case 215: /* def_node: start "int" ref integer ">"  */
-#line 939 "parser.y"
+  case 223: /* def_node: start "int" ref integer ">"  */
+#line 972 "parser.y"
                                       {
-	#line 7663 "format.w"
+	#line 8102 "format.w"
 	DEF((yyval.rf),int_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
-#line 3525 "parser.c"
+#line 3599 "parser.c"
     break;
 
-  case 216: /* def_node: start "dimen" ref dimension ">"  */
-#line 942 "parser.y"
+  case 224: /* def_node: start "dimen" ref dimension ">"  */
+#line 975 "parser.y"
                                       {
-	#line 7664 "format.w"
+	#line 8103 "format.w"
 	DEF((yyval.rf),dimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_dimen((yyvsp[-1].d)));}
-#line 3533 "parser.c"
+#line 3607 "parser.c"
     break;
 
-  case 217: /* def_node: start "language" ref string ">"  */
-#line 945 "parser.y"
+  case 225: /* def_node: start "language" ref string ">"  */
+#line 978 "parser.y"
                                       {
-	#line 7665 "format.w"
+	#line 8104 "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 3541 "parser.c"
+#line 3615 "parser.c"
     break;
 
-  case 218: /* def_node: start "glue" ref glue ">"  */
-#line 948 "parser.y"
+  case 226: /* def_node: start "glue" ref glue ">"  */
+#line 981 "parser.y"
                                 {
-	#line 7666 "format.w"
+	#line 8105 "format.w"
 	DEF((yyval.rf),glue_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
-#line 3549 "parser.c"
+#line 3623 "parser.c"
     break;
 
-  case 219: /* def_node: start "xdimen" ref xdimen ">"  */
-#line 951 "parser.y"
+  case 227: /* def_node: start "xdimen" ref xdimen ">"  */
+#line 984 "parser.y"
                                     {
-	#line 7667 "format.w"
+	#line 8106 "format.w"
 	DEF((yyval.rf),xdimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_xdimen(&((yyvsp[-1].xd))));}
-#line 3557 "parser.c"
+#line 3631 "parser.c"
     break;
 
-  case 220: /* def_node: start "rule" ref rule ">"  */
-#line 954 "parser.y"
+  case 228: /* def_node: start "rule" ref rule ">"  */
+#line 987 "parser.y"
                                 {
-	#line 7668 "format.w"
+	#line 8107 "format.w"
 	DEF((yyval.rf),rule_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
-#line 3565 "parser.c"
+#line 3639 "parser.c"
     break;
 
-  case 221: /* def_node: start "leaders" ref leaders ">"  */
-#line 957 "parser.y"
+  case 229: /* def_node: start "leaders" ref leaders ">"  */
+#line 990 "parser.y"
                                       {
-	#line 7669 "format.w"
+	#line 8108 "format.w"
 	DEF((yyval.rf),leaders_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(leaders_kind,(yyvsp[-1].info)));}
-#line 3573 "parser.c"
+#line 3647 "parser.c"
     break;
 
-  case 222: /* def_node: start "baseline" ref baseline ">"  */
-#line 960 "parser.y"
+  case 230: /* def_node: start "baseline" ref baseline ">"  */
+#line 993 "parser.y"
                                         {
-	#line 7670 "format.w"
+	#line 8109 "format.w"
 	DEF((yyval.rf),baseline_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(baseline_kind,(yyvsp[-1].info)));}
-#line 3581 "parser.c"
+#line 3655 "parser.c"
     break;
 
-  case 223: /* def_node: start "ligature" ref ligature ">"  */
-#line 963 "parser.y"
+  case 231: /* def_node: start "ligature" ref ligature ">"  */
+#line 996 "parser.y"
                                         {
-	#line 7671 "format.w"
+	#line 8110 "format.w"
 	DEF((yyval.rf),ligature_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
-#line 3589 "parser.c"
+#line 3663 "parser.c"
     break;
 
-  case 224: /* def_node: start "disc" ref disc ">"  */
-#line 966 "parser.y"
+  case 232: /* def_node: start "disc" ref disc ">"  */
+#line 999 "parser.y"
                                 {
-	#line 7672 "format.w"
+	#line 8111 "format.w"
 	DEF((yyval.rf),disc_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
-#line 3597 "parser.c"
+#line 3671 "parser.c"
     break;
 
-  case 225: /* def_node: start "image" ref image ">"  */
-#line 969 "parser.y"
+  case 233: /* def_node: start "image" ref image ">"  */
+#line 1002 "parser.y"
                                   {
-	#line 7673 "format.w"
-	DEF((yyval.rf),image_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_image(&((yyvsp[-1].x))));}
-#line 3605 "parser.c"
+	#line 8112 "format.w"
+	DEF((yyval.rf),image_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(image_kind,(yyvsp[-1].info)));}
+#line 3679 "parser.c"
     break;
 
-  case 226: /* def_node: start "param" ref parameters ">"  */
-#line 972 "parser.y"
+  case 234: /* def_node: start "param" ref parameters ">"  */
+#line 1005 "parser.y"
                                        {
-	#line 7674 "format.w"
+	#line 8113 "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 3613 "parser.c"
+#line 3687 "parser.c"
     break;
 
-  case 227: /* def_node: start "page" ref page ">"  */
-#line 975 "parser.y"
+  case 235: /* def_node: start "page" ref page ">"  */
+#line 1008 "parser.y"
                                 {
-	#line 7675 "format.w"
+	#line 8114 "format.w"
 	DEF((yyval.rf),page_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(page_kind,0));}
-#line 3621 "parser.c"
+#line 3695 "parser.c"
     break;
 
-  case 228: /* def_node: start "int" ref ref ">"  */
-#line 980 "parser.y"
+  case 236: /* def_node: start "int" ref ref ">"  */
+#line 1013 "parser.y"
                          {
-	#line 7694 "format.w"
+	#line 8133 "format.w"
 	DEF_REF((yyval.rf),int_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(int_kind,0));}
-#line 3629 "parser.c"
+#line 3703 "parser.c"
     break;
 
-  case 229: /* def_node: start "dimen" ref ref ">"  */
-#line 983 "parser.y"
+  case 237: /* def_node: start "dimen" ref ref ">"  */
+#line 1016 "parser.y"
                                 {
-	#line 7695 "format.w"
+	#line 8134 "format.w"
 	DEF_REF((yyval.rf),dimen_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(dimen_kind,0));}
-#line 3637 "parser.c"
+#line 3711 "parser.c"
     break;
 
-  case 230: /* def_node: start "glue" ref ref ">"  */
-#line 986 "parser.y"
+  case 238: /* def_node: start "glue" ref ref ">"  */
+#line 1019 "parser.y"
                                {
-	#line 7696 "format.w"
+	#line 8135 "format.w"
 	DEF_REF((yyval.rf),glue_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(glue_kind,0));}
-#line 3645 "parser.c"
+#line 3719 "parser.c"
     break;
 
-  case 232: /* def_list: def_list def_node  */
-#line 991 "parser.y"
+  case 240: /* def_list: def_list def_node  */
+#line 1024 "parser.y"
                           {
-	#line 7810 "format.w"
+	#line 8249 "format.w"
 	check_param_def(&((yyvsp[0].rf)));}
-#line 3653 "parser.c"
+#line 3727 "parser.c"
     break;
 
-  case 233: /* parameters: estimate def_list  */
-#line 994 "parser.y"
+  case 241: /* parameters: estimate def_list  */
+#line 1027 "parser.y"
                             {
-	#line 7811 "format.w"
+	#line 8250 "format.w"
 	(yyval.l).p= (yyvsp[0].u);(yyval.l).k= param_kind;(yyval.l).s= (hpos-hstart)-(yyvsp[0].u);}
-#line 3661 "parser.c"
+#line 3735 "parser.c"
     break;
 
-  case 234: /* empty_param_list: position  */
-#line 998 "parser.y"
+  case 242: /* empty_param_list: position  */
+#line 1031 "parser.y"
                          {
-	#line 7832 "format.w"
+	#line 8271 "format.w"
 	HPUTX(2);hpos++;hput_tags((yyvsp[0].u),TAG(param_kind,1));}
-#line 3669 "parser.c"
+#line 3743 "parser.c"
     break;
 
-  case 235: /* $@12: %empty  */
-#line 1001 "parser.y"
+  case 243: /* $@12: %empty  */
+#line 1034 "parser.y"
                                 {
-	#line 7833 "format.w"
+	#line 8272 "format.w"
 	hpos= hpos-2;}
-#line 3677 "parser.c"
+#line 3751 "parser.c"
     break;
 
-  case 236: /* non_empty_param_list: start "param" $@12 parameters ">"  */
-#line 1004 "parser.y"
+  case 244: /* non_empty_param_list: start "param" $@12 parameters ">"  */
+#line 1037 "parser.y"
 {
-	#line 7834 "format.w"
+	#line 8273 "format.w"
 	hput_tags((yyvsp[-4].u)-2,hput_list((yyvsp[-4].u)-1,&((yyvsp[-1].l))));}
-#line 3685 "parser.c"
+#line 3759 "parser.c"
     break;
 
-  case 238: /* font_head: string dimension UNSIGNED UNSIGNED  */
-#line 1012 "parser.y"
+  case 246: /* font_head: string dimension UNSIGNED UNSIGNED  */
+#line 1045 "parser.y"
 {
-	#line 7976 "format.w"
+	#line 8415 "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 3693 "parser.c"
+#line 3767 "parser.c"
     break;
 
-  case 241: /* font_param: start "penalty" fref penalty ">"  */
-#line 1019 "parser.y"
+  case 249: /* font_param: start "penalty" fref penalty ">"  */
+#line 1052 "parser.y"
                               {
-	#line 7981 "format.w"
+	#line 8420 "format.w"
 	hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
-#line 3701 "parser.c"
+#line 3775 "parser.c"
     break;
 
-  case 242: /* font_param: start "kern" fref kern ">"  */
-#line 1022 "parser.y"
+  case 250: /* font_param: start "kern" fref kern ">"  */
+#line 1055 "parser.y"
                                  {
-	#line 7982 "format.w"
+	#line 8421 "format.w"
 	hput_tags((yyvsp[-4].u),hput_kern(&((yyvsp[-1].kt))));}
-#line 3709 "parser.c"
+#line 3783 "parser.c"
     break;
 
-  case 243: /* font_param: start "ligature" fref ligature ">"  */
-#line 1025 "parser.y"
+  case 251: /* font_param: start "ligature" fref ligature ">"  */
+#line 1058 "parser.y"
                                          {
-	#line 7983 "format.w"
+	#line 8422 "format.w"
 	hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
-#line 3717 "parser.c"
+#line 3791 "parser.c"
     break;
 
-  case 244: /* font_param: start "disc" fref disc ">"  */
-#line 1028 "parser.y"
+  case 252: /* font_param: start "disc" fref disc ">"  */
+#line 1061 "parser.y"
                                  {
-	#line 7984 "format.w"
+	#line 8423 "format.w"
 	hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
-#line 3725 "parser.c"
+#line 3799 "parser.c"
     break;
 
-  case 245: /* font_param: start "glue" fref glue ">"  */
-#line 1031 "parser.y"
+  case 253: /* font_param: start "glue" fref glue ">"  */
+#line 1064 "parser.y"
                                  {
-	#line 7985 "format.w"
+	#line 8424 "format.w"
 	hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
-#line 3733 "parser.c"
+#line 3807 "parser.c"
     break;
 
-  case 246: /* font_param: start "language" fref string ">"  */
-#line 1034 "parser.y"
+  case 254: /* font_param: start "language" fref string ">"  */
+#line 1067 "parser.y"
                                        {
-	#line 7986 "format.w"
+	#line 8425 "format.w"
 	hput_string((yyvsp[-1].s));hput_tags((yyvsp[-4].u),TAG(language_kind,0));}
-#line 3741 "parser.c"
+#line 3815 "parser.c"
     break;
 
-  case 247: /* font_param: start "rule" fref rule ">"  */
-#line 1037 "parser.y"
+  case 255: /* font_param: start "rule" fref rule ">"  */
+#line 1070 "parser.y"
                                  {
-	#line 7987 "format.w"
+	#line 8426 "format.w"
 	hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
-#line 3749 "parser.c"
+#line 3823 "parser.c"
     break;
 
-  case 248: /* font_param: start "image" fref image ">"  */
-#line 1040 "parser.y"
+  case 256: /* font_param: start "image" fref image ">"  */
+#line 1073 "parser.y"
                                    {
-	#line 7988 "format.w"
-	hput_tags((yyvsp[-4].u),hput_image(&((yyvsp[-1].x))));}
-#line 3757 "parser.c"
+	#line 8427 "format.w"
+	hput_tags((yyvsp[-4].u),TAG(image_kind,(yyvsp[-1].info)));}
+#line 3831 "parser.c"
     break;
 
-  case 249: /* fref: ref  */
-#line 1044 "parser.y"
+  case 257: /* fref: ref  */
+#line 1077 "parser.y"
         {
-	#line 7990 "format.w"
+	#line 8429 "format.w"
 	RNG("Font parameter",(yyvsp[0].u),0,MAX_FONT_PARAMS);}
-#line 3765 "parser.c"
+#line 3839 "parser.c"
     break;
 
-  case 250: /* xdimen_ref: ref  */
-#line 1048 "parser.y"
+  case 258: /* xdimen_ref: ref  */
+#line 1081 "parser.y"
               {
-	#line 8063 "format.w"
+	#line 8502 "format.w"
 	REF(xdimen_kind,(yyvsp[0].u));}
-#line 3773 "parser.c"
+#line 3847 "parser.c"
     break;
 
-  case 251: /* param_ref: ref  */
-#line 1051 "parser.y"
+  case 259: /* param_ref: ref  */
+#line 1084 "parser.y"
              {
-	#line 8064 "format.w"
+	#line 8503 "format.w"
 	REF(param_kind,(yyvsp[0].u));}
-#line 3781 "parser.c"
+#line 3855 "parser.c"
     break;
 
-  case 252: /* stream_ref: ref  */
-#line 1054 "parser.y"
+  case 260: /* stream_ref: ref  */
+#line 1087 "parser.y"
               {
-	#line 8065 "format.w"
+	#line 8504 "format.w"
 	REF_RNG(stream_kind,(yyvsp[0].u));}
-#line 3789 "parser.c"
+#line 3863 "parser.c"
     break;
 
-  case 253: /* content_node: start "penalty" ref ">"  */
-#line 1060 "parser.y"
+  case 261: /* content_node: start "penalty" ref ">"  */
+#line 1093 "parser.y"
                      {
-	#line 8069 "format.w"
+	#line 8508 "format.w"
 	REF(penalty_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(penalty_kind,0));}
-#line 3797 "parser.c"
+#line 3871 "parser.c"
     break;
 
-  case 254: /* content_node: start "kern" explicit ref ">"  */
-#line 1064 "parser.y"
+  case 262: /* content_node: start "kern" explicit ref ">"  */
+#line 1097 "parser.y"
 {
-	#line 8071 "format.w"
+	#line 8510 "format.w"
 	REF(dimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(kern_kind,((yyvsp[-2].b))?b100:b000));}
-#line 3805 "parser.c"
+#line 3879 "parser.c"
     break;
 
-  case 255: /* content_node: start "kern" explicit "xdimen" ref ">"  */
-#line 1068 "parser.y"
+  case 263: /* content_node: start "kern" explicit "xdimen" ref ">"  */
+#line 1101 "parser.y"
 {
-	#line 8073 "format.w"
+	#line 8512 "format.w"
 	REF(xdimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-5].u),TAG(kern_kind,((yyvsp[-3].b))?b101:b001));}
-#line 3813 "parser.c"
+#line 3887 "parser.c"
     break;
 
-  case 256: /* content_node: start "glue" ref ">"  */
-#line 1071 "parser.y"
+  case 264: /* content_node: start "glue" ref ">"  */
+#line 1104 "parser.y"
                            {
-	#line 8074 "format.w"
+	#line 8513 "format.w"
 	REF(glue_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(glue_kind,0));}
-#line 3821 "parser.c"
+#line 3895 "parser.c"
     break;
 
-  case 257: /* content_node: start "ligature" ref ">"  */
-#line 1074 "parser.y"
+  case 265: /* content_node: start "ligature" ref ">"  */
+#line 1107 "parser.y"
                                {
-	#line 8075 "format.w"
+	#line 8514 "format.w"
 	REF(ligature_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(ligature_kind,0));}
-#line 3829 "parser.c"
+#line 3903 "parser.c"
     break;
 
-  case 258: /* content_node: start "disc" ref ">"  */
-#line 1077 "parser.y"
+  case 266: /* content_node: start "disc" ref ">"  */
+#line 1110 "parser.y"
                            {
-	#line 8076 "format.w"
+	#line 8515 "format.w"
 	REF(disc_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(disc_kind,0));}
-#line 3837 "parser.c"
+#line 3911 "parser.c"
     break;
 
-  case 259: /* content_node: start "rule" ref ">"  */
-#line 1080 "parser.y"
+  case 267: /* content_node: start "rule" ref ">"  */
+#line 1113 "parser.y"
                            {
-	#line 8077 "format.w"
+	#line 8516 "format.w"
 	REF(rule_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(rule_kind,0));}
-#line 3845 "parser.c"
+#line 3919 "parser.c"
     break;
 
-  case 260: /* content_node: start "image" ref ">"  */
-#line 1083 "parser.y"
+  case 268: /* content_node: start "image" ref ">"  */
+#line 1116 "parser.y"
                             {
-	#line 8078 "format.w"
+	#line 8517 "format.w"
 	REF(image_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(image_kind,0));}
-#line 3853 "parser.c"
+#line 3927 "parser.c"
     break;
 
-  case 261: /* content_node: start "leaders" ref ">"  */
-#line 1086 "parser.y"
+  case 269: /* content_node: start "leaders" ref ">"  */
+#line 1119 "parser.y"
                               {
-	#line 8079 "format.w"
+	#line 8518 "format.w"
 	REF(leaders_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(leaders_kind,0));}
-#line 3861 "parser.c"
+#line 3935 "parser.c"
     break;
 
-  case 262: /* content_node: start "baseline" ref ">"  */
-#line 1089 "parser.y"
+  case 270: /* content_node: start "baseline" ref ">"  */
+#line 1122 "parser.y"
                                {
-	#line 8080 "format.w"
+	#line 8519 "format.w"
 	REF(baseline_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(baseline_kind,0));}
-#line 3869 "parser.c"
+#line 3943 "parser.c"
     break;
 
-  case 263: /* content_node: start "language" REFERENCE ">"  */
-#line 1092 "parser.y"
+  case 271: /* content_node: start "language" REFERENCE ">"  */
+#line 1125 "parser.y"
                                      {
-	#line 8081 "format.w"
+	#line 8520 "format.w"
 	REF(language_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),hput_language((yyvsp[-1].u)));}
-#line 3877 "parser.c"
+#line 3951 "parser.c"
     break;
 
-  case 264: /* glue_node: start "glue" ref ">"  */
-#line 1096 "parser.y"
+  case 272: /* glue_node: start "glue" ref ">"  */
+#line 1129 "parser.y"
                             {
-	#line 8083 "format.w"
+	#line 8522 "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;}}
-#line 3887 "parser.c"
+#line 3961 "parser.c"
     break;
 
-  case 265: /* $@13: %empty  */
-#line 1103 "parser.y"
+  case 273: /* $@13: %empty  */
+#line 1136 "parser.y"
                              {
-	#line 8514 "format.w"
+	#line 8953 "format.w"
 	hput_content_start();}
-#line 3895 "parser.c"
+#line 3969 "parser.c"
     break;
 
-  case 266: /* content_section: "<" "content" $@13 content_list ">"  */
-#line 1106 "parser.y"
+  case 274: /* content_section: "<" "content" $@13 content_list ">"  */
+#line 1139 "parser.y"
 {
-	#line 8515 "format.w"
+	#line 8954 "format.w"
 	hput_content_end();hput_range_defs();hput_label_defs();}
-#line 3903 "parser.c"
+#line 3977 "parser.c"
     break;
 
 
-#line 3907 "parser.c"
+#line 3981 "parser.c"
 
       default: break;
     }
@@ -4127,6 +4201,6 @@
   return yyresult;
 }
 
-#line 1110 "parser.y"
+#line 1143 "parser.y"
 
-	/*:512*/
+	/*:520*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2022-02-23 17:27:52 UTC (rev 62150)
@@ -39,7 +39,7 @@
 # define YY_YY_PARSER_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
-# define YYDEBUG 0
+# define YYDEBUG 1
 #endif
 #if YYDEBUG
 extern int yydebug;
@@ -117,26 +117,28 @@
     TABLE = 318,                   /* "table"  */
     ITEM = 319,                    /* "item"  */
     IMAGE = 320,                   /* "image"  */
-    LABEL = 321,                   /* "label"  */
-    BOT = 322,                     /* "bot"  */
-    MID = 323,                     /* "mid"  */
-    LINK = 324,                    /* "link"  */
-    OUTLINE = 325,                 /* "outline"  */
-    STREAM = 326,                  /* "stream"  */
-    STREAMDEF = 327,               /* "stream (definition)"  */
-    FIRST = 328,                   /* "first"  */
-    LAST = 329,                    /* "last"  */
-    TOP = 330,                     /* "top"  */
-    NOREFERENCE = 331,             /* "*"  */
-    PAGE = 332,                    /* "page"  */
-    RANGE = 333,                   /* "range"  */
-    DIRECTORY = 334,               /* "directory"  */
-    SECTION = 335,                 /* "entry"  */
-    DEFINITIONS = 336,             /* "definitions"  */
-    MAX = 337,                     /* "max"  */
-    PARAM = 338,                   /* "param"  */
-    FONT = 339,                    /* "font"  */
-    CONTENT = 340                  /* "content"  */
+    WIDTH = 321,                   /* "width"  */
+    HEIGHT = 322,                  /* "height"  */
+    LABEL = 323,                   /* "label"  */
+    BOT = 324,                     /* "bot"  */
+    MID = 325,                     /* "mid"  */
+    LINK = 326,                    /* "link"  */
+    OUTLINE = 327,                 /* "outline"  */
+    STREAM = 328,                  /* "stream"  */
+    STREAMDEF = 329,               /* "stream (definition)"  */
+    FIRST = 330,                   /* "first"  */
+    LAST = 331,                    /* "last"  */
+    TOP = 332,                     /* "top"  */
+    NOREFERENCE = 333,             /* "*"  */
+    PAGE = 334,                    /* "page"  */
+    RANGE = 335,                   /* "range"  */
+    DIRECTORY = 336,               /* "directory"  */
+    SECTION = 337,                 /* "entry"  */
+    DEFINITIONS = 338,             /* "definitions"  */
+    MAX = 339,                     /* "max"  */
+    PARAM = 340,                   /* "param"  */
+    FONT = 341,                    /* "font"  */
+    CONTENT = 342                  /* "content"  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -147,7 +149,7 @@
 {
 #line 79 "parser.y"
 
-	#line 10341 "format.w"
+	#line 10791 "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;
@@ -155,7 +157,7 @@
 	Ref rf;Info info;Order o;bool b;
 	
 
-#line 159 "hiparser.h"
+#line 161 "hiparser.h"
 
 };
 typedef union YYSTYPE YYSTYPE;

Modified: trunk/Build/source/texk/web2c/hitexdir/hitex.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hitex.w	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hitex.w	2022-02-23 17:27:52 UTC (rev 62150)
@@ -3772,7 +3772,8 @@
 @p @<Declare procedures needed for displaying the elements of mlists@>@;
 @<Declare the procedure called |print_skip_param|@>@;
 static void print_xdimen(pointer p)
-{ print_scaled(xdimen_width(p));
+{ if (p==null) { print_scaled(0); return; }
+  print_scaled(xdimen_width(p));
   if (xdimen_hfactor(p)!=0)
   { print_char('+');print_scaled(xdimen_hfactor(p));print("*hsize");}
   if (xdimen_vfactor(p)!=0)
@@ -4052,7 +4053,8 @@
 @p static void delete_glue_ref(pointer @!p) /*|p| points to a glue specification*/
 fast_delete_glue_ref(p)
 static void delete_xdimen_ref(pointer @!p) /*|p| points to a xdimen specification*/
-{@+if (xdimen_ref_count(p)==null) free_node(p, xdimen_node_size);
+{@+if (p==null) return;
+  if (xdimen_ref_count(p)==null) free_node(p, xdimen_node_size);
   else decr(xdimen_ref_count(p));
 }
 
@@ -4117,7 +4119,7 @@
 
 @d add_token_ref(A) incr(token_ref_count(A)) /*new reference to a token list*/
 @d add_glue_ref(A) incr(glue_ref_count(A)) /*new reference to a glue spec*/
- at d add_xdimen_ref(A) incr(xdimen_ref_count(A)) /*new reference to an xdimen*/
+ at d add_xdimen_ref(A) if (A!=null) incr(xdimen_ref_count(A)) /*new reference to an xdimen*/
 
 @ The copying procedure copies words en masse without bothering
 to look at their individual fields. If the node format changes---for
@@ -8964,7 +8966,8 @@
   if (level!=tok_val) scanned_result(0, dimen_val)@;
   else scanned_result(0, int_val);
   }
-else if (m==vmode) scanned_result(prev_depth, dimen_val)@;
+else if (m==vmode)
+  scanned_result(prev_depth==unknown_depth?0:prev_depth, dimen_val)@;
 else scanned_result(space_factor, int_val)
 
 @ @<Fetch the |dead_cycles| or the |insert_penalties|@>=
@@ -13827,8 +13830,7 @@
 @p static void append_to_vlist(pointer @!b)@t\2\2@>@/
 { bool height_known;@t\1@>@/
   height_known=(type(b)==hlist_node || type(b)==vlist_node ||@|
-	   (type(b)==whatsit_node && subtype(b)==hset_node) ||@|
-	   (type(b)==whatsit_node && subtype(b)==image_node));@/
+	   (type(b)==whatsit_node && subtype(b)==hset_node));@/
   if (prev_depth > ignore_depth && height_known)@/
   {@+scaled d;@t\1@> /*deficiency of space between baselines*/
     pointer @!p; /*a new glue node*/
@@ -13845,8 +13847,10 @@
     link(tail)= p;tail= p;
   }
   link(tail)=b;tail=b;
-  if (height_known)
-	prev_depth=depth(b);  /* then also depth is known */
+  if (height_known ||
+       (type(b)==whatsit_node &&
+          (subtype(b)==hpack_node || subtype(b)==vpack_node)))
+	prev_depth=depth(b);  /* then also depth is (probably) known */
   else
 	prev_depth=unknown_depth;
 }
@@ -25408,21 +25412,21 @@
 @d open_ext(A) link(A+2) /*string number of file extension for |open_name|*/  @#
 
 @d hitex_ext save_pos_code+1
- at d par_node         hitex_ext /*|subtype| that records the change of a parameter*/
- at d par_node_size 3 /* number of memory words in a |par_node| */
- at d par_type(A) type(A+1) /* type of parameter */
+ at d param_node         hitex_ext /*|subtype| that records the change of a parameter*/
+ at d param_node_size 3 /* number of memory words in a |param_node| */
+ at d param_type(A) type(A+1) /* type of parameter */
 @d int_type   0 /* type of an |int_par| node */
 @d dimen_type  1 /* type of an |dimen_par| node */
 @d glue_type  2 /* type of an |glue_par| node */
- at d par_number(A) subtype(A+1) /* the parameter number */
- at d par_value(A)  mem[A+2] /* the parameter value */@#
+ at d param_no(A) subtype(A+1) /* the parameter number */
+ at d param_value(A)  mem[A+2] /* the parameter value */@#
 
- at d graf_node        hitex_ext+1 /*|subtype|  that records a paragraph*/
- at d graf_node_size 5 /* number of memory words in a |graf_node| */
- at d graf_penalty(A)  mem[A+1].i /* the final penalty */
- at d graf_extent(A)   link(A+3) /* the extent */@#
- at d graf_params(A)   info(A+4) /* list of parameter nodes */
- at d graf_list(A)     link(A+4) /* list of content nodes */
+ at d par_node        hitex_ext+1 /*|subtype|  that records a paragraph*/
+ at d par_node_size 5 /* number of memory words in a |par_node| */
+ at d par_penalty(A)  mem[A+1].i /* the final penalty */
+ at d par_extent(A)   link(A+3) /* the extent */@#
+ at d par_params(A)   info(A+4) /* list of parameter nodes */
+ at d par_list(A)     link(A+4) /* list of content nodes */
 
 @d disp_node           hitex_ext+2 /*|subtype| that records a math display*/
 @d disp_node_size    3 /* number of memory words in a |disp_node| */
@@ -25436,19 +25440,15 @@
 @d baseline_node_size small_node_size /* This is 2; we will convert baseline nodes to glue nodes */
 @d baseline_node_no(A) mem[A+1].i /* baseline reference */@#
 
- at d image_node    hitex_ext+4 /*|subtype| that records an image */
- at d image_node_size 9  /* width, depth, height, |shift_amount| like a hbox */
- at d image_width(A)  width(A)  /*width of image */
- at d image_height(A) height(A) /*height of image */
- at d image_depth(A)  depth(A) /* depth of image==zero */
- at d image_no(A)     mem[A+4].i   /* the section number */
- at d image_stretch(A) mem[A+5].sc  /*stretchability of image */
- at d image_shrink(A) mem[A+6].sc  /*shrinkability of image */
- at d image_stretch_order(A) stretch_order(A+7)
- at d image_shrink_order(A) shrink_order(A+7)
- at d image_name(A)   link(A+7) /*string number of file name */
- at d image_area(A)   info(A+8) /*string number of file area */
- at d image_ext(A)    link(A+8) /*string number of file extension */@#
+ at d image_node    hitex_ext+4  /*|subtype| that records an image */
+ at d image_node_size 5 /* number of memory words in an |image_node| */
+ at d image_xwidth(A)  link(A+1)  /*extended width of image */
+ at d image_xheight(A) info(A+1)  /*extended height of image */
+ at d image_no(A)     link(A+2)  /* the section number */
+ at d image_name(A)   info(A+2)  /*string number of file name */
+ at d image_area(A)   info(A+3)  /*string number of file area */
+ at d image_ext(A)    link(A+3)  /*string number of file extension */
+ at d image_alt(A)    link(A+4)  /* alternative image description text */@#
 
 @d hpack_node         hitex_ext+5 /* a hlist that needs to go to hpack */
 @d vpack_node         hitex_ext+6 /* a vlist that needs to go to vpackage */
@@ -25624,8 +25624,8 @@
   case write_node: print_esc("write");@+break;
   case close_node: print_esc("closeout");@+break;
   case special_node: print_esc("special");@+break;
-  case par_node: print("parameter");@+break;
-  case graf_node: print("paragraf");@+break;
+  case param_node: print("parameter");@+break;
+  case par_node: print("paragraf");@+break;
   case disp_node: print("display");@+break;
   case baseline_node: print("baselineskip");@+break;
   case hpack_node: print("hpack");@+break;
@@ -25665,8 +25665,8 @@
 case write_node: @<Implement \.{\\write}@>@;@+break;
 case close_node: @<Implement \.{\\closeout}@>@;@+break;
 case special_node: @<Implement \.{\\special}@>@;@+break;
+case param_node:
 case par_node:
-case graf_node:
 case disp_node:
 case baseline_node:
 case hpack_node:
@@ -25681,21 +25681,12 @@
   p=new_image_node(cur_name,cur_area,cur_ext);
   loop {
     if (scan_keyword("width"))
-    {@+scan_normal_dimen;@+image_width(p)=cur_val;}
+    {@+scan_normal_dimen; image_xwidth(p)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
     else if (scan_keyword("height"))
-    {@+scan_normal_dimen;image_height(p)=cur_val; }
-    else if (scan_keyword("plus"))
-    { scan_dimen(false, true, false);
-      image_stretch(p)=cur_val;image_stretch_order(p)=cur_order;
-    }
-    else if (scan_keyword("minus"))
-    { scan_dimen(false, true, false);
-      image_shrink(p)=cur_val;image_shrink_order(p)=cur_order;
-    }
+    {@+scan_normal_dimen; image_xheight(p)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
     else
       break;
   }
-  hget_image_information(p);
   if (abs(mode)==vmode)
     append_to_vlist(p); /* image nodes have height, width, and depth like boxes */
   else
@@ -25749,9 +25740,11 @@
     if (scan_keyword("priority"))
     {@+scan_eight_bit_int();setpage_priority(t)=cur_val; }
     else if (scan_keyword("width"))
-    {@+scan_normal_dimen; setpage_width(t)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
+    {@+scan_normal_dimen; delete_xdimen_ref(setpage_width(t));
+      setpage_width(t)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
     else if (scan_keyword("height"))
-    {@+scan_normal_dimen; setpage_height(t)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
+    {@+scan_normal_dimen;  delete_xdimen_ref(setpage_height(t));
+     setpage_height(t)=new_xdimen(cur_val,cur_hfactor,cur_vfactor); }
     else
       break;
   }
@@ -25932,17 +25925,17 @@
   print_int(what_rhm(p));print_char(')');
   } @+break;
 @/@<Cases for displaying the |whatsit| node@>@/
-case par_node: print_esc("parameter ");
-  print_int(par_type(p));print_char(',');print_int(par_number(p));
-  print_char(':');print_int(par_value(p).i);
+case param_node: print_esc("parameter ");
+  print_int(param_type(p));print_char(',');print_int(param_no(p));
+  print_char(':');print_int(param_value(p).i);
   break;
-case graf_node: print_esc("paragraf(");
-  print_xdimen(graf_extent(p));
+case par_node: print_esc("paragraf(");
+  print_xdimen(par_extent(p));
   print(", ");
-  print_int(graf_penalty(p));
+  print_int(par_penalty(p));
   print_char(')');
-  node_list_display(graf_params(p));
-  node_list_display(graf_list(p));
+  node_list_display(par_params(p));
+  node_list_display(par_list(p));
   break;
 case disp_node: print_esc("display ");
   node_list_display(display_eqno(p));
@@ -25983,12 +25976,9 @@
   break;
 case image_node:
   print_esc("HINTimage(");
-  print_char('(');print_scaled(image_height(p));
-   print_char('+'); print_scaled(image_depth(p));
-   print(")x"); print_scaled(image_width(p));
-  if (image_stretch(p)!=0) { print(" plus ");print_glue(image_stretch(p), image_stretch_order(p),"pt"); }
-  if (image_shrink(p)!=0) { print(" minus ");print_glue(image_shrink(p), image_shrink_order(p), "pt"); }
-  print(", section ");print_int(image_no(p));
+  print("width ");print_xdimen(image_xheight(p));
+  print(" height "); print_xdimen(image_xwidth(p));
+  print("), section ");print_int(image_no(p));
   if (image_name(p)!=0) {print(", "); printn(image_name(p));}
   break;
 case align_node:
@@ -26075,18 +26065,18 @@
   words=small_node_size;
   } @+break;
 @/@<Cases for making a partial copy of the whatsit node@>@/
+case param_node:
+{@+r=get_node(param_node_size);
+  if (param_type(p)==glue_type) add_glue_ref(param_value(p).i);
+  words=param_node_size;
+  } @+break;
 case par_node:
 {@+r=get_node(par_node_size);
-  if (par_type(p)==glue_type) add_glue_ref(par_value(p).i);
-  words=par_node_size;
+  add_xdimen_ref(par_extent(p));
+  par_params(r)=copy_node_list(par_params(p));
+  par_list(r)=copy_node_list(par_list(p));
+  words=par_node_size-1;
   } @+break;
-case graf_node:
-{@+r=get_node(graf_node_size);
-  add_xdimen_ref(graf_extent(p));
-  graf_params(r)=copy_node_list(graf_params(p));
-  graf_list(r)=copy_node_list(graf_list(p));
-  words=graf_node_size-1;
-  } @+break;
 case disp_node:
 {@+r=get_node(disp_node_size);
   display_left(r)=display_left(p);
@@ -26116,7 +26106,9 @@
   } @+break;
 case image_node:
     r=get_node(image_node_size);
-    words=image_node_size;
+    add_xdimen_ref(image_xheight(p));add_xdimen_ref(image_xwidth(p));
+    image_alt(r)=copy_node_list(image_alt(p));
+    words=image_node_size-1;
     break;
 case align_node:
   {@+r=get_node(align_node_size);
@@ -26189,14 +26181,14 @@
   free_node(p, write_node_size);goto done;
   }
 case close_node: case language_node: free_node(p, small_node_size);@+break;
+case param_node:
+  if (param_type(p)==glue_type) fast_delete_glue_ref(param_value(p).i);
+  free_node(p, param_node_size);@+break;
 case par_node:
-  if (par_type(p)==glue_type) fast_delete_glue_ref(par_value(p).i);
+  delete_xdimen_ref(par_extent(p));
+  flush_node_list(par_params(p));
+  flush_node_list(par_list(p));
   free_node(p, par_node_size);@+break;
-case graf_node:
-  delete_xdimen_ref(graf_extent(p));
-  flush_node_list(graf_params(p));
-  flush_node_list(graf_list(p));
-  free_node(p, graf_node_size);@+break;
 case disp_node:
   flush_node_list(display_eqno(p));
   flush_node_list(display_formula(p));
@@ -26213,6 +26205,8 @@
   flush_node_list(list_ptr(p));
   free_node(p, set_node_size);@+break;
 case image_node:
+  delete_xdimen_ref(image_xwidth(p)); delete_xdimen_ref(image_xheight(p));
+  flush_node_list(image_alt(p));
   free_node(p,image_node_size);@+break;
 case align_node:
   delete_xdimen_ref(align_extent(p));
@@ -30107,7 +30101,6 @@
 static pointer new_setpage_node(eight_bits k, str_number n);
 static pointer new_disp_node(void);
 static pointer new_image_node(str_number n, char *a, char *e);
-static void hget_image_information(pointer p);
 static void new_param_node(eight_bits t, eight_bits n, int v);
 
 
@@ -30142,13 +30135,15 @@
 hpack nodes, vpack nodes, hset nodes, vset nodes, and image nodes.
 
 @<Hi\TeX\ routines@>=
-static pointer new_graf_node(void)
+static pointer new_par_node(void)
 { @+ pointer p;
-  p=get_node(graf_node_size);
+  p=get_node(par_node_size);
   type(p)=whatsit_node;
-  subtype(p)=graf_node;
-  graf_params(p)=null;
-  graf_list(p)=null;
+  subtype(p)=par_node;
+  par_params(p)=null;
+  par_list(p)=null;
+  par_extent(p)=null;
+  depth(p)=0;
   return p;
 }
 
@@ -30180,6 +30175,7 @@
   subtype(p)=hpack_node;
   width(p)=depth(p)=height(p)=shift_amount(p)=0;
   pack_limit(p)=max_dimen;
+  pack_extent(p)=null;
   list_ptr(p)=null;
   return p;
 }
@@ -30189,7 +30185,8 @@
   p=get_node(set_node_size);
   type(p)=whatsit_node;
   subtype(p)=hset_node;
-  width(p)=depth(p)=height(p)=shift_amount(p)=set_stretch(p)=set_shrink(p)=set_extent(p)=0;
+  width(p)=depth(p)=height(p)=shift_amount(p)=set_stretch(p)=set_shrink(p)=0;
+  set_extent(p)=null;
   list_ptr(p)=null;
   return p;
 }
@@ -30202,7 +30199,6 @@
   int i;
   char *fn;
   int l;
-
   p=get_node(image_node_size);type(p)=whatsit_node;subtype(p)=image_node;
   image_name(p)=n;
   image_area(p)=s_no(a);
@@ -30216,8 +30212,7 @@
   free(fn);
 #endif
   image_no(p)=i;
-  image_width(p)=image_height(p)=image_stretch(p)=image_shrink(p)=0;
-  image_shrink_order(p)=image_stretch_order(p)=normal;@/
+  image_xwidth(p)=image_xheight(p)=image_alt(p)=null;
   return p;
 }
 
@@ -30230,19 +30225,19 @@
 There is probably not much savings in memory space, because
 most of the times a reference number is found for the parameter list.
 @<Create the parameter node@>=
-  p=get_node(par_node_size);
+  p=get_node(param_node_size);
   type(p)=whatsit_node;
-  subtype(p)=par_node;
-  par_type(p)=t;
-  par_number(p)=n;
+  subtype(p)=param_node;
+  param_type(p)=t;
+  param_no(p)=n;
 
 @ @<Initialize the parameter node@>=
-  if (t==int_type) par_value(p).i=v;
-  else if (t==dimen_type) par_value(p).sc=v;
+  if (t==int_type) param_value(p).i=v;
+  else if (t==dimen_type) param_value(p).sc=v;
   else  if (t==glue_type)
-  {@+ par_value(p).i=v;add_glue_ref(par_value(p).i); @+}
+  {@+ param_value(p).i=v;add_glue_ref(param_value(p).i); @+}
   else
-  { free_node(p, par_node_size);
+  { free_node(p, param_node_size);
     QUIT("Undefined parameter type %d",t);
   }
 
@@ -30288,6 +30283,7 @@
 {@+ bool auto_breaking; /*is node |cur_p| outside a formula?*/
   pointer r, s ; /*miscellaneous nodes of temporary interest*/
   pointer pp;
+  scaled par_max_depth=0;
   bool par_shape_fix=false;
   if (DBGTEX&debugflags)
   { print_ln();print("Before hline_break:\n");
@@ -30300,10 +30296,10 @@
     return;
   }
   /* Get ready to start line breaking */
-  pp=new_graf_node();
-  graf_penalty(pp)=final_widow_penalty;
+  pp=new_par_node();
+  par_penalty(pp)=final_widow_penalty;
   if(par_shape_ptr==null)
-    graf_extent(pp)=new_xdimen(dimen_par(hsize_code),
+    par_extent(pp)=new_xdimen(dimen_par(hsize_code),
       dimen_par_hfactor(hsize_code),dimen_par_vfactor(hsize_code));
   else
     @<fix the use of parshape = 1 indent length@>@;
@@ -30354,8 +30350,10 @@
   { /*Call |try_break| if |cur_p| is a legal breakpoint...*/
     if (is_char_node(cur_p))
 	{ /* Advance |cur_p| to the node following the present string...*/
-      do {
-        cur_p=link(cur_p);
+      do { int f=font(cur_p);
+           scaled d = char_depth(f,height_depth(char_info(f,character(cur_p))));
+           if (d>par_max_depth) par_max_depth=d;
+           cur_p=link(cur_p);
       } while (is_char_node(cur_p));
 	  if (cur_p==null) goto done5; /* mr: no glue and penalty at the end */
     }
@@ -30378,8 +30376,11 @@
           cur_p=s;
 		goto done5;
 	  case math_node:
-		auto_breaking=(subtype(cur_p)==after);
-        break;
+	   auto_breaking=(subtype(cur_p)==after);
+           break;
+          case hlist_node: case vlist_node:
+           if (depth(cur_p)>par_max_depth) par_max_depth=depth(cur_p);
+           break;
 	  default:
 		break;
 	}
@@ -30392,7 +30393,8 @@
     depth_threshold=200;
     show_node_list(link(temp_head));print_ln();
   }
-  graf_list(pp)=link(temp_head);
+  depth(pp)=par_max_depth;
+  par_list(pp)=link(temp_head);
   /* adding parameter nodes */
   link(temp_head)=null;
 
@@ -30431,7 +30433,7 @@
 
 
   /* |par_shape| is not yet supported */
-  graf_params(pp)=link(temp_head);
+  par_params(pp)=link(temp_head);
   link(temp_head)=null;
   append_to_vlist(pp);
 }
@@ -30450,7 +30452,7 @@
   second_width= mem[par_shape_ptr+2*(last_special_line+1)].sc;
   second_indent= mem[par_shape_ptr+2*last_special_line+1].sc;
 
-  graf_extent(pp)=new_xdimen(second_indent+second_width,
+  par_extent(pp)=new_xdimen(second_indent+second_width,
                              par_shape_hfactor,par_shape_vfactor);
   second_width=second_width+ round((double)par_shape_hfactor*hhsize/unity
                +(double)par_shape_vfactor*hvsize/unity);
@@ -30457,237 +30459,6 @@
   par_shape_fix=true;
 }
 
-@*1 Images.
-The handling of images is an integral part of Hi\TeX.
-The {\tt image} primitive requires a filename for the image and
-allows the specification, of width, height, stretch and shrink of an
-image. If either width or height is not given, Hi\TeX\ tries to
-extract this information from the image file itself calling the
-function |hget_image_information| with the pointer |p| to the image
-node as parameter.
-
-@<Hi\TeX\ routines@>=
-static void hget_image_information(pointer p)
-{ char *fn;
-  FILE *f;
-  if (image_width(p)!=0 && image_height(p)!=0) return;
-  fn=dir[image_no(p)].file_name;
-  f=fopen(fn,"rb");
-  if (f==NULL) QUIT("Unable to open image file %s.", fn);
-  MESSAGE("(%s",fn);
-  img_buf_size=0;
-  if (!get_BMP_info(f,fn,p)&&!get_PNG_info(f,fn,p)&&!get_JPG_info(f,fn,p))
-    QUIT("Unable to obtain width and height information for image %s",fn);
-  fclose(f);
-  MESSAGE(" width= %fpt height= %fpt)",image_width(p)/(double)ONE,image_height(p)/(double)ONE);
-}
-
-@ When we have found the width and height of the stored image, we can
-supplement the information given in the \TeX\ file. Occasionaly, the
-image file will not specify the absolute dimensions of the image. In
-this case, we can still compute the aspect ratio and supplement either
-the width based on the height or vice versa.  This is accomplished by
-calling the |set_image_dimensions| function. It returns true on
-success and false otherwise.
-
-@<Hi\TeX\ auxiliar routines@>=
-static bool set_image_dimensions(pointer p, double w, double h, bool absolute)
-{ if (image_width(p)!=0)
-  { double aspect=h/w;
-    image_height(p)=round(image_width(p)*aspect);
-  }
-  else if (image_height(p)!=0)
-  { double aspect=w/h;
-     image_width(p)=round(image_height(p)*aspect);
-  }
-  else
-  { if (!absolute) return false;
-    image_width(p)=round(unity*w);
-    image_height(p)=round(unity*h);
-  }
-  return true;
-}
-
-@ We call the following routines with the image buffer partly filled
-with the start of the image file.
-
-@<Hi\TeX\ auxiliar routines@>=
-#define IMG_BUF_MAX 54
-#define IMG_HEAD_MAX 2
-static unsigned char img_buf[IMG_BUF_MAX];
-static size_t img_buf_size;
-#define @[LittleEndian32(X)@]   (img_buf[(X)]+(img_buf[(X)+1]<<8)+\
-                                (img_buf[(X)+2]<<16)+(img_buf[(X)+3]<<24))
-
-#define @[BigEndian16(X)@]   (img_buf[(X)+1]+(img_buf[(X)]<<8))
-
-#define @[BigEndian32(X)@]   (img_buf[(X)+3]+(img_buf[(X)+2]<<8)+\
-                                (img_buf[(X)+1]<<16)+(img_buf[(X)]<<24))
-
-#define Match2(X,A,B)  ((img_buf[(X)]==(A)) && (img_buf[(X)+1]==(B)))
-#define Match4(X,A,B,C,D)  (Match2(X,A,B)&&Match2((X)+2,C,D))
-
-#define @[GET_IMG_BUF(X)@] \
-if (img_buf_size<X) \
-  { size_t i=fread(img_buf+img_buf_size,1,(X)-img_buf_size,f); \
-    if (i<0) QUIT("Unable to read image %s",fn); \
-    else if (i==0) QUIT("Unable to read image header %s",fn); \
-    else img_buf_size+=i; \
-  }
-
-@ Considering the different image formats, we start with Windows Bitmaps. A Windows bitmap file usually has the extension {\tt .bmp}
-but the better way to check for a Windows bitmap file ist to examine the first two byte
-of the file: the ASCII codes for `B' and `M'.
-Once we have verified the file type, we find the width and height of the bitmap in pixels
-at offsets |0x12| and |0x16| stored as little-endian 32 bit integers. At offsets |0x26| and |0x2A|,
-we find the horizontal and vertical resolution in pixel per meter stored in the same format.
-This is sufficient to compute the true width and height of the image in scaled points.
-If either the width or the height was given in the \TeX\ file, we just compute the aspect ratio
-and compute the missing value.
-
-The Windows Bitmap format is easy to process but not very efficient. So the support for this
-format in Hi\TeX\ is deprecated and will disappear. You should use one of the formats described next.
-
-@<Hi\TeX\ auxiliar routines@>=
-static bool get_BMP_info(FILE *f, char *fn, pointer p)
-{ double w,h;
-  double xppm,yppm;
-  GET_IMG_BUF(2);
-  if (!Match2(0,'B','M')) return false;
-  GET_IMG_BUF(0x2E);
-  w=(double)LittleEndian32(0x12); /*width in pixel*/
-  h=(double)LittleEndian32(0x16); /*height in pixel*/
-  xppm=(double)LittleEndian32(0x26); /* horizontal pixel per meter*/
-  yppm=(double)LittleEndian32(0x2A); /* vertical pixel per meter*/
-  return set_image_dimensions(p,(72.27*1000.0/25.4)*w/xppm,(72.27*1000.0/25.4)*h/yppm,true);
-}
-
-@ Now we repeat this process for image files using the Portable Network Graphics file format. This file format is well suited to simple graphics that do not use color gradients.
-These images usually have the extension {\tt .png} and start with an eight byte signature:
-|0x89| followed by the ASCII Codes `P', `N', `G', followd by a carriage return (|0x0D| and line feed (|0x0A|),
-an DOS end-of-file character (|0x1A|) and final line feed (|0x0A|).
-After the signature follows a list of chunks. The first chunk is the image header chunk.
-Each chunk starts with the size of the chunk stored as big-endian 32 bit integer, followed by the chunk name
-stored as four ASCII codes  followed by the chunk data and a CRC.
-The size, as stored in the chunk,
-does not include the size itself, nor the name, and neither the CRC.
-The first chunk is the IHDR chunk.
-The chunk data of the IHDR chunk starts with the width and the height of the image in pixels
-stored as 32 bit big-endian integers.
-
-Finding the image resolution takes some more effort. The image resolution is stored in an optional chunk
-named ``pHYs'' for the physical pixel dimensions.
-All we know is that this chunk, if it exists, will appear after the IHDR
-chunk and before the (required) IDAT chunk. The pHYs chunk contains two 32 bit big-endian integers,
-giving the horizontal and vertical pixels per unit, and a one byte unit specifier, which is either 0
-for an undefined unit or 1 for the meter as unit. With an undefined unit, only the aspect ratio
-of the pixels and hence the aspect ratio of the image can be determined.
-
-
-@<Hi\TeX\ auxiliar routines@>=
-
-static bool get_PNG_info(FILE *f, char *fn, pointer p)
-{ int pos, size;
-  double w,h;
-  double xppu,yppu;
-  int unit;
-  GET_IMG_BUF(24);
-  if (!Match4(0, 0x89, 'P', 'N', 'G') ||
-      !Match4(4, 0x0D, 0x0A, 0x1A, 0x0A)) return false;
-  size=BigEndian32(8);
-  if (!Match4(12,'I', 'H', 'D', 'R')) return false;
-  w=(double)BigEndian32(16);
-  h=(double)BigEndian32(20);
-  pos=20+size;
-  while (true)
-  { if (fseek(f,pos,SEEK_SET)!=0) return false;
-    img_buf_size=0;
-    GET_IMG_BUF(17);
-    size=BigEndian32(0);
-    if (Match4(4,'p', 'H', 'Y', 's'))
-    { xppu =(double)BigEndian32(8);
-      yppu =(double)BigEndian32(12);
-      unit=img_buf[16];
-      if (unit==0)
-        return set_image_dimensions(p,w/xppu,h/yppu,false);
-      else if (unit==1)
-        return set_image_dimensions(p,(72.27/0.0254)*w/xppu,(72.27/0.0254)*h/yppu,true);
-      else
-        return false;
-    }
-    else if  (Match4(4,'I', 'D', 'A', 'T'))
-      return set_image_dimensions(p,w,h,false);
-    else
-      pos=pos+12+size;
-  }
-  return false;
-}
-
-@ 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 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 (|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.
-
-
-@<Hi\TeX\ auxiliar routines@>=
-
-static bool get_JPG_info(FILE *f, char *fn, pointer p)
-{ int pos, size;
-  double w,h;
-  double xppu,yppu;
-  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;
-  while (true)
-  { if (fseek(f,pos,SEEK_SET)!=0) return false;
-    img_buf_size=0;
-    GET_IMG_BUF(10);
-    if (img_buf[0] != 0xFF) return false; /* Not the start of a segment */
-    if ( (img_buf[1]&0xF0) == 0xC0) /* Start of Frame */
-    { h =(double)BigEndian16(5);
-      w =(double)BigEndian16(7);
-      if (unit==0)
-        return set_image_dimensions(p,w/xppu,h/yppu,false);
-      else if (unit==1)
-        return set_image_dimensions(p,72.27*w/xppu,72.27*h/yppu,true);
-      else if (unit==2)
-        return set_image_dimensions(p,(72.27/2.54)*w/xppu,(72.27/2.54)*h/yppu,true);
-      else
-        return false;
-    }
-    else
-    { size=  BigEndian16(2);
-      pos=pos+2+size;
-    }
-  }
-  return false;
-}
-@ There is still one image format missing: scalable vector graphics.
-In the moment, I tend not to include a further image format into
-the definition of the \HINT\ file format but instead use the
-PostScript subset that is used for Type 1 fonts to encode
-vector graphics. Any \HINT\ viewer must support Type 1
-PostScript fonts and hence it has already the necessary interpreter.
-So it seems reasonable to put the burden of converting vector graphics
-into a Type 1 PostScript font on the generator of \HINT\ files
-and keep the \HINT\ viewer as small and simple as possible.
-
-
 @*1 Links, Labels, and Outlines.
 The \HINT\ format knows about labels, links, and outlines.
 When generating a short format \HINT\ file, links are part of
@@ -30944,7 +30715,7 @@
     if (subtype(p)==baseline_node) goto recycle_p;
     else if (subtype(p)!=hset_node && subtype(p)!=vset_node &&
 	subtype(p)!=hpack_node && subtype(p)!=vpack_node &&
-        subtype(p)!=graf_node &&  subtype(p)!=disp_node &&
+        subtype(p)!=par_node &&  subtype(p)!=disp_node &&
 	subtype(p)!=image_node && subtype(p)!=align_node)
         break; /* else fall through */
     case hlist_node: case vlist_node: case rule_node:
@@ -31033,8 +30804,8 @@
       else if (subtype(p)==hset_node || subtype(p)==vset_node ||
 	       subtype(p)==hpack_node || subtype(p)==vpack_node)
         return list_ptr(p)!=null;
-      else if (subtype(p)==graf_node)
-        return graf_list(p)!=null;
+      else if (subtype(p)==par_node)
+        return par_list(p)!=null;
       else
         return false;
     default: return true;
@@ -31131,7 +30902,7 @@
           if (*p==null) return q;
         }
           break;
-        case graf_node: q=collect_output(&graf_list(r),q);
+        case par_node: q=collect_output(&par_list(r),q);
           break;
         case disp_node:
           if (display_left(r)) q=collect_output(&display_eqno(r),q);
@@ -31205,7 +30976,7 @@
       { case open_node: case write_node: case close_node:
           out_what(p);
           break;
-        case graf_node: execute_output(graf_list(p));
+        case par_node: execute_output(par_list(p));
           break;
         case disp_node:
           if (display_left(p)) execute_output(display_eqno(p));
@@ -31366,7 +31137,7 @@
 
 @<Incorporate the various extended boxes into an hbox@>=
 switch (subtype(p))
-{ case graf_node:  break;
+{ case par_node: if (depth(p)> d) d=depth(p); break;
   case disp_node:  break;
   case vpack_node:
   case hpack_node:
@@ -31376,10 +31147,18 @@
     repack=true; break;
   case stream_node: repack=true; break; /* streams are for page templates only */
   case image_node:
-    if (image_height(p)> h) h= image_height(p);
-    x= x+image_width(p);
-    o= image_stretch_order(p);total_stretch[o]= total_stretch[o]+image_stretch(p);
-    o= image_shrink_order(p);total_shrink[o]= total_shrink[o]+image_shrink(p);
+    if (image_xheight(p)!=null)
+    { pointer r=image_xheight(p);
+      if (xdimen_hfactor(r)==0 && xdimen_vfactor(r)==0)
+      { if (xdimen_width(r)> h) h= xdimen_width(r);}
+      else { repack=true; break;}
+    }
+    if (image_xwidth(p)!=null)
+    { pointer r=image_xwidth(p);
+      if (xdimen_hfactor(r)==0 && xdimen_vfactor(r)==0)
+        x = x+ xdimen_width(r);
+      else { repack=true; break;}
+    }
     break;
   default: break;
 }
@@ -31414,8 +31193,9 @@
           case unset_set_node: case unset_pack_node:
               goto repack;
           case whatsit_node:
-            if (subtype(p)==graf_node)
-			  goto repack;
+            if (subtype(p)==par_node)
+                          { if (depth(p) > d) d=depth(p);
+			    goto repack; }
 			else if (subtype(p)==disp_node )
 			  goto repack;
 			else if (subtype(p)==vpack_node )
@@ -31429,11 +31209,18 @@
 			else if (subtype(p)==stream_node )
 			  goto repack;
 			else if (subtype(p)==image_node)
-			{ glue_ord o;
-			  if (image_width(p)> w) w= image_width(p);
-			  x= x+d+image_height(p);d=0;
-			  o= image_stretch_order(p);total_stretch[o]= total_stretch[o]+image_stretch(p);
-	          o= image_shrink_order(p);total_shrink[o]= total_shrink[o]+image_shrink(p);
+			{ if (image_xwidth(p)!=null)
+                          { pointer r=image_xwidth(p);
+                            if (xdimen_hfactor(r)==0 && xdimen_vfactor(r)==0)
+                            { if (xdimen_width(r)> w) w= xdimen_width(r); }
+                            else goto repack;
+                          }
+                          if (image_xheight(p)!=null)
+                          { pointer r=image_xheight(p);
+                            if (xdimen_hfactor(r)==0 && xdimen_vfactor(r)==0)
+			    {  x= x+d+xdimen_width(p);d=0;}
+                            else goto repack;
+                          }
 			}
              break;
           case glue_node:
@@ -32230,12 +32017,10 @@
     xdimen_defined[i].h = ONE*xdimen_defaults[i].h;
     xdimen_defined[i].v = ONE*xdimen_defaults[i].v;
   }
+
 @ To obtain a reference number for an extended dimension, we search the
 array and if no match was found, we allocate a new entry,
 reallocating the array if needed.
-We use the variable |rover| to mark the place where the
-last entry was inserted, because
-quite often we repeatedly search for the same values.
 
 @<Hi\TeX\ auxiliar routines@>=
 int hget_xdimen_no(pointer p)
@@ -33445,13 +33230,13 @@
 the function |hout_param_list| is writing the parameter list to the output.
 \noindent
 @<cases to output whatsit content nodes@>=
-case graf_node:
+case par_node:
       { uint32_t pos, xpos, xsize;
         List l;
         pointer q;
         int n,m;
         Info i=b000;
-        q=graf_extent(p);
+        q=par_extent(p);
         n=hget_xdimen_no(q);
         if (n>=0) HPUT8(n);
 	else
@@ -33458,7 +33243,7 @@
         { xpos=hpos-hstart; hout_xdimen_node(p); xsize=(hpos-hstart)-xpos; i|=b100; }
         pos=hpos-hstart;
         l.k=param_kind;
-	m=hout_param_list(graf_params(p),pos,&l);
+	m=hout_param_list(par_params(p),pos,&l);
         if (m>=0)
         { if (i&b100)
           { HPUTX(1);
@@ -33470,9 +33255,7 @@
             HPUT8(m);
         }
         else i|=b010;
-        pos=hpos-hstart;
-        l.k=list_kind;
-        hout_list_node(graf_list(p),pos,&l);
+        hout_list_node2(par_list(p));
         tag=TAG(par_kind,i);
       }
     break;
@@ -33501,9 +33284,7 @@
           if (n>=0) HPUT8(n); else i|=b100;
           if (display_eqno(p)!=null && display_left(p))
 	  { hout_node(display_eqno(p)); i|=b010; }
-          pos=hpos-hstart;
-          l.k=list_kind;
-          hout_list_node(display_formula(p),pos,&l);
+          hout_list_node2(display_formula(p));
           if (display_eqno(p)!=null && !display_left(p))
 	  { hout_node(display_eqno(p)); i|=b001; }
           tag=TAG(math_kind,i);
@@ -33729,7 +33510,7 @@
   HPUT8(0); /* space for the size boundary byte*/
   l->p=hpos-hstart;
   while(p> mem_min)
-  { hdef_param_node(par_type(p),par_number(p),par_value(p).i);
+  { hdef_param_node(param_type(p),param_no(p),param_value(p).i);
     p=link(p);
   }
   l->s=(hpos-hstart)-l->p;
@@ -33773,15 +33554,21 @@
 \indent
 @<cases to output whatsit content nodes@>=
      case image_node:
-        { Image i;
-          i.n=image_no(p);
-          i.w=image_width(p);
-	  i.h=image_height(p);
-	  i.p.f=image_stretch(p)/(double)ONE;
-	  i.p.o=image_stretch_order(p);
-	  i.m.f=image_shrink(p)/(double)ONE;
-	  i.m.o=image_shrink_order(p);
-          tag=hput_image(&i);
+        { Xdimen w={0},h={0}; List d; uint32_t pos;
+          if (image_xwidth(p)!=null)
+          { pointer r=image_xwidth(p);
+            w.w=xdimen_width(r);
+            w.h=xdimen_hfactor(r)/(double)ONE;
+            w.v=xdimen_vfactor(r)/(double)ONE;
+          }
+          if (image_xheight(p)!=null)
+          { pointer r=image_xheight(p);
+            h.w=xdimen_width(r);
+            h.h=xdimen_hfactor(r)/(double)ONE;
+            h.v=xdimen_vfactor(r)/(double)ONE;
+          }
+          tag=TAG(image_kind,hput_image_spec(image_no(p),0.0,0,&w,0,&h));
+          hout_list_node2(image_alt(p)); /* should eventually become  a text */
 	}
         break;
 @*1 Text.
@@ -34745,8 +34532,8 @@
 to be used later in |fix_date_and_time|.
 
 To support reproducible output, the environment variable |SOURCE_DATE_EPOCH|
-needs to be checked. If it is set, it is an \ASCII\ representation of
-a \UNIX\ timestamp, defined as the number
+needs to be checked. If it is set, it is an ASCII representation of
+a UNIX timestamp, defined as the number
 of seconds, excluding leap seconds, since 01 Jan 1970 00:00:00 UTC.
 Its value is then used to initialize the |start_time| variable.
 

Added: trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt
===================================================================
(Binary files differ)

Index: trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt	2022-02-23 00:48:26 UTC (rev 62149)
+++ trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt	2022-02-23 17:27:52 UTC (rev 62150)

Property changes on: trunk/Build/source/texk/web2c/hitexdir/hitexman.hnt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/Build/source/texk/web2c/hitexdir/hitexman.pdf
===================================================================
(Binary files differ)



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