CSS style declaration bytecode
==============================

Format
------

<opcode+flags+value> [<parameters>]

<opcode+flags+value> is 32 bits wide:
	bits 18-31: value
	bits 10-17 : flags
	bits 0-9  : opcode

The 8 bits of flag data are defined as follows:
	bits 2-7: MBZ
	bit 1   : value is inherit
	bit 0   : value is important

The 14 bits of value are opcode-specific.

Parameters are opcode-specific. Each parameter must begin on a 4 byte boundary.

Datatype storage
----------------

All numeric values are stored in a 32bit wide field. This field contains
a fixed point value with 22 bits assigned to the integer part and 10 bits
assigned to the fractional part.

Strings are stored as a pointer to an interned string.
The pointer's width is the native width of a pointer on the platform.

CSS dimensions are stored as two 32bit values: <length, units>. 
Length is a 32bit numeric value (as described above) and unit is as follows:

	bit 8 clear => length unit
		bits 9-31: MBZ
		bits 0-7 :
			00000000 => px
			00000001 => ex
			00000010 => em
			00000011 => in
			00000100 => cm
			00000101 => mm
			00000110 => pt
			00000111 => pc

	bit 8 set => percentage unit
		bits 9-31: MBZ
		bits 0-7 : MBZ

	bit 9 set => angle unit
		bits 10-31: MBZ
		bit 8     : MBZ
		bits 0-7  :
			00000000 => deg
			00000001 => grad
			00000010 => rad

	bit 10 set => time unit
		bits 11-31: MBZ
		bits 8-9  : MBZ
		bits 0-7  :
			00000000 => ms
			00000001 => s

	bit 11 set => frequency unit
		bits 12-31: MBZ
		bits 8-10 : MBZ
		bits 0-7  :
			00000000 => Hz
			00000001 => kHz

CSS colours are stored as one 32bit value:

	bits 24-31: Red component
	bits 16-23: Green component
	bits 8-15 : Blue component
	bits 0-7  : Alpha component

Shorthand properties
--------------------

The CSS shorthand properties are handled by decomposing them to their
component parts, and then creating bytecode for these.

For example, "background: red none no-repeat scroll left top !important;" would
be decomposed to:

  background-color: red !important;
  background-image: none !important;
  background-repeat: no-repeat !important;
  background-attachment: scroll !important;
  background-position: left top !important;

and bytecode generated for each of these properties.

The full list of CSS 2.1 shorthand properties is:

  background
  border-color
  border-style
  border-{top,right,bottom,left}
  border-width
  border
  cue
  font
  list-style
  margin
  outline
  padding
  pause

Opcodes
-------

00 - azimuth
	<value> (14bits) :
		bits 8-13: MBZ
		bit 7 set => angle follows.
			bits 0-6: MBZ
		bit 6 set => relative movement:
			bit 7   : MBZ
			bits 1-5: MBZ
			bit 0   : set => rightwards, clear => leftwards
		bits 6 & 7 clear => keyword position:
			bit 5   : set => behind, clear => in front
			bits 0-4:
				00000  => left-side
				00001  => far-left
				00010  => left
				00011  => center-left
				00100  => center
				00101  => center-right
				00110  => right
				00111  => far-right
				01000  => right-side
				other => Reserved for future expansion.

01 - background-attachment
	<value> (14bits) :
		0     => fixed
		1     => scroll
		other => Reserved for future expansion.

02 - background-color
	<value> (14bits) :
		bit 8-13: MBZ
		bit 7 set => colour follows.
			bits 0-6: MBZ
		bit 7 clear => keyword colour:
			bits 1-6: MBZ
			bit 0   : clear => transparent, set => rffe.

03 - background-image
	<value> (14bits) :
		bits 8-13: MBZ
		bit 7 set => uri string follows.
			bits 0-6: MBZ
		bit 7 clear => keyword:
			bits 1-6: MBZ
			bit 0   : clear => none, set => rffe.

04 - background-position
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 : 
			bit 7: set => percentage or length unit follows
					bits 4-6: MBZ
			       clear => keywords:
					bits 4-6:
						000   => center
						001   => right
						010   => left
						other => rffe
			bit 3: set => percentage or length unit follows
					bits 0-2: MBZ
			       clear => keywords:
					bits 0-2:
						000   => center
						001   => bottom
						010   => top
						other => rffe

05 - background-repeat
	<value> (14bits) :
		0     => no-repeat
		1     => repeat-x
		2     => repeat-y
		3     => repeat
		other => Reserved for future expansion.

06 - border-collapse
	<value> (14bits) :
		0     => separate
		1     => collapse
		other => Reserved for future expansion.

07 - border-spacing
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => two lengths follow
					bits 0-6: MBZ
			       clear => Reserved for future expansion.
			       		bits 0-6: MBZ

08 - border-top-color
09 - border-right-color
0a - border-bottom-color
0b - border-left-color
	<value> (14bits) :
		bits 8-13: MBZ
		bit 7 set => colour follows.
			bits 0-6: MBZ
		bit 7 clear => keyword colour:
			bits 1-6: MBZ
			bit 0   : clear => transparent, set => rffe.

0c - border-top-style
0d - border-right-style
0e - border-bottom-style
0f - border-left-style
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			00000000 => none,
			00000001 => hidden,
			00000010 => dotted,
			00000011 => dashed,
			00000100 => solid,
			00000101 => double,
			00000110 => groove,
			00000111 => ridge,
			00001000 => inset,
			00001001 => outset,
			other    => Reserved for future expansion.

10 - border-top-width
11 - border-right-width
12 - border-bottom-width
13 - border-left-width
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => thin,
					  0000001 => medium,
					  0000010 => thick,
					  other   => rffe.

14 - bottom
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7: 
			bit 7 set => length/percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

15 - caption-side
	<value> (14bits) :
		0     => top
		1     => bottom
		other => Reserved for future expansion.

16 - clear
	<value> (14bits) :
		0     => none
		1     => left
		2     => right
		3     => both
		other => Reserved for future expansion.

17 - clip
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7: 
			bit 7 set => shape follows
				bits 0-2: 000   => rect,
						   bit 3 => top auto
						   bit 4 => right auto
						   bit 5 => bottom auto
						   bit 6 => left auto
					  other => rffe.
						   bits 3-6: MBZ.
				
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

	If the value is rect(top, right, bottom, left), then bits 3-6 encode
	which of <top>, <right>, <bottom>, <left> is set to auto. The 
	subsequent parameter list is then 4 - <auto_side> entries long.
	Each entry is a dimension. Entries are always ordered top, right, 
	bottom, left.

	For example,
		clip: rect(10px, auto, auto, 10px) 
	would produce the following bytecode:

	<02c00017> <00002800> <00000000> <00002800> <00000000>

18 - color
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7: 
			bit 7: set => colour follows.
					bits 0-6: MBZ.
			       clear => Reserved for future expansion.
			       		bits 0-6: MBZ.

19 - content
	<value> (14bits) :
		bits 8-13: MBZ (except counter & counters, see below)
		bits 0-7 :
			bit 7 set => string follows
				bits 0-6: 0000000 => string,
					  0000001 => uri,
					  0000010 => counter,
						     bits 12-13: MBZ
						     bits 8-11 : list-style-type
					  0000011 => counters,
						     bits 12-13: MBZ
						     bits 8-11 : list-style-type
					  0000100 => attr,
					  other   => rffe.
			bit 7 clear => keywords:
				bits 0-6: 0000000 => normal,
					  0000001 => none,
					  0000010 => open-quote,
					  0000011 => close-quote,
					  0000100 => no-open-quote,
					  0000101 => no-close-quote,
					  other   => rffe.

	If the value is not "normal", "none", or "inherit", then there is
	a parameter list. Each item is preceded by a <value> word which
	declares the type of the next item. The list is terminated by a
	word with all bits set to zero (the encoding for "normal").

	For example, 
		content: open-quote url('http://example.com/') 
			 " : " attr(name) " " counter(x) "." counters(y, ".")
			 close-quote;"
	would result in the following bytecode:

	<00080019>
	<00000081> <ptr to "http://example.com">
	<00000080> <ptr to " : ">
	<00000084> <ptr to "name">
	<00000080> <ptr to " "> 
	<00000382> <ptr to "x">
	<00000080> <ptr to "."> 
	<00000383> <ptr to "y"> <ptr to ".">
	<00000003> <00000000>

1a - counter-increment
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => <string, integer> pair follows
				bits 0-6: 0000000 => <string, integer> pair
					  other   => rffe.
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

	If the value is not "none", or "inherit", then there is a parameter 
	list. Each item is preceded by a <value> word which declares the type 
	of the next item. The list is terminated by a word with all bits set to
	zero (the encoding for "none").

1b - counter-reset
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => <string, integer> pair follows
				bits 0-6: 0000000 => <string, integer> pair,
					  other   => rffe.
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

	If the value is not "none", or "inherit", then there is a parameter 
	list. Each item is preceded by a <value> word which declares the type 
	of the next item. The list is terminated by a word with all bits set to
	zero (the encoding for "none").

1c - cue-after
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => uri follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

1d - cue-before
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => uri follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

1e - cursor
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => uri follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  0000001 => crosshair,
					  0000010 => default,
					  0000011 => pointer,
					  0000100 => move,
					  0000101 => e-resize,
					  0000110 => ne-resize,
					  0000111 => nw-resize,
					  0001000 => n-resize,
					  0001001 => se-resize,
					  0001010 => sw-resize,
					  0001011 => s-resize,
					  0001100 => w-resize,
					  0001101 => text,
					  0001110 => wait,
					  0001111 => help,
					  0010000 => progress,
					  other   => rffe.

	If the value indicates that a uri is present, then there is a 
	parameter list. Each item is preceded by a <value> word which declares
	the type of the next item. The list is terminated by a word with
	bit 7 clear.

1f - direction
	<value> (14bits) :
		0     => ltr,
		1     => rtl,
		other => Reserved for future expansion.

20 - display
	<value> (14bits) :
		0     => inline,
		1     => block,
		2     => list-item,
		3     => run-in,
		4     => inline-block,
		5     => table,
		6     => inline-table,
		7     => table-row-group,
		8     => table-header-group,
		9     => table-footer-group,
		a     => table-row,
		b     => table-column-group,
		c     => table-column,
		d     => table-cell,
		e     => table-caption,
		f     => none,
		other => Reserved for future expansion.

21 - elevation
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => angle follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => below,
					  0000001 => level,
					  0000010 => above,
					  0000011 => higher,
					  0000100 => lower,
					  other   => rffe.

22 - empty-cells
	<value> (14bits) :
		0     => show,
		1     => hide,
		other => Reserved for future expansion.

23 - float
	<value> (14bits) :
		0     => left,
		1     => right,
		2     => none,
		other => Reserved for future expansion.

24 - font-family
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => data follows
				bits 1-6: MBZ
				bit  0  : clear => string, 
					  set => ident list (as string)
			bit 7 clear => keywords:
				bits 0-6: 0000000 => Reserved.
					  0000001 => serif,
					  0000010 => sans-serif,
					  0000011 => cursive,
					  0000100 => fantasy,
					  0000101 => monospace,
					  other   => rffe.

	In all cases, there is a parameter list. Each item is preceded by a 
	<value> word which declares the type of the next item. The list is 
	terminated by a word with all bits clear.

25 - font-size
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7:
			bit 7 set => dimension follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => xx-small,
					  0000001 => x-small,
					  0000010 => small,
					  0000011 => medium,
					  0000100 => large,
					  0000101 => x-large,
					  0000110 => xx-large,
					  0000111 => larger,
					  0001000 => smaller,
					  other   => rffe.

26 - font-style
	<value> (14bits) :
		0     => normal,
		1     => italic,
		2     => oblique,
		other => Reserved for future expansion.

27 - font-variant
	<value> (14bits) :
		0     => normal,
		1     => small-caps,
		other => Reserved for future expansion.

28 - font-weight
	<value> (14bits) :
		0     => normal,
		1     => bold,
		2     => bolder,
		3     => lighter,
		4     => 100,
		5     => 200,
		6     => 300,
		7     => 400,
		8     => 500,
		9     => 600,
		a     => 700,
		b     => 800,
		c     => 900,
		other => Reserved for future expansion.

29 - height
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

2a - left
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

2b - letter-spacing
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => normal,
					  other   => rffe.

2c - line-height
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length/number/percentage follows
				bits 0-6: 0000000 => number,
					  0000001 => dimension,
					  other   => rffe.
			bit 7 clear => keywords:
				bits 0-6: 0000000 => normal,
					  other   => rffe.

2d - list-style-image
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => string follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

2e - list-style-position
	<value> (14bits) :
		0     => inside,
		1     => outside,
		other => Reserved for future expansion.

2f - list-style-type
	<value> (14bits) :
		0     => disc,
		1     => circle,
		2     => square,
		3     => decimal,
		4     => decimal-leading-zero,
		5     => lower-roman,
		6     => upper-roman,
		7     => lower-greek,
		8     => lower-latin,
		9     => upper-latin,
		a     => armenian,
		b     => georgian,
		c     => lower-alpha,
		d     => upper-alpha,
		e     => none,
		other => Reserved for future expansion.

30 - margin-top
31 - margin-right
32 - margin-bottom
33 - margin-left
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

34 - max-height
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

35 - max-width
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

36 - min-height
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => length or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

37 - min-width
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => length or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

38 - orphans
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => integer follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

39 - outline-color
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => colour follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => invert,
					  other   => rffe.

3a - outline-style
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			00000000 => none,
			00000001 => hidden,
			00000010 => dotted,
			00000011 => dashed,
			00000100 => solid,
			00000101 => double,
			00000110 => groove,
			00000111 => ridge,
			00001000 => inset,
			00001001 => outset,
			other    => Reserved for future expansion.

3b - outline-width
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => thin,
					  0000001 => medium,
					  0000010 => thick,
					  other   => rffe.

3c - overflow
	<value> (14bits) :
		0     => visible,
		1     => hidden,
		2     => scroll,
		3     => auto,
		other => Reserved for future expansion.

3d - padding-top
3e - padding-right
3f - padding-bottom
40 - padding-left
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => length or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

41 - page-break-after
	<value> (14bits) :
		0     => auto,
		1     => always,
		2     => avoid,
		3     => left,
		4     => right,
		other => Reserved for future expansion.

42 - page-break-before
	<value> (14bits) :
		0     => auto,
		1     => always,
		2     => avoid,
		3     => left,
		4     => right,
		other => Reserved for future expansion.

43 - page-break-inside
	<value> (14bits) :
		0     => auto,
		1     => avoid,
		other => Reserved for future expansion.

44 - pause-after
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => time or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

45 - pause-before
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => time or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

46 - pitch-range
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => number follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

47 - pitch
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => frequency follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => x-low,
					  0000001 => low,
					  0000010 => medium,
					  0000011 => high,
					  0000100 => x-high,
					  other   => rffe.

48 - play-during
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => string follows
				bit 6: set => mix, clear => don't mix
				bit 5: set => repeat, clear => no repeat
				bits 0-4: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  0000001 => none,
					  other   => rffe.

49 - position
	<value> (14bits) :
		0     => static,
		1     => relative,
		2     => absolute,
		3     => fixed,
		other => Reserved for future expansion.

4a - quotes
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => two strings follow
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => none,
					  other   => rffe.

	If the value indicates that strings are present, then there is a 
	parameter list. Each item is preceded by a <value> word which declares
	the type of the next item. The list is terminated by a word with
	all bits clear (the encoding for "none").

4b - richness
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => number follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

4c - right
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

4d - speak-header
	<value> (14bits) :
		0     => once,
		1     => always,
		other => Reserved for future expansion.

4e - speak-numeral
	<value> (14bits) :
		0     => digits,
		1     => continuous,
		other => Reserved for future expansion.

4f - speak-punctuation
	<value> (14bits) :
		0     => code,
		1     => none,
		other => Reserved for future expansion.

50 - speak
	<value> (14bits) :
		0     => normal,
		1     => none,
		2     => spell-out,
		other => Reserved for future expansion.

51 - speech-rate
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => number follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => x-slow,
					  0000001 => slow,
					  0000010 => medium,
					  0000011 => fast,
					  0000100 => x-fast,
					  0000101 => faster,
					  0000110 => slower,
					  other   => rffe.

52 - stress
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => number follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

53 - table-layout
	<value> (14bits) :
		0     => auto,
		1     => fixed,
		other => Reserved for future expansion.

54 - text-align
	<value> (14bits) :
		0     => left,
		1     => right,
		2     => center,
		3     => justify,
		4     => -libcss-left,
		5     => -libcss-center,
		6     => -libcss-right,
		other => Reserved for future expansion.

55 - text-decoration
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			00000000 => none
			otherwise:
				bits 4-7: MBZ
				bit 3: set => blink, clear => no blink
				bit 2: set => line-through, 
				       clear => no line-through
				bit 1: set => overline, clear => no overline
				bit 0: set => underline, clear => no underline

56 - text-indent
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => length or percentage follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

57 - text-transform
	<value> (14bits) :
		0     => capitalize,
		1     => uppercase,
		2     => lowercase,
		3     => none,
		other => Reserved for future expansion.

58 - top
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

59 - unicode-bidi
	<value> (14bits) :
		0     => normal,
		1     => embed,
		2     => bidi-override,
		other => Reserved for future expansion.

5a - vertical-align
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => baseline,
					  0000001 => sub,
					  0000010 => super,
					  0000011 => top,
					  0000100 => text-top,
					  0000101 => middle,
					  0000110 => bottom,
					  0000111 => text-bottom,
					  other   => rffe.

5b - visibility
	<value> (14bits) :
		0     => visible,
		1     => hidden,
		2     => collapse,
		other => Reserved for future expansion.

5c - voice-family
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => data follows
				bits 1-6: MBZ
				bit  0  : clear => string, 
					  set => ident list (as string)
			bit 7 clear => keywords:
				bits 0-6: 0000000 => Reserved.
					  0000001 => male,
					  0000010 => female,
					  0000011 => child,
					  other   => rffe.

	In all cases, there is a parameter list. Each item is preceded by a 
	<value> word which declares the type of the next item. The list is 
	terminated by a word with all bits clear.
	
5d - volume
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => number/percentage follows
				bits 0-6: 0000000 => number,
					  0000001 => dimension,
					  other   => rffe.
			bit 7 clear => keywords:
				bits 0-6: 0000000 => silent,
					  0000001 => x-soft,
					  0000010 => soft,
					  0000011 => medium,
					  0000100 => loud,
					  0000101 => x-loud,
					  other   => rffe.

5e - white-space
	<value> (14bits) :
		0     => normal,
		1     => pre,
		2     => nowrap,
		3     => pre-wrap,
		4     => pre-line,
		other => Reserved for future expansion.

5f - widows
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7: set => integer follows
					bits 0-6: MBZ
			       clear => Reserved for future expansion
			       		bits 0-6: MBZ

60 - width
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length or percentage follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

61 - word-spacing
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => length follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => normal,
					  other   => rffe.

62 - z-index
	<value> (14bits) :
		bits 8-13: MBZ
		bits 0-7 :
			bit 7 set => integer follows
				bits 0-6: MBZ
			bit 7 clear => keywords:
				bits 0-6: 0000000 => auto,
					  other   => rffe.

63-3ff - Reserved for future expansion.

