summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/hitexdir/hiparser.y
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/hitexdir/hiparser.y')
-rw-r--r--Build/source/texk/web2c/hitexdir/hiparser.y1111
1 files changed, 1111 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/hitexdir/hiparser.y b/Build/source/texk/web2c/hitexdir/hiparser.y
new file mode 100644
index 00000000000..dc1ab177ccb
--- /dev/null
+++ b/Build/source/texk/web2c/hitexdir/hiparser.y
@@ -0,0 +1,1111 @@
+ /*510:*/
+%{
+ #line 10212 "format.w"
+
+#include "hibasetypes.h"
+#include <string.h>
+#include <math.h>
+#include "hierror.h"
+#include "hiformat.h"
+#include "hiput.h"
+extern char**hfont_name;
+
+ /*356:*/
+uint32_t definition_bits[0x100/32][32]= {
+ #line 7578 "format.w"
+ {0}};
+
+#define SET_DBIT(N,K) ((N)>0xFF?1:(definition_bits[N/32][K] |= (1<<((N)&(32-1)))))
+#define GET_DBIT(N,K) ((N)>0xFF?1:((definition_bits[N/32][K]>>((N)&(32-1)))&1))
+#define DEF(D,K,N) (D).k= K; (D).n= (N);SET_DBIT((D).n,(D).k);\
+ DBG(DBGDEF,"Defining %s %d\n",definition_name[(D).k],(D).n);\
+ 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])
+ /*:356*/ /*360:*/
+#define DEF_REF(D,K,M,N) DEF(D,K,M);\
+if ((M)>max_default[K]) QUIT("Defining non default reference %d for %s",M,definition_name[K]); \
+if ((N)>max_fixed[K]) QUIT("Defining reference %d for %s by non fixed reference %d",M,definition_name[K],N);
+ /*:360*/
+
+extern void hset_entry(entry_t*e,uint16_t i,uint32_t size,
+uint32_t xsize,char*file_name);
+
+ /*423:*/
+#ifdef DEBUG
+#define YYDEBUG 1
+extern int yydebug;
+#else
+#define YYDEBUG 0
+#endif
+ /*:423*/
+extern int yylex(void);
+
+ /*352:*/
+void hset_max(kind_t k,int n)
+{
+ #line 7421 "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;
+ }
+ /*:352*/ /*363:*/
+void check_param_def(ref_t*df)
+{
+ #line 7727 "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]);
+ }
+ /*:363*/ /*422:*/
+extern int yylineno;
+int yyerror(const char*msg)
+{
+ #line 8799 "format.w"
+ QUIT(" in line %d %s",yylineno,msg);
+ return 0;
+ }
+ /*:422*/
+
+
+%}
+
+
+
+
+
+%union {
+ #line 10237 "format.w"
+ uint32_t u; int32_t i; char *s; float64_t f; glyph_t c;
+ dimen_t d;stretch_t st;xdimen_t xd;kern_t kt;
+ rule_t r;glue_t g;image_t x;
+ list_t l;box_t h;disc_t dc;lig_t lg;
+ ref_t rf;info_t info;order_t o;bool b;
+ }
+
+
+
+%error_verbose
+%start hint
+
+ /*2:*/
+%token START "<"
+%token END ">"
+%token GLYPH "glyph"
+%token <u> UNSIGNED
+%token <u> REFERENCE
+ /*:2*/ /*4:*/
+%type <u> start
+%type <c> glyph
+ /*:4*/ /*26:*/
+%token <i> SIGNED
+%type <i> integer
+ /*:26*/ /*33:*/
+%token <s> STRING
+ /*:33*/ /*47:*/
+%token <u> CHARCODE
+ /*:47*/ /*49:*/
+%type <s> string
+ /*:49*/ /*54:*/
+%token <f> FPNUM
+%type <f> number
+ /*:54*/ /*79:*/
+%token DIMEN "dimen"
+%token PT "pt"
+%token MM "mm"
+%token INCH "in"
+%type <d> dimension
+ /*:79*/ /*87:*/
+%token XDIMEN "xdimen"
+%token H "h"
+%token V "v"
+%type <xd> xdimen
+ /*:87*/ /*98:*/
+%token FIL "fil"
+%token FILL "fill"
+%token FILLL "filll"
+%type <st> stretch
+%type <o> order
+ /*:98*/ /*102:*/
+%token PENALTY "penalty"
+%token INTEGER "int"
+%type <i> penalty
+ /*:102*/ /*108:*/
+%token LANGUAGE "language"
+ /*:108*/ /*114:*/
+%token RULE "rule"
+%token RUNNING "|"
+%type <d> rule_dimension
+%type <r> rule
+ /*:114*/ /*123:*/
+%token KERN "kern"
+%token EXPLICIT "!"
+%type <b> explicit
+%type <kt> kern
+ /*:123*/ /*132:*/
+%token GLUE "glue"
+%token PLUS "plus"
+%token MINUS "minus"
+%type <g> glue
+%type <b> glue_node
+%type <st> plus minus
+ /*:132*/ /*141:*/
+%type <l> list
+%type <u> position content_list
+ /*:141*/ /*150:*/
+%token TXT_START TXT_END TXT_IGNORE
+%token TXT_FONT_GLUE TXT_FONT_HYPHEN
+%token <u> TXT_FONT TXT_LOCAL
+%token <rf> TXT_GLOBAL
+%token <u> TXT_CC
+%type <u> text
+ /*:150*/ /*161:*/
+%token HBOX "hbox"
+%token VBOX "vbox"
+%token SHIFTED "shifted"
+%type <info> box box_dimen box_shift box_glue_set
+
+ /*:161*/ /*169:*/
+%token HPACK "hpack"
+%token HSET "hset"
+%token VPACK "vpack"
+%token VSET "vset"
+%token DEPTH "depth"
+%token ADD "add"
+%token TO "to"
+%type <info> xbox box_goal hpack vpack
+ /*:169*/ /*174:*/
+%token LEADERS "leaders"
+%token ALIGN "align"
+%token CENTER "center"
+%token EXPAND "expand"
+%type <info> leaders
+%type <info> ltype
+ /*:174*/ /*181:*/
+%token BASELINE "baseline"
+%type <info> baseline
+ /*:181*/ /*188:*/
+%token LIGATURE "ligature"
+%type <u> lig_cc
+%type <lg> ligature
+%type <u> ref
+ /*:188*/ /*196:*/
+%token DISC "disc"
+%type <dc> disc
+%type <u> replace_count
+ /*:196*/ /*204:*/
+%token PAR "par"
+%type <info> par
+ /*:204*/ /*209:*/
+%token MATH "math"
+%type <info> math
+ /*:209*/ /*214:*/
+%token ON "on"
+%token OFF "off"
+%type <i> on_off
+ /*:214*/ /*218:*/
+%token ADJUST "adjust"
+ /*:218*/ /*222:*/
+%token TABLE "table"
+%token ITEM "item"
+%type <info> table span_count
+ /*:222*/ /*229:*/
+%token IMAGE "image"
+%type <x> image image_dimen
+ /*:229*/ /*246:*/
+%token LABEL "label"
+%token BOT "bot"
+%token MID "mid"
+%type <i> placement
+ /*:246*/ /*260:*/
+%token LINK "link"
+ /*:260*/ /*270:*/
+%token OUTLINE "outline"
+ /*:270*/ /*277:*/
+%token STREAM "stream"
+%token STREAMDEF "stream (definition)"
+%token FIRST "first"
+%token LAST "last"
+%token TOP "top"
+%token NOREFERENCE "*"
+%type <info> stream_type
+%type <u> stream_ref
+%type <rf> stream_def_node
+ /*:277*/ /*283:*/
+%type <info> stream
+ /*:283*/ /*287:*/
+%token PAGE "page"
+ /*:287*/ /*295:*/
+%token RANGE "range"
+ /*:295*/ /*322:*/
+%token DIRECTORY "directory"
+%token SECTION "entry"
+ /*:322*/ /*341:*/
+%token DEFINITIONS "definitions"
+ /*:341*/ /*349:*/
+%token MAX "max"
+ /*:349*/ /*358:*/
+
+%type <rf> def_node
+ /*:358*/ /*364:*/
+%token PARAM "param"
+%type <u> def_list
+%type <l> parameters
+ /*:364*/ /*373:*/
+%token FONT "font"
+%type <info> font font_head
+ /*:373*/ /*401:*/
+%token CONTENT "content"
+ /*:401*/
+%%
+ /*5:*/
+glyph:UNSIGNED REFERENCE{
+ #line 418 "format.w"
+ $$.c= $1;REF(font_kind,$2);$$.f= $2;};
+content_node:start GLYPH glyph END{
+ #line 419 "format.w"
+ hput_tags($1,hput_glyph(&($3)));};
+start:START{
+ #line 420 "format.w"
+ HPUTNODE;$$= (uint32_t)(hpos++-hstart);}
+ /*:5*/ /*29:*/
+integer:SIGNED |UNSIGNED{
+ #line 941 "format.w"
+ RNG("number",$1,0,0x7FFFFFFF);};
+ /*:29*/ /*38:*/
+glyph:CHARCODE REFERENCE{
+ #line 1082 "format.w"
+ $$.c= $1;REF(font_kind,$2);$$.f= $2;};
+ /*:38*/ /*50:*/
+string:STRING |CHARCODE{
+ #line 1187 "format.w"
+ static char s[2];
+ RNG("String element",$1,0x20,0x7E);
+ s[0]= $1;s[1]= 0;$$= s;};
+ /*:50*/ /*58:*/
+number:UNSIGNED{
+ #line 1339 "format.w"
+ $$= (float64_t)$1;} |SIGNED{
+ #line 1339 "format.w"
+ $$= (float64_t)$1;} |FPNUM;
+ /*:58*/ /*82:*/
+dimension:number PT{
+ #line 1682 "format.w"
+ $$= ROUND($1*ONE);RNG("Dimension",$$,-MAX_DIMEN,MAX_DIMEN);}
+ |number INCH{
+ #line 1683 "format.w"
+ $$= ROUND($1*ONE*72.27);RNG("Dimension",$$,-MAX_DIMEN,MAX_DIMEN);}
+ |number MM{
+ #line 1684 "format.w"
+ $$= ROUND($1*ONE*(72.27/25.4));RNG("Dimension",$$,-MAX_DIMEN,MAX_DIMEN);};
+ /*:82*/ /*89:*/
+xdimen:dimension number H number V{
+ #line 1762 "format.w"
+ $$.w= $1;$$.h= $2;$$.v= $4;}
+ |dimension number H{
+ #line 1763 "format.w"
+ $$.w= $1;$$.h= $2;$$.v= 0.0;}
+ |dimension number V{
+ #line 1764 "format.w"
+ $$.w= $1;$$.h= 0.0;$$.v= $2;}
+ |dimension{
+ #line 1765 "format.w"
+ $$.w= $1;$$.h= 0.0;$$.v= 0.0;};
+
+
+
+xdimen_node:start XDIMEN xdimen END{
+ #line 1769 "format.w"
+ hput_tags($1,hput_xdimen(&($3)));};
+ /*:89*/ /*100:*/
+
+order:PT{
+ #line 1947 "format.w"
+ $$= normal_o;} |FIL{
+ #line 1947 "format.w"
+ $$= fil_o;} |FILL{
+ #line 1947 "format.w"
+ $$= fill_o;} |FILLL{
+ #line 1947 "format.w"
+ $$= filll_o;};
+
+stretch:number order{
+ #line 1949 "format.w"
+ $$.f= $1;$$.o= $2;};
+ /*:100*/ /*104:*/
+penalty:integer{
+ #line 2003 "format.w"
+ RNG("Penalty",$1,-20000,+20000);$$= $1;};
+content_node:start PENALTY penalty END{
+ #line 2004 "format.w"
+ hput_tags($1,hput_int($3));};
+ /*:104*/ /*116:*/
+rule_dimension:dimension |RUNNING{
+ #line 2179 "format.w"
+ $$= RUNNING_DIMEN;};
+rule:rule_dimension rule_dimension rule_dimension
+{
+ #line 2181 "format.w"
+ $$.h= $1;$$.d= $2;$$.w= $3;
+ if($3==RUNNING_DIMEN&&($1==RUNNING_DIMEN||$2==RUNNING_DIMEN))
+ QUIT("Incompatible running dimensions 0x%x 0x%x 0x%x",$1,$2,$3);};
+rule_node:start RULE rule END{
+ #line 2184 "format.w"
+ hput_tags($1,hput_rule(&($3)));};
+content_node:rule_node;
+ /*:116*/ /*125:*/
+explicit:{
+ #line 2292 "format.w"
+ $$= false;} |EXPLICIT{
+ #line 2292 "format.w"
+ $$= true;};
+kern:explicit xdimen{
+ #line 2293 "format.w"
+ $$.x= $1;$$.d= $2;};
+content_node:start KERN kern END{
+ #line 2294 "format.w"
+ hput_tags($1,hput_kern(&($3)));}
+ /*:125*/ /*134:*/
+plus:{
+ #line 2504 "format.w"
+ $$.f= 0.0;$$.o= 0;} |PLUS stretch{
+ #line 2504 "format.w"
+ $$= $2;};
+minus:{
+ #line 2505 "format.w"
+ $$.f= 0.0;$$.o= 0;} |MINUS stretch{
+ #line 2505 "format.w"
+ $$= $2;};
+glue:xdimen plus minus{
+ #line 2506 "format.w"
+ $$.w= $1;$$.p= $2;$$.m= $3;};
+content_node:start GLUE glue END{
+ #line 2507 "format.w"
+ if(ZERO_GLUE($3)){HPUT8(zero_skip_no);
+ hput_tags($1,TAG(glue_kind,0));}else hput_tags($1,hput_glue(&($3)));};
+glue_node:start GLUE glue END
+{
+ #line 2510 "format.w"
+ if(ZERO_GLUE($3)){hpos--;$$= false;}
+ else{hput_tags($1,hput_glue(&($3)));$$= true;}};
+ /*:134*/ /*142:*/
+position:{
+ #line 2786 "format.w"
+ $$= hpos-hstart;};
+content_list:position
+ |content_list content_node;
+estimate:{
+ #line 2789 "format.w"
+ hpos+= 2;}
+ |UNSIGNED{
+ #line 2790 "format.w"
+ hpos+= hsize_bytes($1)+1;};
+list:start estimate content_list END
+{
+ #line 2792 "format.w"
+ $$.k= list_kind;$$.p= $3;$$.s= (hpos-hstart)-$3;
+ hput_tags($1,hput_list($1+1,&($$)));};
+ /*:142*/ /*153:*/
+list:TXT_START position
+{
+ #line 3199 "format.w"
+ hpos+= 4;}
+text TXT_END
+{
+ #line 3201 "format.w"
+ $$.k= text_kind;$$.p= $4;$$.s= (hpos-hstart)-$4;
+ hput_tags($2,hput_list($2+1,&($$)));};
+text:position |text txt;
+
+txt:TXT_CC{
+ #line 3205 "format.w"
+ hput_txt_cc($1);}
+ |TXT_FONT{
+ #line 3206 "format.w"
+ REF(font_kind,$1);hput_txt_font($1);}
+ |TXT_GLOBAL{
+ #line 3207 "format.w"
+ REF($1.k,$1.n);hput_txt_global(&($1));}
+ |TXT_LOCAL{
+ #line 3208 "format.w"
+ RNG("Font parameter",$1,0,11);hput_txt_local($1);}
+ |TXT_FONT_GLUE{
+ #line 3209 "format.w"
+ HPUTX(1);HPUT8(txt_glue);}
+ |TXT_FONT_HYPHEN{
+ #line 3210 "format.w"
+ HPUTX(1);HPUT8(txt_hyphen);}
+ |TXT_IGNORE{
+ #line 3211 "format.w"
+ HPUTX(1);HPUT8(txt_ignore);}
+ |{
+ #line 3212 "format.w"
+ HPUTX(1);HPUT8(txt_node);}content_node;
+ /*:153*/ /*163:*/
+
+box_dimen:dimension dimension dimension
+{
+ #line 3470 "format.w"
+ $$= hput_box_dimen($1,$2,$3);};
+box_shift:{
+ #line 3471 "format.w"
+ $$= b000;}
+ |SHIFTED dimension{
+ #line 3472 "format.w"
+ $$= hput_box_shift($2);};
+
+box_glue_set:{
+ #line 3474 "format.w"
+ $$= b000;}
+ |PLUS stretch{
+ #line 3475 "format.w"
+ $$= hput_box_glue_set(+1,$2.f,$2.o);}
+ |MINUS stretch{
+ #line 3476 "format.w"
+ $$= hput_box_glue_set(-1,$2.f,$2.o);};
+
+
+box:box_dimen box_shift box_glue_set list{
+ #line 3479 "format.w"
+ $$= $1 |$2 |$3;};
+
+hbox_node:start HBOX box END{
+ #line 3481 "format.w"
+ hput_tags($1,TAG(hbox_kind,$3));};
+vbox_node:start VBOX box END{
+ #line 3482 "format.w"
+ hput_tags($1,TAG(vbox_kind,$3));};
+content_node:hbox_node |vbox_node;
+ /*:163*/ /*171:*/
+box_flex:plus minus{
+ #line 3663 "format.w"
+ hput_stretch(&($1));hput_stretch(&($2));};
+xbox:box_dimen box_shift box_flex xdimen_ref list{
+ #line 3664 "format.w"
+ $$= $1 |$2;}
+ |box_dimen box_shift box_flex xdimen_node list{
+ #line 3665 "format.w"
+ $$= $1 |$2 |b100;};
+
+box_goal:TO xdimen_ref{
+ #line 3667 "format.w"
+ $$= b000;}
+ |ADD xdimen_ref{
+ #line 3668 "format.w"
+ $$= b001;}
+ |TO xdimen_node{
+ #line 3669 "format.w"
+ $$= b100;}
+ |ADD xdimen_node{
+ #line 3670 "format.w"
+ $$= b101;};
+
+hpack:box_shift box_goal list{
+ #line 3672 "format.w"
+ $$= $2;};
+vpack:box_shift MAX DEPTH dimension{
+ #line 3673 "format.w"
+ HPUT32($4);}box_goal list{
+ #line 3673 "format.w"
+ $$= $1 |$6;};
+
+vxbox_node:start VSET xbox END{
+ #line 3675 "format.w"
+ hput_tags($1,TAG(vset_kind,$3));}
+ |start VPACK vpack END{
+ #line 3676 "format.w"
+ hput_tags($1,TAG(vpack_kind,$3));};
+
+
+hxbox_node:start HSET xbox END{
+ #line 3679 "format.w"
+ hput_tags($1,TAG(hset_kind,$3));}
+ |start HPACK hpack END{
+ #line 3680 "format.w"
+ hput_tags($1,TAG(hpack_kind,$3));};
+
+content_node:vxbox_node |hxbox_node;
+ /*:171*/ /*176:*/
+ltype:{
+ #line 3790 "format.w"
+ $$= 1;} |ALIGN{
+ #line 3790 "format.w"
+ $$= 1;} |CENTER{
+ #line 3790 "format.w"
+ $$= 2;} |EXPAND{
+ #line 3790 "format.w"
+ $$= 3;};
+leaders:glue_node ltype rule_node{
+ #line 3791 "format.w"
+ if($1)$$= $2 |b100;else $$= $2;}
+ |glue_node ltype hbox_node{
+ #line 3792 "format.w"
+ if($1)$$= $2 |b100;else $$= $2;}
+ |glue_node ltype vbox_node{
+ #line 3793 "format.w"
+ if($1)$$= $2 |b100;else $$= $2;};
+content_node:start LEADERS leaders END{
+ #line 3794 "format.w"
+ hput_tags($1,TAG(leaders_kind,$3));}
+ /*:176*/ /*183:*/
+baseline:dimension{
+ #line 3900 "format.w"
+ if($1!=0)HPUT32($1);}
+glue_node glue_node{
+ #line 3901 "format.w"
+ $$= b000;if($1!=0)$$ |= b001;
+ if($3)$$ |= b100;
+ if($4)$$ |= b010;
+ };
+content_node:start BASELINE baseline END
+{
+ #line 3906 "format.w"
+ if($3==b000)HPUT8(0);hput_tags($1,TAG(baseline_kind,$3));};
+ /*:183*/ /*190:*/
+cc_list: |cc_list TXT_CC{
+ #line 3989 "format.w"
+ hput_utf8($2);};
+lig_cc:UNSIGNED{
+ #line 3990 "format.w"
+ RNG("UTF-8 code",$1,0,0x1FFFFF);$$= hpos-hstart;hput_utf8($1);};
+lig_cc:CHARCODE{
+ #line 3991 "format.w"
+ $$= hpos-hstart;hput_utf8($1);};
+ref:REFERENCE{
+ #line 3992 "format.w"
+ HPUT8($1);$$= $1;};
+ligature:ref{
+ #line 3993 "format.w"
+ REF(font_kind,$1);}lig_cc TXT_START cc_list TXT_END
+{
+ #line 3994 "format.w"
+ $$.f= $1;$$.l.p= $3;$$.l.s= (hpos-hstart)-$3;
+ RNG("Ligature size",$$.l.s,0,255);};
+content_node:start LIGATURE ligature END{
+ #line 3996 "format.w"
+ hput_tags($1,hput_ligature(&($3)));};
+ /*:190*/ /*198:*/
+replace_count:explicit{
+ #line 4106 "format.w"
+ if($1){$$= 0x80;HPUT8(0x80);}else $$= 0x00;}
+ |explicit UNSIGNED{
+ #line 4107 "format.w"
+ RNG("Replace count",$2,0,31);
+ $$= ($2) |(($1)?0x80:0x00);if($$!=0)HPUT8($$);};
+disc:replace_count list list{
+ #line 4109 "format.w"
+ $$.r= $1;$$.p= $2;$$.q= $3;
+ if($3.s==0){hpos= hpos-2;if($2.s==0)hpos= hpos-2;}}
+ |replace_count list{
+ #line 4111 "format.w"
+ $$.r= $1;$$.p= $2;if($2.s==0)hpos= hpos-2;$$.q.s= 0;}
+ |replace_count{
+ #line 4112 "format.w"
+ $$.r= $1;$$.p.s= 0;$$.q.s= 0;};
+
+
+disc_node:start DISC disc END
+{
+ #line 4116 "format.w"
+ hput_tags($1,hput_disc(&($3)));};
+
+content_node:disc_node;
+ /*:198*/ /*206:*/
+par_dimen:xdimen{
+ #line 4268 "format.w"
+ hput_xdimen_node(&($1));};
+par:xdimen_ref param_ref list{
+ #line 4269 "format.w"
+ $$= b000;}
+ |xdimen_ref empty_param_list non_empty_param_list list{
+ #line 4270 "format.w"
+ $$= b010;}
+ |xdimen_ref empty_param_list list{
+ #line 4271 "format.w"
+ $$= b010;}
+ |xdimen param_ref{
+ #line 4272 "format.w"
+ hput_xdimen_node(&($1));}list{
+ #line 4272 "format.w"
+ $$= b100;}
+ |par_dimen empty_param_list non_empty_param_list list{
+ #line 4273 "format.w"
+ $$= b110;}
+ |par_dimen empty_param_list list{
+ #line 4274 "format.w"
+ $$= b110;};
+
+content_node:start PAR par END{
+ #line 4276 "format.w"
+ hput_tags($1,TAG(par_kind,$3));};
+ /*:206*/ /*211:*/
+math:param_ref list{
+ #line 4342 "format.w"
+ $$= b000;}
+ |param_ref list hbox_node{
+ #line 4343 "format.w"
+ $$= b001;}
+ |param_ref hbox_node list{
+ #line 4344 "format.w"
+ $$= b010;}
+ |empty_param_list list{
+ #line 4345 "format.w"
+ $$= b100;}
+ |empty_param_list list hbox_node{
+ #line 4346 "format.w"
+ $$= b101;}
+ |empty_param_list hbox_node list{
+ #line 4347 "format.w"
+ $$= b110;}
+ |empty_param_list non_empty_param_list list{
+ #line 4348 "format.w"
+ $$= b100;}
+ |empty_param_list non_empty_param_list list hbox_node{
+ #line 4349 "format.w"
+ $$= b101;}
+ |empty_param_list non_empty_param_list hbox_node list{
+ #line 4350 "format.w"
+ $$= b110;};
+
+content_node:start MATH math END{
+ #line 4352 "format.w"
+ hput_tags($1,TAG(math_kind,$3));};
+ /*:211*/ /*216:*/
+on_off:ON{
+ #line 4402 "format.w"
+ $$= 1;} |OFF{
+ #line 4402 "format.w"
+ $$= 0;};
+math:on_off{
+ #line 4403 "format.w"
+ $$= b011 |($1<<2);};
+ /*:216*/ /*220:*/
+content_node:start ADJUST list END{
+ #line 4434 "format.w"
+ hput_tags($1,TAG(adjust_kind,1));};
+ /*:220*/ /*224:*/
+span_count:UNSIGNED{
+ #line 4533 "format.w"
+ $$= hput_span_count($1);};
+content_node:start ITEM content_node END{
+ #line 4534 "format.w"
+ hput_tags($1,TAG(item_kind,1));};
+content_node:start ITEM span_count content_node END{
+ #line 4535 "format.w"
+ hput_tags($1,TAG(item_kind,$3));};
+content_node:start ITEM list END{
+ #line 4536 "format.w"
+ hput_tags($1,TAG(item_kind,b000));};
+
+table:H box_goal list list{
+ #line 4538 "format.w"
+ $$= $2;};
+table:V box_goal list list{
+ #line 4539 "format.w"
+ $$= $2 |b010;};
+
+content_node:start TABLE table END{
+ #line 4541 "format.w"
+ hput_tags($1,TAG(table_kind,$3));};
+ /*:224*/ /*231:*/
+image_dimen:dimension dimension{
+ #line 4629 "format.w"
+ $$.w= $1;$$.h= $2;} |{
+ #line 4629 "format.w"
+ $$.w= $$.h= 0;};
+image:UNSIGNED image_dimen plus minus{
+ #line 4630 "format.w"
+ $$.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{
+ #line 4631 "format.w"
+ hput_tags($1,hput_image(&($3)));}
+ /*:231*/ /*241:*/
+max_value:OUTLINE UNSIGNED{
+ #line 4868 "format.w"
+ max_outline= $2;
+ RNG("max outline",max_outline,0,0xFFFF);
+ DBG(DBGDEF |DBGLABEL,"Setting max outline to %d\n",max_outline);
+ };
+ /*:241*/ /*248:*/
+placement:TOP{
+ #line 4960 "format.w"
+ $$= LABEL_TOP;} |BOT{
+ #line 4960 "format.w"
+ $$= LABEL_BOT;} |MID{
+ #line 4960 "format.w"
+ $$= LABEL_MID;} |{
+ #line 4960 "format.w"
+ $$= LABEL_MID;};
+content_node:START LABEL REFERENCE placement END
+{
+ #line 4962 "format.w"
+ hset_label($3,$4);}
+ /*:248*/ /*262:*/
+content_node:start LINK REFERENCE on_off END
+{
+ #line 5220 "format.w"
+ hput_tags($1,hput_link($3,$4));};
+ /*:262*/ /*272:*/
+def_node:START OUTLINE REFERENCE integer position list END{
+ #line 5350 "format.w"
+
+ static int outline_no= -1;
+ $$.k= outline_kind;$$.n= $3;
+ if($6.s==0)QUIT("Outline with empty title in line %d",yylineno);
+ outline_no++;
+ hset_outline(outline_no,$3,$4,$5);
+ };
+ /*:272*/ /*279:*/
+stream_link:ref{
+ #line 5765 "format.w"
+ REF_RNG(stream_kind,$1);} |NOREFERENCE{
+ #line 5765 "format.w"
+ HPUT8(255);};
+stream_split:stream_link stream_link UNSIGNED{
+ #line 5766 "format.w"
+ RNG("split ratio",$3,0,1000);HPUT16($3);};
+stream_info:xdimen_node UNSIGNED{
+ #line 5767 "format.w"
+ RNG("magnification factor",$2,0,1000);HPUT16($2);}stream_split;
+
+stream_type:stream_info{
+ #line 5769 "format.w"
+ $$= 0;} |FIRST{
+ #line 5769 "format.w"
+ $$= 1;} |LAST{
+ #line 5769 "format.w"
+ $$= 2;} |TOP{
+ #line 5769 "format.w"
+ $$= 3;};
+
+stream_def_node:start STREAMDEF ref stream_type
+list xdimen_node glue_node list glue_node END
+{
+ #line 5773 "format.w"
+ DEF($$,stream_kind,$3);hput_tags($1,TAG(stream_kind,$4 |b100));};
+
+stream_ins_node:start STREAMDEF ref END
+{
+ #line 5776 "format.w"
+ RNG("Stream insertion",$3,0,max_ref[stream_kind]);hput_tags($1,TAG(stream_kind,b100));};
+
+content_node:stream_def_node |stream_ins_node;
+ /*:279*/ /*284:*/
+stream:empty_param_list list{
+ #line 5871 "format.w"
+ $$= b010;}
+ |empty_param_list non_empty_param_list list{
+ #line 5872 "format.w"
+ $$= b010;}
+ |param_ref list{
+ #line 5873 "format.w"
+ $$= b000;};
+content_node:start STREAM stream_ref stream END
+{
+ #line 5875 "format.w"
+ hput_tags($1,TAG(stream_kind,$4));};
+ /*:284*/ /*289:*/
+page_priority:{
+ #line 5978 "format.w"
+ HPUT8(1);}
+ |UNSIGNED{
+ #line 5979 "format.w"
+ RNG("page priority",$1,0,255);HPUT8($1);};
+
+stream_def_list: |stream_def_list stream_def_node;
+
+page:string{
+ #line 5983 "format.w"
+ hput_string($1);}page_priority glue_node dimension{
+ #line 5983 "format.w"
+ HPUT32($5);}
+xdimen_node xdimen_node
+list stream_def_list;
+ /*:289*/ /*297:*/
+
+content_node:START RANGE REFERENCE ON END{
+ #line 6095 "format.w"
+ REF(page_kind,$3);hput_range($3,true);}
+ |START RANGE REFERENCE OFF END{
+ #line 6096 "format.w"
+ REF(page_kind,$3);hput_range($3,false);};
+ /*:297*/ /*308:*/
+hint:directory_section definition_section content_section;
+ /*:308*/ /*324:*/
+directory_section:START DIRECTORY UNSIGNED{
+ #line 6786 "format.w"
+ new_directory($3+1);new_output_buffers();}entry_list END;
+entry_list: |entry_list entry;
+entry:START SECTION UNSIGNED string END
+{
+ #line 6789 "format.w"
+ RNG("Section number",$3,3,max_section_no);hset_entry(&(dir[$3]),$3,0,0,$4);};
+ /*:324*/ /*343:*/
+definition_section:START DEFINITIONS{
+ #line 7277 "format.w"
+ hput_definitions_start();}
+max_definitions definition_list
+END{
+ #line 7279 "format.w"
+ hput_definitions_end();};
+definition_list: |definition_list def_node;
+ /*:343*/ /*351:*/
+max_definitions:START MAX max_list END
+{
+ #line 7395 "format.w"
+ /*245:*/
+ if(max_ref[label_kind]>=0)
+ ALLOCATE(labels,max_ref[label_kind]+1,label_t);
+ /*:245*/ /*266:*/
+ if(max_outline>=0)
+ ALLOCATE(outlines,max_outline+1,outline_t);
+ /*:266*/ /*293:*/
+ ALLOCATE(page_on,max_ref[page_kind]+1,int);
+ ALLOCATE(range_pos,2*(max_ref[range_kind]+1),range_pos_t);
+ /*:293*/ /*357:*/
+ 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;
+ definition_bits[0][glue_kind]= (1<<(MAX_GLUE_DEFAULT+1))-1;
+ definition_bits[0][baseline_kind]= (1<<(MAX_BASELINE_DEFAULT+1))-1;
+ 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;
+ /*:357*/ /*372:*/
+ ALLOCATE(hfont_name,max_ref[font_kind]+1,char*);
+ /*:372*/hput_max_definitions();};
+
+max_list: |max_list START max_value END;
+
+max_value:FONT UNSIGNED{
+ #line 7399 "format.w"
+ hset_max(font_kind,$2);}
+ |INTEGER UNSIGNED{
+ #line 7400 "format.w"
+ hset_max(int_kind,$2);}
+ |DIMEN UNSIGNED{
+ #line 7401 "format.w"
+ hset_max(dimen_kind,$2);}
+ |LIGATURE UNSIGNED{
+ #line 7402 "format.w"
+ hset_max(ligature_kind,$2);}
+ |DISC UNSIGNED{
+ #line 7403 "format.w"
+ hset_max(disc_kind,$2);}
+ |GLUE UNSIGNED{
+ #line 7404 "format.w"
+ hset_max(glue_kind,$2);}
+ |LANGUAGE UNSIGNED{
+ #line 7405 "format.w"
+ hset_max(language_kind,$2);}
+ |RULE UNSIGNED{
+ #line 7406 "format.w"
+ hset_max(rule_kind,$2);}
+ |IMAGE UNSIGNED{
+ #line 7407 "format.w"
+ hset_max(image_kind,$2);}
+ |LEADERS UNSIGNED{
+ #line 7408 "format.w"
+ hset_max(leaders_kind,$2);}
+ |BASELINE UNSIGNED{
+ #line 7409 "format.w"
+ hset_max(baseline_kind,$2);}
+ |XDIMEN UNSIGNED{
+ #line 7410 "format.w"
+ hset_max(xdimen_kind,$2);}
+ |PARAM UNSIGNED{
+ #line 7411 "format.w"
+ hset_max(param_kind,$2);}
+ |STREAMDEF UNSIGNED{
+ #line 7412 "format.w"
+ hset_max(stream_kind,$2);}
+ |PAGE UNSIGNED{
+ #line 7413 "format.w"
+ hset_max(page_kind,$2);}
+ |RANGE UNSIGNED{
+ #line 7414 "format.w"
+ hset_max(range_kind,$2);}
+ |LABEL UNSIGNED{
+ #line 7415 "format.w"
+ hset_max(label_kind,$2);};
+
+ /*:351*/ /*359:*/
+def_node:
+start FONT ref font END{
+ #line 7612 "format.w"
+ DEF($$,font_kind,$3);hput_tags($1,$4);}
+ |start INTEGER ref integer END{
+ #line 7613 "format.w"
+ DEF($$,int_kind,$3);hput_tags($1,hput_int($4));}
+ |start DIMEN ref dimension END{
+ #line 7614 "format.w"
+ DEF($$,dimen_kind,$3);hput_tags($1,hput_dimen($4));}
+ |start LANGUAGE ref string END{
+ #line 7615 "format.w"
+ DEF($$,language_kind,$3);hput_string($4);hput_tags($1,TAG(language_kind,0));}
+ |start GLUE ref glue END{
+ #line 7616 "format.w"
+ DEF($$,glue_kind,$3);hput_tags($1,hput_glue(&($4)));}
+ |start XDIMEN ref xdimen END{
+ #line 7617 "format.w"
+ DEF($$,xdimen_kind,$3);hput_tags($1,hput_xdimen(&($4)));}
+ |start RULE ref rule END{
+ #line 7618 "format.w"
+ DEF($$,rule_kind,$3);hput_tags($1,hput_rule(&($4)));}
+ |start LEADERS ref leaders END{
+ #line 7619 "format.w"
+ DEF($$,leaders_kind,$3);hput_tags($1,TAG(leaders_kind,$4));}
+ |start BASELINE ref baseline END{
+ #line 7620 "format.w"
+ DEF($$,baseline_kind,$3);hput_tags($1,TAG(baseline_kind,$4));}
+ |start LIGATURE ref ligature END{
+ #line 7621 "format.w"
+ DEF($$,ligature_kind,$3);hput_tags($1,hput_ligature(&($4)));}
+ |start DISC ref disc END{
+ #line 7622 "format.w"
+ DEF($$,disc_kind,$3);hput_tags($1,hput_disc(&($4)));}
+ |start IMAGE ref image END{
+ #line 7623 "format.w"
+ DEF($$,image_kind,$3);hput_tags($1,hput_image(&($4)));}
+ |start PARAM ref parameters END{
+ #line 7624 "format.w"
+ DEF($$,param_kind,$3);hput_tags($1,hput_list($1+2,&($4)));}
+ |start PAGE ref page END{
+ #line 7625 "format.w"
+ DEF($$,page_kind,$3);hput_tags($1,TAG(page_kind,0));};
+ /*:359*/ /*361:*/
+def_node:
+start INTEGER ref ref END{
+ #line 7644 "format.w"
+ DEF_REF($$,int_kind,$3,$4);hput_tags($1,TAG(int_kind,0));}
+ |start DIMEN ref ref END{
+ #line 7645 "format.w"
+ DEF_REF($$,dimen_kind,$3,$4);hput_tags($1,TAG(dimen_kind,0));}
+ |start GLUE ref ref END{
+ #line 7646 "format.w"
+ DEF_REF($$,glue_kind,$3,$4);hput_tags($1,TAG(glue_kind,0));};
+ /*:361*/ /*366:*/
+def_list:position
+ |def_list def_node{
+ #line 7760 "format.w"
+ check_param_def(&($2));};
+parameters:estimate def_list{
+ #line 7761 "format.w"
+ $$.p= $2;$$.k= param_kind;$$.s= (hpos-hstart)-$2;};
+ /*:366*/ /*367:*/
+empty_param_list:position{
+ #line 7782 "format.w"
+ HPUTX(2);hpos++;hput_tags($1,TAG(param_kind,1));};
+non_empty_param_list:start PARAM{
+ #line 7783 "format.w"
+ hpos= hpos-2;}parameters END
+{
+ #line 7784 "format.w"
+ hput_tags($1-2,hput_list($1-1,&($4)));};
+ /*:367*/ /*375:*/
+
+font:font_head font_param_list;
+
+font_head:string dimension UNSIGNED UNSIGNED
+{
+ #line 7926 "format.w"
+ uint8_t f= $<u>0;SET_DBIT(f,font_kind);hfont_name[f]= strdup($1);$$= hput_font_head(f,hfont_name[f],$2,$3,$4);};
+
+font_param_list:glue_node disc_node |font_param_list font_param;
+
+font_param:
+start PENALTY fref penalty END{
+ #line 7931 "format.w"
+ hput_tags($1,hput_int($4));}
+ |start KERN fref kern END{
+ #line 7932 "format.w"
+ hput_tags($1,hput_kern(&($4)));}
+ |start LIGATURE fref ligature END{
+ #line 7933 "format.w"
+ hput_tags($1,hput_ligature(&($4)));}
+ |start DISC fref disc END{
+ #line 7934 "format.w"
+ hput_tags($1,hput_disc(&($4)));}
+ |start GLUE fref glue END{
+ #line 7935 "format.w"
+ hput_tags($1,hput_glue(&($4)));}
+ |start LANGUAGE fref string END{
+ #line 7936 "format.w"
+ hput_string($4);hput_tags($1,TAG(language_kind,0));}
+ |start RULE fref rule END{
+ #line 7937 "format.w"
+ hput_tags($1,hput_rule(&($4)));}
+ |start IMAGE fref image END{
+ #line 7938 "format.w"
+ hput_tags($1,hput_image(&($4)));};
+
+fref:ref{
+ #line 7940 "format.w"
+ RNG("Font parameter",$1,0,MAX_FONT_PARAMS);};
+ /*:375*/ /*378:*/
+xdimen_ref:ref{
+ #line 8013 "format.w"
+ REF(xdimen_kind,$1);};
+param_ref:ref{
+ #line 8014 "format.w"
+ REF(param_kind,$1);};
+stream_ref:ref{
+ #line 8015 "format.w"
+ REF_RNG(stream_kind,$1);};
+
+
+content_node:
+start PENALTY ref END{
+ #line 8019 "format.w"
+ REF(penalty_kind,$3);hput_tags($1,TAG(penalty_kind,0));}
+ |start KERN explicit ref END
+{
+ #line 8021 "format.w"
+ REF(dimen_kind,$4);hput_tags($1,TAG(kern_kind,($3)?b100:b000));}
+ |start KERN explicit XDIMEN ref END
+{
+ #line 8023 "format.w"
+ REF(xdimen_kind,$5);hput_tags($1,TAG(kern_kind,($3)?b101:b001));}
+ |start GLUE ref END{
+ #line 8024 "format.w"
+ REF(glue_kind,$3);hput_tags($1,TAG(glue_kind,0));}
+ |start LIGATURE ref END{
+ #line 8025 "format.w"
+ REF(ligature_kind,$3);hput_tags($1,TAG(ligature_kind,0));}
+ |start DISC ref END{
+ #line 8026 "format.w"
+ REF(disc_kind,$3);hput_tags($1,TAG(disc_kind,0));}
+ |start RULE ref END{
+ #line 8027 "format.w"
+ REF(rule_kind,$3);hput_tags($1,TAG(rule_kind,0));}
+ |start IMAGE ref END{
+ #line 8028 "format.w"
+ REF(image_kind,$3);hput_tags($1,TAG(image_kind,0));}
+ |start LEADERS ref END{
+ #line 8029 "format.w"
+ REF(leaders_kind,$3);hput_tags($1,TAG(leaders_kind,0));}
+ |start BASELINE ref END{
+ #line 8030 "format.w"
+ REF(baseline_kind,$3);hput_tags($1,TAG(baseline_kind,0));}
+ |start LANGUAGE REFERENCE END{
+ #line 8031 "format.w"
+ REF(language_kind,$3);hput_tags($1,hput_language($3));};
+
+glue_node:start GLUE ref END{
+ #line 8033 "format.w"
+ REF(glue_kind,$3);
+ if($3==zero_skip_no){hpos= hpos-2;$$= false;}
+ else{hput_tags($1,TAG(glue_kind,0));$$= true;}};
+
+ /*:378*/ /*403:*/
+content_section:START CONTENT{
+ #line 8464 "format.w"
+ hput_content_start();}content_list END
+{
+ #line 8465 "format.w"
+ hput_content_end();hput_range_defs();hput_label_defs();};
+ /*:403*/
+%%
+ /*:510*/