+Switches can have more than 2 states. This requires nesting one switch
+inside another. One could make, for example, a 3 color LED by nesting
+switch layers.
+
+<type>text</type>
+A text layer may be static, as in a label, generated from a property
+or a combination of both. This example is a switch that contains both
+static and dynamic text:
+
+ <layer1> <!-- switch layer -->
+ <name>display</name>
+ <type>text</type> <!-- type == text -->
+ <point-size>12</point-size> <!-- font size -->
+ <color> <!-- specify rgb values to color text -->
+ <red>1.0</red>
+ <green>0.5</green>
+ <blue>0.0</blue>
+ </color> <!-- close color section -->
+ <chunks> <!-- sections of text are referred to as chunks -->
+ <chunk> <!-- first chunk of text -->
+ <type>number-value</type> <!-- value defines it as dynamic -->
+ <property>/radios/nav1/dme/distance</property> <!-- ties it to a property -->
+ <scale>0.00053995680</scale> <!-- convert between statute and nautical miles? -->
+ <format>%5.1f</format> <!-- define format -->
+ </chunk>
+ </chunks>
+ </layer1>
+ <layer2> <!-- switch layer -->
+ <name>display</name>
+ <type>text</type> <!-- type == text -->
+ <point-size>10</point-size> <!-- font size -->
+ <color> <!-- specify rgb values to color text -->
+ <red>1.0</red>
+ <green>0.5</green>
+ <blue>0.0</blue>
+ </color> <!-- close color section -->
+ <chunks> <!-- sections of text are referred to as chunks -->
+ <chunk> <!-- first chunk of text -->
+ <type>literal</type> <!-- static text -->
+ <text>---.--</text> <!-- fixed value -->
+ </chunk>
+ </chunks>
+ </layer2>
+
+
+Transformations:
+---------------
+A transformation is a rotation, an x-shift, or a
+y-shift. Transformations can be static or they can be based on
+properties. Static rotations are useful for flipping textures
+horizontally or vertically. Transformations based on properties are
+useful for driving instrument needles. I.E. rotate the number of
+degrees equal to the airspeed. X and y shifts are relative to the
+center of the instrument. Each specified transformation type takes an
+<offset>. Offsets are relative to the center of the instrument. A
+shift without an offset has no effect. For example, let's say we have
+a texure that is a circle. If we use this texture in two layers, one
+defined as having a size of 128x128 and the second layer is defined as
+64x64 and neither is supplied a shift and offset the net result
+appears as 2 concentric circles.
+
+
+About Transformations and Needle Placement:
+------------------------------------------
+
+When describing placement of instrument needles, a transformation
+offset must be applied to shift the needles fulcrum or else the needle
+will rotate around it's middle. The offset will be of <type> x-shift
+or y-shift depending on the orientation of the needle section in the
+cropped texture.
+
+This example comes from the altimeter.xml
+
+ <layer>
+ <name>long needle (hundreds)</name> <!-- the altimeter has more than one needle -->
+ <texture>
+ <path>Aircraft/c172/Instruments/Textures/misc-1.rgb</path>
+ <x1>0.8</x1>
+ <y1>0.78125</y1>
+ <x2>0.8375</x2>
+ <y2>1.0</y2>
+ </texture>
+ <w>8</w>
+ <h>56</h>
+ <transformations> <!-- begin defining transformations -->
+ <transformation> <!-- start definition of transformation that drives the needle -->
+ <type>rotation</type>
+ <property>/steam/altitude</property> <!-- bind it to a property -->
+ <max>100000.0</max> <!-- upper limit of instrument -->
+ <scale>0.36</scale> <!-- once around == 1000 ft -->
+ </transformation> <!-- close this transformation -->
+ <transformation> <!-- this one shifts the fulcrum of the needle -->
+ <type>y-shift</type> <!-- y-shift relative to needle -->
+ <offset>24.0</offset> <!-- amount of shift -->
+ </transformation>
+ </transformations>
+ </layer>
+
+This needles has its origin in the center of the instrument. If the
+needles fulcrum was towards the edge of the instrument, the
+transformations to place the pivot point must precede those which
+drive the needle,
+
+Interpolation
+-------------
+Non linear transformations are now possible via the use of
+interpolation tables.
+
+ <transformation>
+ ...
+ <interpolation>
+ <entry>
+ <ind>0.0</ind> <!-- raw value -->
+ <dep>0.0</dep> <!-- displayed value -->
+ </entry>
+ <entry>
+ <ind>10.0</ind>
+ <dep>100.0</dep>
+ </entry>
+ <entry>
+ <ind>20.0</ind>
+ <dep>-5.0</dep>
+ </entry>
+ <entry>
+ <ind>30.0</ind>
+ <dep>1000.0</dep>
+ </entry>
+ </interpolation>
+ </transformation>
+
+Of course, interpolation tables are useful for non-linear stuff, as in
+the above example, but I kind-of like the idea of using them for
+pretty much everything, including non-trivial linear movement -- many
+instrument markings aren't evenly spaced, and the interpolation tables
+are much nicer than the older min/max/scale/offset stuff and should
+allow for a more realistic panel without adding a full equation parser
+to the property manager.
+
+If you want to try this out, look at the airspeed.xml file in the base
+package, and uncomment the interpolation table in it for a very funky,
+non-linear and totally unreliable airspeed indicator.
+
+
+Actions:
+-------