reference updates
authoradam <adam@megacz.com>
Sun, 9 Jan 2005 11:00:52 +0000 (11:00 +0000)
committeradam <adam@megacz.com>
Sun, 9 Jan 2005 11:00:52 +0000 (11:00 +0000)
darcs-hash:20050109110052-5007d-2fd07791070233621ccfdf9e3fc9e6a1a90dda5b.gz

doc/ibex-doc.xml
doc/reference/ibex-logo.pdf [new file with mode: 0644]
doc/reference/lifecycle.pdf
doc/reference/reference.xml

index 05e49d9..6d4df4f 100644 (file)
      **italics**
      __boldface__
      ||typewriter||
+     ==nonstructural heading==
 
      blank lines become paragraph breaks
 
      \quot
      \apos
 
+     wiki plugins: page topology (who points here, orphaned pages, statistics, document upload, etc)
+                   http://en.wikipedia.org/wiki/Special:Specialpages
+
+     structured ebnf content?
+     http://www.docbook.org/tdg/en/html/docbook.html
+
   </pre>
 
   </section>
diff --git a/doc/reference/ibex-logo.pdf b/doc/reference/ibex-logo.pdf
new file mode 100644 (file)
index 0000000..cc178bc
--- /dev/null
@@ -0,0 +1,47 @@
+%PDF-1.4\r%âãÏÓ\r
+1 0 obj<</Pages 2 0 R/Type/Catalog/Metadata 10 0 R>>\rendobj\r2 0 obj<</Count 1/Kids[6 0 R]/Type/Pages>>\rendobj\r3 0 obj<</ModDate(D:20040425042500-07'00')/CreationDate(D:20040425042500-07'00')/Creator(Illustrator)/Producer(Adobe PDF library 6.66)>>\rendobj\r5 0 obj null\rendobj\r6 0 obj<</Contents 9 0 R/Type/Page/Parent 2 0 R/MediaBox[0.0 0.0 216.0 216.5]/BleedBox[0.0 0.0 216.0 216.5]/TrimBox[0.0 0.0 216.0 216.5]/ArtBox[17.50049 0.0 206.58105 215.01807]/Resources<</ExtGState<</GS0 7 0 R>>/Properties<</MC0<</Color[20224.0 32768.0 32768.0]/Title(Layer 1)/Visible true/Preview true/Editable true/Printed true/Dimmed true>>>>>>>>\rendobj\r7 0 obj<</Type/ExtGState/SA true/OP false/op false/OPM 1/ca 1.0/CA 1.0/BM/Normal/SMask/None/AIS false>>\rendobj\r8 0 obj 14920\rendobj\r9 0 obj<</Length 8 0 R>>stream\r
+/Layer /MC0 BDC \r1 0 0 -1 0 0 cm\r0 0 0 1 k\r0 i \r/GS0 gs\r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rf\r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rf\r0 0 0 0 K\r1 w 4 M 0 j 0 J []0 d \r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rS\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rf\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rf\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rS\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rf\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rf\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rS\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rf\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rf\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rS\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rf\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rf\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rS\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rf\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rf\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rS\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rf\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rf\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rS\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rf\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rf\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rS\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rf\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rf\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rS\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rf\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rf\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rS\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rf\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rf\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rS\rEMC \r\rendstream\rendobj\r10 0 obj<</Length 19694/Type/Metadata/Subtype/XML>>stream\r
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>\r
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>\r
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Adobe PDF library 6.66'></rdf:Description>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:xap='http://ns.adobe.com/xap/1.0/'\r
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/' xap:CreateDate='2004-04-25T04:25:00-07:00' xap:ModifyDate='2004-04-25T04:25:00-07:00' xap:CreatorTool='Illustrator' xap:MetadataDate='2004-04-25T04:25:00-07:00'><xap:Thumbnails><rdf:Alt><rdf:li rdf:parseType='Resource'><xapGImg:format>JPEG</xapGImg:format><xapGImg:width>228</xapGImg:width><xapGImg:height>256</xapGImg:height><xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADkAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYqk3mPzj5W8tWn1vXtVtdNgNeDXEqRl+JoQgYguR4LU4q8b81f85k/lzpjPFodrd67Mp+GRE+r&#xA;W7D/AIyTUlBr/wAVHFXnM/8Azlt+bPmS9/R3lHy5biaWpSCKK4v7oD/JMZiWg/4x4qh9V8+/nvU/&#xA;4y8/ab5Ti2LWDC2lvFH/ADC2ENxcKaj/AHaVxVJX/OOzsCRJ57846/MDU/VHh0i2Pshka9elf+Kl&#xA;+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</xapGImg:image></rdf:li></rdf:Alt></xap:Thumbnails></rdf:Description>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cb6e89bb-959d-11d8-ba9b-000a956e58ec'/>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'/>\r
+</rdf:RDF>\r
+</x:xmpmeta>\r
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end='w'?>\rendstream\rendobj\rxref\r0 11\r0000000004 65535 f\r
+0000000016 00000 n\r
+0000000076 00000 n\r
+0000000126 00000 n\r
+0000000000 00001 f\r
+0000000270 00000 n\r
+0000000290 00000 n\r
+0000000649 00000 n\r
+0000000760 00000 n\r
+0000000781 00000 n\r
+0000015751 00000 n\r
+trailer\r<</Size 11/Root 1 0 R/Info 3 0 R/ID[<304e386c96ab11d891f8000a956e58ec><3096410896ab11d891f8000a956e58ec>]>>\rstartxref\r35522\r%%EOF\r
\ No newline at end of file
index 940e482..b704b39 100644 (file)
Binary files a/doc/reference/lifecycle.pdf and b/doc/reference/lifecycle.pdf differ
index 28f8a34..37148d6 100644 (file)
-<ibex-doc title="The Ibex Reference" subtitle="Nitrogen Release" author="Adam Megacz" email="adam@ibex.org">
+<ibex-doc title="The Ibex Reference" subtitle="Nitrogen Release" author="Adam Megacz" email="adam@ibex.org" logo="ibex-logo.pdf">
 
 <!-- ----------------------------------------------------------------------- -->
 <section title="Introduction">
 
-    **
-    If you are reading the html version of this document and are
-    thinking of printing it out, you might be interested in the nicely
-    typeset <link url="reference.pdf" text="pdf version"/> produced
-    with LaTeX.
-    **
+    
+    ** If you are reading the html version of this document and are       **
+    ** thinking of printing it out, you might be interested in the nicely **
+    ** typeset <link url="reference.pdf" text="pdf version"/> produced    **
+    ** with LaTeX.                                                        ** 
+
+  Ibex is a software platform based on the philosophy that the most
+  useful systems consist of both **statically typed** and
+  **dynamically typed** languages, working in concert.
+
+  <list>
+
+      - Statically typed languages (such as Java) are well suited for
+        high-performance, reliable, reusable code.  Unfortunately
+        programs written in statically typed languages often take
+        longer to develop, and their commitment to a specific type
+        system makes interoperating with other languages cumbersome.
 
-    This document is a __reference__. It is not a
-    __specification__ or a
-    __tutorial__.
+      - Dynamically typed languages (such as JavaScript) typically
+        perform poorly (due to runtime checks and inadequate static
+        information for optimization), tend to admit more errors (due
+        to less static checking), and export APIs which are not
+        precisely defined (due to the huge number of possible
+        type/method combinations).  However, writing programs in
+        dynamically typed languages is a much more rapid process, and
+        the implicit coercions in such languages make interoperability
+        between similar languages very easy.
+
+   </list>
     
-    This document does not guide the user gently through examples (as a
-    tutorial would), and it doesn't provide enough detail and formality
-    for a third party to construct a compatible re-implementation of the
-    Ibex Core (as a specification would).
+   The architectural incarnation of this philosophy is the Ibex Object
+   Model, a universal interface to dynamically typed languages.  The
+   IOM serves as a common interface between statically typed languages
+   and dynamically typed languages both locally and over the network.
+
+   <section title="The Ibex Object Model">
+
+      The Ibex Object Model consists of three primitive types:
     
-    Rather, the goal of this document is to completely describe every
-    aspect of the environment that the Ibex Core provides to client
-    applications, from the bottom up. If you want to be an Ibex expert,
-    this is the right document to read. It is assumed that you are already
-    familiar with XML and with either JavaScript or ECMAscript.
+      <list>
+          - __number__  -- a floating point number
+          - __string__  -- a unicode string
+          - __boolean__ -- either [[true]] or [[false]]
+      </list>
+    
+      From these primitives, more complex structures can be built from
+      two aggregate types:
     
-    If you need to use or rely on some behavior you notice in the Ibex
-    Core, but which is not clearly defined here, please post to <link
-    url="http://lists.ibex.org/listinfo/users" text="the users mailing list"/>.
+      <list>
+          - __array__   -- a collection of objects indexed by a non-negative integer
+          - __hash__    -- a collection of objects indexed by objects (often strings)
+      </list>
+    
+      Any of the following actions can be performed on an object:
+    
+      <list>
+          - __get(key)__ -- attempts to retrieve the object indexed by
+            [[key]].  Returns an object.
     
+          - __put(key, val)__ -- attempts to add object [[val]] with key
+            [[key]] to an object.  Does not return a value.
+    
+          - __call(args)__ -- attempts to call the object as if it were a
+            function.  The [[args]] value is a list of arguments.  May or
+            may not return a value.
+      </list>
+    
+      The keys of some objects may be enumerated by attempting to "call"
+      the object; the return value will be an array of the object's keys.
+
+      Finally, an object may be **coerced** to any of the three
+      primitive types, although this coercion may fail.  Objects may
+      also be coerced to the **bytestream** type, which represents an
+      unbounded stream of octets.  Dynamically typed code may not
+      explicitly manipulate bytestreams, although it can pass objects
+      to statically typed code which in turn coerces those objects to
+      bytestreams.
+    
+      Any of the above operations may **throw** an exception, which is
+      itself an object.
+
+      Any entity in the statically typed world which supports these
+      operations may expose itself to the dynamically typed world.
+      Furthermore, it can expect that any values passed to it will support
+      all of the operations shown above.
+    </section>
+
+    <section title="Namespaces">
+        - relation to XML
+        - cover templates here with David's isomorphism?
+    </section>
+
+    <section title="Platforms Founded on the Ibex Object Model">
+
+       The remainder of this document describes the three major
+       systems founded on the Ibex Object Model:
+
+       <list>
+           - The Ibex User Interface
+           - The Ibex Persistent Storage Service
+           - The Ibex Mail Server
+           - IbexDoc
+       </list>
+
+       Currently, all four of these systems use Java as the statically
+       typed language and IbexScript (a derivitave of JavaScript) as
+       the dynamically typed language.  However, since they interact
+       strictly via the Ibex Object Model, either component can be
+       rewritten in a different language.
+
+    </section>
+  
   <section title="Key Concepts">
   
     <definition term="The Core">
         </definition>
 
   </section>
+</section>
 
+<section title="The Ibex User Interface">
   <section title="Life Cycle of an Ibex Application">
   
     <image url="lifecycle.pdf" caption="The Lifecycle of an Ibex Application"/>
 
     A user typically begins an Ibex session by clicking on a link to
-    an Ibex application.  This link serves the {\tt launch.html} file
-    to the user's browser, which in turn downloads the appropriate
-    {\it Wildebeest} -- currently either an ActiveX Control
+    an Ibex application.  This link serves the [[launch.html]] file
+    to the user's browser (1), which in turn downloads the appropriate
+    **Wildebeest** (2)-- currently either an ActiveX Control
     (Win32/MSIE), XPInstaller (Mozilla), or Signed Applet (all
     others).
 
     The Wildebeest downloads the appropriate core for the user's
-    machine and verifies its digital signature.  It then launches the
-    core, which downloads the UI (an [[.ibex]] archive), loads it,
-    applies the [[main.t]] template (found in the archive), and
-    renders it onto the screen, running any associated JavaScript
-    code.
+    machine and verifies its digital signature (3).  It then launches
+    the core, which downloads the UI (4), (an [[.ibex]] archive),
+    loads it, applies the [[main.t]] template (found in the archive),
+    and renders it onto the screen, running any associated JavaScript
+    code (5).
       
     The user interacts with the application by clicking and moving the
-    mouse, and by pressing keys on the keyboard.  These actions trigger
-    fragments of JavaScript code which are designated to handle events.
-    This JavaScript code can then relay important information back to the
-    server using XML-RPC or SOAP, or it can modify the structure and
-    properties of the user interface to change its appearance, thereby
-    giving feedback to the user.
+    mouse, and by pressing keys on the keyboard (5).  These actions
+    trigger fragments of JavaScript code which are designated to
+    handle events.  This JavaScript code can then relay important
+    information back to the server using XML-RPC or SOAP (5), or it
+    can modify the structure and properties of the user interface to
+    change its appearance, thereby giving feedback to the user.
       
     The Ibex core quits when the last remaining surface has been destroyed.
 
     of Ibex.
       
   </section>
-</section>
   
 <section title="The XML Template Representation">
 
   A template (discussed in the next section) is an XML file which acts
   as a blueprint for constructing a tree of boxes.  We call this
-  construction process **applying**, since unlike
-  **instantiation** in object-oriented programming systems, you
-  always apply a template to a pre-existing box, and you can apply
-  multiple templates to the same box.
+  construction process **applying**, since unlike **instantiation** in
+  object-oriented programming systems, you always apply a template to
+  a pre-existing box, and you can apply multiple templates to the same
+  box.
 
   Each XML tag corresponds to a single box, or to another template
   which will be applied to that box.  For example, a [[scrollbar]]
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
-<section title="Layout and Rendering">
-
-      Each box occupies a rectangular region on the surface.  The visual
-      appearance of a surface is created by rendering each box in its tree.
-      Unless the [[clip]] attribute is [[false]], each box will
-      clip its childrens' visual representations to its own, so that the
-      children appear "confined to" the parent.  Children are rendered after
-      their parents so they appear "on top of" their parents.
-      
-      Each box has two major visual components, each with subcomponents:
+<section title="Rendering">
+
+      FIXME: needs way, way, way more diagrams of nonrectangular boxes.
+
+      Each box occupies a region on the surface.  The visual
+      appearance of a surface is created by rendering each box in its
+      tree.  Unless the [[clip]] attribute is [[false]], each box will
+      clip its childrens' visual representations to its own, so that
+      the children appear "confined to" the parent.  Children are
+      rendered after their parents so they appear "on top of" their
+      parents.
       
-      FIXME: diagram
+      <heading title="Boxes Don't Have to Be Rectangular"/>
+
+      Until now we've tactily assumed that boxes are rectangular.  In
+      fact, unlike its predecessor (XWT), Ibex boxes can be **any
+      shape at all**.  We refer to the outline of a box as its path,
+      which may be composed of lines and curves (arcs and splines).
+      If the path is not set (or set to [[null]]), the box's path is
+      **implicitly** a rectangle.
+
+      A key step in understanding how Ibex works, and understanding
+      how operations on rectangular boxes generalize to arbitrary
+      boxes is to realize that "the path **is** the box".  Just as a
+      rectangular box clips its children to the inside of the
+      rectangle, a circular box will clip its children to the inside
+      of the circle.
+
+      In fact, Ibex's integration of vector graphics with
+      constraint-based user interface layout runs quite deep -- boxes
+      which "contain" text are actually boxes whose outline path
+      **is** the actual letters of the text.  This means that you can
+      assign children to a text-shaped box, and the children's
+      appearance will be cliped to the **inside** of the text letters.
+
+      The only time rectangular and non-rectangular boxes act
+      differently is when box packing takes place; when packing boxes,
+      Ibex only looks at the **bounding box** of a path (the smallest
+      rectangle that completely encloses the box's path).  In the case
+      of rectangular boxes (which have not been rotated or sheared),
+      this bounding box happens to be exactly the same as the box's
+      path.  So Ibex is actually treating these boxes the same, but
+      the chosen treatment favors rectangular boxes.
+
+      <section title="Visual Elements">
+
+      The appearance of a box consists of three visual elements: its
+      path, stroke, and fill.
       
-      <definition term="path">
-  
-          A box's [[path]] consists of zero or more lines and curves.
-          The path may be filled with a color, gradient, or texture, and
-          may be stroked with a line of a given thickness and color.  If
-          the path is not specified, it defaults to the perimiter of the
-          box.  [**Note: Vector Graphics support (including the ability
-          to set the [[path]] property to anything other than the
-          default) is currently not implemented**].
-  
-          A path also has:
-  
-          <list>
-              an associated [[strokecolor]], which is a color
-  
-              an associated [[strokewidth]], which is a number
-              specifying the width of the stroke.  [**Note: Vector
-              Graphics support (including the [[strokewidth]]
-              property) is currently not implemented**]
-              
-              a [[fill]], which is either a color, gradient, or
-              texture
-          </list>        
-          </definition>
-  
-      <definition term="text">
-  
-          Each box also has a single line of [[text]], whose
-          appearance is determined by its:
-  
-          <list>
-              associated [[font]], which can be any font supported by
-              the <link url="http://www.freetype.org" text="FreeType2"/>
-              library.
-              
-              an associated [[fontsize]] in **pixels**
-              
-              an associated [[textcolor]]
-          </list>
-          </definition>
+      <property name="path" type="string" default='""'>
+          A box's [[path]] consists of zero or more contours, each of
+          which consists of one or more lines, bezier curves (cubic or
+          quadradic), or generalized elliptic arcs.  The grammar and
+          feature set supported are identical to that specified in <link
+          url="http://www.w3.org/TR/SVG11/paths.html" text="SVG 1.1,
+          section 8"/>.
+
+    One of the most common sources of frustration when working with
+    text representations of vector paths, or programs that manipulate
+    them, is making a mistake when setting a transform which causes
+    the entire path to be off the screen.  Since no part of the path
+    is visible, you have no idea which direction it went! To minimize
+    the chance of this happening, and generally make dealing with
+    vectors a more enjoyable experience, Ibex always **recenters** a
+    path.  When you set a box's path (either by writing to its
+    [[path]] or [[text]] properties), Ibex translates the entire path
+    so that it is lined up with the X and Y axes, as close to the
+    origin as possible, in the positive-X, positive-Y quadrant.  Ibex
+    will note this translation by setting the box's [[transform]] to
+    the transformation used to do this.  If you do not desire this
+    behavior, just set the [[transform]] back to the identity
+    transform.
+         </property>
+    
+    <property name="stroke" type="string" default="clear">
+          The color with which to stroke the path.  Ibex paths may
+          only be stroked with a single color, solid line (not
+          dashed), of "hairline width" (meaning that the line is never more than one
+          antialiased pixel wide no matter what magnification it is
+          viewed at).
+
+          This property can be set to a 5-character hex string
+          ([[#RGB]]), 7-character hex string ([[#RRGGBB]]),
+          9-character hex string ([[#AARRGGBB]]), specifying the box's
+          hexadecimal color.  Any other string is compared against the
+          <link url="http://www.color.org/ICC-1A_1999-04.PDF"
+          text="ICC"/> colors (the same set of color names supported
+          by SVG).  If this property is set to [[null]], the stroke
+          color will be set to clear ([[#00000000]]).
+
+          Other vector formats (notably SVG and PDF) support "thick"
+          lines, dashed lines, lines stroked with a gradient or
+          texture, and an assortment of special caps and joins for
+          these thick lines (hairline lines do not need joins or
+          caps).  Fortunately, all of these constructs can be
+          converted into **filled** paths rather easily, making it
+          possible for Ibex to support the same functionality with a
+          much simpler API (and more efficient rendering engine).
+          </property>
+    
+      <property name="fill">
+          The graphic element with which to fill the path.  This
+          property can be set to any of the values specified for
+          [[stroke]], as well as to a texture (an image) or a
+          gradient.  Paths which self-intersect are filled according
+          to the SVG guidelines.
+
+          When an image (texture) is written to this property, the
+          box's [[minwidth]] and [[minheight]] properties will be
+          automatically set to the dimensions of the image (they can
+          be changed later if desired).
+          </property>
+      </section>   
+
+      <section title="Text">
+
+      Ibex treats text exactly the same way it treats other paths.
+      Writing to the [[text]] property actually sets the box's path to
+      the outline of the rendered form of the text, and text is
+      subject to the same rotation, shearing, and scaling
+      transformations as all other boxes.  You can even **read back**
+      the curves from which the text is composed by reading from the
+      [[path]] property (the string returned will be in SVG Path
+      syntax), modify it, and write it to the [[path]] property of
+      another box.
+
+    <property name="text" type="string" default='""'>
+      The box's text; writing [[null]] to this property sets it to
+      [[""]].  In order to help eliminate common chores when working
+      with text, Ibex will automatically take the following actions
+      when you write to the [[text]] property:
+      </property>
+
+      <list>
+          The text is converted to curves using the Freetype library,
+          and the resulting curve becomes the box's path.
+
+          If the box's [[strokecolor]] is [[null]], it is set to black
+          ([[#FF000000]]).  When first created, a box has an invisible
+          stroke; automatically setting the stroke to a visible color
+          helps eliminate confusing errors.  You can change the stroke
+          color back to clear after writing to the [[text]] property.
+
+          The box's [[aspect]] property is automatically set to the
+          correct aspect ratio for the chosen string in the chosen
+          font.  This ensures that resizing will not warp the text.
+      </list>
+    
+    <property name="font" type="stream" default=".ibex.ui.font.sansserif">
+        Fonts are rendered using the [[stroke]] assigned to the box,
+        using the font assigned to the [[font]] property.  When an
+        object is written to this property, it is coerced to a stream which is interpreted using
+        the <link url="http://www.freetype.org" text="FreeType 2
+        library"/>, and the resulting font is used to render the box's
+        [[text]].
+
+        To choose the size of a font, just set the box's [[height]]
+        property to the desired height **in pixels**.  Conversion
+        functions from points to pixels are available.
+        </property>
+     </section>
+
+     <section title="Transformations">
+      The [[transform]] property allows the user to specify an
+      arbitrary affine transformation to be applied to the box's path,
+      text, and children.  The syntax and features supported are
+      identical to those described in <link
+      url="http://www.w3.org/TR/SVG11/coords.html" text="SVG 1.1,
+      section 7"/>, and include rotation, shearing, scaling, and
+      translation.
+
+      <property name="transform">
+          FIXME
+      </property>
+
+      One tricky part about transformations is their interaction with
+      box packing and dimension properties.  A box's size properties
+      (such as [[minwidth]] or [[height]]) are **always** measured in
+      the box's own coordinate space (ie after applying the box's
+      [[transform]]).  This means that the sum of the [[width]]s of a
+      box's children may not be equal to the parent box's [[width]],
+      even if the children appear (on screen) to completely fill its
+      width.
+
+      One other consequence of combining transformations with
+      constraint-based layout is that when a box is rotated, its width
+      and height are no longer completely independent (remember, the
+      box's width is measured in the rotated coordinate space).  If a
+      box is turned at a 45 degree angle and then forced into a space
+      10 pixels wide, enlarging the box's width will force a reduction
+      in its height (in order to cram it in the 10 pixel space).  In
+      situations like this, Ibex will first look to the box's
+      [[aspect]], if explicitly set, and obey that.  If the box's
+      [[aspect]] is unspecified, Ibex will use the ratio between the
+      box's [[minwidth]] and [[minheight]] to guide the tradeoff.  If
+      either of these properties is [[0]], Ibex will simply attempt to
+      make the ratio as close to [[1:1]] as possible.
+
+      When we talk about a box's **bounding box**, we are referring to
+      the smallest rectangle in the **parent's** coordinate space
+      which completely encloses the child box's path.  This is the
+      only time we will deal with the size of a child using a
+      coordinate space other than its own.
+    </section>
+
+  <section title="Layout Properties">
+
+    We will cover the layout algorithm in detail in the next section,
+    but we introduce the properties at play here and give an intuition
+    about their purpose.
+    
+    <property name="packed" type="boolean" default="true">
+        The layout strategy for this box.  If set to [[true]], the
+        box occupies no cells and is laid out independently of its
+        siblings.
+        </property>
+    
+    <property name="zoom" type="boolean" default="false">
+        This property controls the strategy Ibex uses for changing the
+        box's width and height in response to layout constraints.
+
+        If [[zoom]] is set to [[false]] (the default), then the box's
+        [[path]] will be altered by multiplying all the vertices by a
+        scaling factor in order to make the path's bounding box meet
+        the required constraints.  The box's [[transform]] will not be
+        affected, and the scaling of the box's children will not be
+        affected.
+
+        If [[zoom]] is set to [[true]], the box's [[path]] will not be
+        altered in response to layout constraints; rather, its
+        [[transform]] will be altered in order to "zoom in" or "zoom
+        out" and bring all of the path's vertices within the desired
+        region.  Since the box's [[transform]] also applies to its
+        descendants, they too will be magnified or reduced.
+        </property>
+    
+    <property name="shrink" type="boolean" default="false">
+        If set to [[true]], this box will shrink
+        (horizontally/vertically/both) to the smallest size allowed by
+        its children and the bounding box of its path.
+        </property>
+    
+    <property name="x y" type="integer" default="varies">
+        If the box is a root box, writing to these properties moves
+        the surface; reading from them returns the position of the
+        surface.
+
+        On non-root boxes, writing to these properties is a shorthand
+        for adding a [["translate(x, y)"]] to the box's [[transform]].
+        Reading from these properties will return FIXME.
+        </property>
+    
+    <property name="minwidth minheight" type="integer" default="0">
+        The desired minimum width and height.  See the [[zoom]]
+        property for a description of how the box is altered to meet
+        these constraints.
+        </property>
+    
+    <property name="maxwidth maxheight" type="integer" default="ibex.ui.maxdim">
+        The desired maximum width and height.  See the [[zoom]]
+        property for a description of how the box is altered to meet
+        these constraints.
+        </property>
+    
+    <property name="width height" type="integer">
+        When read, this is the current (width/height) of this box.
+        Writing to this property is equivalent to writing to
+        **both** the minimum and maximum (width/height).
+        </property>
+    
+    <property name="cols rows" type="integer" default="0">
+        The number of (columns/rows) in which to lay out the children of this
+        box.  If set to zero, the number of (columns/rows) is unconstrained.
+        Either [[rows]] or [[cols]] must be zero.  If
+        [[0]] is written to [[cols]] when [[rows]] is
+        [[0]], the write is ignored.  If a nonzero value is
+        written to [[cols]] when [[rows]] is nonzero,
+        [[rows]] is set to [[0]], and vice versa.
+        </property>
+    
+    <property name="colspan rowspan" type="integer" default="1">
+        The number of (columns/rows) that this box spans within its parent.
+        </property>
+    
+    <property name="aspect" type="float" default="0.0">
+        The width-to-height ratio constraint for this box; can be set
+        either as a floating point number ([[0.5]]) or a ratio
+        ([["1:2"]]).  Setting this to [[0.0]] disables the ratio
+        constraint.
+
+      Note packed boxes always **shrink** in order to satisfy aspect
+      constraints, while unpacked boxes always **grow** in order to
+      satisfy them -- even if this means growing larger than the box's
+      parent.
+        </property>
+    
+    <property name="visible" type="boolean" default="true">
+        If set to [[false]], this box will be rendered as if its
+        width and height were zero. If this is a root box, the
+        associated surface will be hidden.
+
+        When reading from this property, the value [[false]] will
+        be returned if this box **or any of its ancestors** is not
+        visible.  Thus it is possible to write [[true]] to a box's
+        [[visible]] property and then read back [[false]].
+        </property>
+    </section>
+
+</section>
   
-      These eight components plus the size of a box fully specify its
-      appearance.  Every single box you see in Ibex is drawn only on the
-      basis of these components and its size.
+<section title="Layout Algorithm">
 
       The size and position of every box is determined by its
       properties, its childrens' sizes, and its parent's size and
       not the same thing as the property [[minwidth]], although they
       are closely related.
       
-      <heading title="The Size of the Root Box"/>
-  
-      When the user resizes a window, Ibex changes the root box's
-      [[maxwidth]] and [[maxheight]] to match the size chosen by
-      the user and then determines the root box's size using the same sizing
-      rules it uses for other boxes.
-      
-      Ibex will always attempt to prevent the
-      user from making the surface smaller than the root box's
-      [[minwidth]] and [[minheight]].  If the [[hshrink]] or
-      [[vshrink]] flag is set, Ibex will try to prevent the user from
-      resizing the surface at all.  However, not all platforms give Ibex
-      enough control to do this.
-      
-    <heading title="The alignment point"/>
-  
-      When talking about positioning, we will often refer to the
-      **alignment point**.
-      
-          If the [[align]] property is "[[center]]", then the
-          alignment point is the center of the box.
-          
-          If the [[align]] property is "[[topleft]]",
-          "[[bottomleft]]", "[[topright]]", or
-          "[[bottomright]]", then the alignment point is
-          corresponding corner of the box.
-          
-          If the [[align]] property is "[[top]]",
-          "[[bottom]]", "[[right]]", or "[[left]]", then
-          the alignment point is middle of the corresponding edge of the
-          box.
-  
     <section title="Packing">
   
       A grid of **cells** is created within the parent.  If the
       infinite number of columns.  Either [[cols]] or [[rows]]
       must be zero, but not both.
           
-      If a child's [[visible]] property is [[false]], it does
-      not occupy any cells (and is not rendered).  Otherwise, each child
-      occupies a rectangular set of cells [[child.colspan]] cells
-      wide and [[child.rowspan]] cells high.
+      <heading title="Target Regions"/>
+
+      A box's target region is the portion of its parent which the
+      layout algorithm has determined that the box should occupy.  A
+      box's target region is determined mainly by the value of its
+      [[pinned]] property:
+
+      <property name="pinned" type="box" default="null">
+          If a box's [[pinned]] property is [[null]], it is said to be
+          "unpinned" or "not pinned".  In this case, the box's target
+          region will be the set of cells in its parent which it
+          occupies.
+
+          If a box's [[pinned]] region is set to some other box, then
+          this box's target region will be the projection of that
+          other box's actual dimensions and position, projected onto
+          this box's parent.  The net effect is that the pinned box
+          will "track" the size and position of the box it is pinned
+          to.  A box may not be pinned to one of its descendants, nor
+          may boxes be pinned in a cycle (A is pinned to B, B is
+          pinned to C, and C is pinned to A).
+          </property>
+
+      If a child's [[visible]] property is [[false]], it does not
+      occupy any cells (and is not rendered).  If a box's [[pinned]]
+      property (described below) is non-[[null]], it does not occupy
+      any cells and is exempt from the packing process.  Otherwise,
+      each child occupies a rectangular set of cells [[child.colspan]]
+      cells wide and [[child.rowspan]] cells high.
           
       The Core iterates over the cells in the grid in the following
       order: if [[rows]] is 0, the Core iterates across each column
       before proceeding to the next row; otherwise rows come before
       columns.  At each cell, the Core attempts to place the **first
-      remaining unplaced child's** top-left corner in that cell
-      (with the child occupying some set of cells extending down and
-      to the right of that cell).  If the parent has a fixed number of
-      columns and the child's [[colspan]] exceeds that limit, the
-      child is placed in column zero regardless, but only occupies the
-      available set of cells (it does not "hang off the end" of the
-      box).  <image url="layout.pdf" width="1in"/>
+      remaining unplaced, packed child's** top-left corner in that
+      cell (with the child occupying some set of cells extending down
+      and to the right of that cell).  If the parent has a fixed
+      number of columns and the child's [[colspan]] exceeds that
+      limit, the child is placed in column zero regardless, but only
+      occupies the available set of cells (it does not "hang off the
+      end" of the box).  <image url="layout.pdf" width="1in"/>
       
       <pre>
       <ui:box cols="3">
       </section>
   
     <section title="Constraining">
-  
       Each box's minimum width is computed recursively as the
       maximum of:
   
       <list>
           Its [[minwidth]]
                
-          The width of the box's [[text]] (after applying the
-          box's [[transform]]) [**Note: Vector Graphics support
-          (including the [[transform]] property) is currently not
-          implemented**].
+          The width of its [[path]]
                
-          The width of the box's path (after applying the box's
-          [[transform]]) **if the box is [[packed]]**.
-               
-          The minimum width of the children in each row.
+          The sum of the widths of the bounding boxes enclosing its
+          children, when those children are sized to **their own**
+          minimum widths.
+
+          The box's minimum **height** multiplied by its [[aspect]],
+          if its aspect is not [[0]] (unspecified).
       </list>
-          
+
       If a box's [[hshrink]] property is set to
       [[true]], the box's maximum width is the same as its
       minimum width; otherwise it is the box's
       [[maxwidth]].
-
     </section>  
 
     <section title="Placing">
-  
-      <heading title="Non-Packed Boxes"/>
 
-      Each non-packed box is transformed according to the parent's
-      [[transform]] property and then positioned so that its alignment
-      point is [[(child.x, child.y)]] pixels from the corresponding
-      edge/corner/center of its parent.
+      <heading title="Target Origin"/>
+
+      Once the box's size and the size and position of its target
+      region have been computed, the box is placed relative to its
+      **target origin**, which is determined by by the [[origin]]
+      property:
+
+      <property name="origin" type="string" default="center">
+          Determines which corner of the box's target region should be
+          treated as the origin for layout purposes.
+
+          If the [[origin]] property is "[[center]]", then the
+          target origin is at the center of the target region.
+          
+          If the [[origin]] property is "[[topleft]]",
+          "[[bottomleft]]", "[[topright]]", or "[[bottomright]]", then
+          the target origin is at the corresponding corner of the
+          target region.
+          
+          If the [[origin]] property is "[[top]]", "[[bottom]]",
+          "[[right]]", or "[[left]]", then the target origin is middle
+          of the corresponding edge of the target region.
+          </property>
+
+      <property name="x y" type="number" default="0">
+          Determines the offset from the box's origin at which it will
+          be placed.
+          </property>
+
+      If the box's [[hshrink]] property is not set, it is expanded to
+      its maximum width, but no larger than its parent's width.
+
+      Finally, if the child has a nonzero [[aspect]], one of its
+      dimensions (either width or height) will **grow** in order to
+      ensure that [[width == height * aspect]].  This may cause the
+      child to exceed the paren't size.
+
+      <heading title="Non-Packed Boxes with a transform"/>
+
+      First, the coordinate space in which the child is positioned is
+      translated so that the origin coincides with the
+      corner/edge/center of the box's parent corresponding to the
+      child's [[align]] property.  The child's [[transform]] attribute
+      is applied to the coordinate space, and the child is positioned
+      in this transformed space with its aligment point at the origin.
+
+      The following diagram may be helpful:
+
+      FIXME: diagram
 
       <heading title="Packed Boxes"/>
 
+      Thoughout this section, when we refer to the [[minwidth]],
+      [[maxwidth]], or minimum width of a child box, we are referring
+      to the corresponding dimension of the child's **bounding box**
+      -- the smallest rectangle **in the parent's coordinate space**
+      that completely encloses the child's path.
+
       Ibex formulates a set of constraints for placing a box's
       **packed** children as follows:
 
       <list>
-          - A box's width can be no greater than the sum of the
+            A box's width can be no greater than the sum of the
             columns it occupies
-          - The sum of a set of colums cannot be smaller than the
+
+            The sum of a set of colums cannot be smaller than the
             minimum width of a box that spans them.
-          - The sum of the widths of the parents' columns will be at
+
+            The sum of the widths of the parents' columns will be at
             least as large as the parent's width is (but possibly
             larger).
       </list>
       prioritized from most important to least important:
 
       <list>
-          - (__Most Important__) The sum of all columns will be a close
+            (__Most Important__) The sum of all columns will be a close
             to the parent's with as possible (ie as small as possible)
-          - Ibex will attempt to make a set of columns no wider than
+
+            Ibex will attempt to make a set of columns no wider than
             the [[maxwidth]] of a box spanning them.
-          - (__Least Important__) Ibex will attempt to make all
-            columns the same width.
+
+            Ibex will attempt to make all
+            columns the same width. (**least important**)
       </list>
 
       Each packed box is then placed within the set of cells that it
       spans.  Usually the box will exactly fill this rectangle; if it
-      does not (due to [[maxwidth]] or minimum width constraints), the
-      box's will be placed so that its alignment point coincides with
-      the alignment point of that rectangle of cells.
+      does not (due to [[maxwidth]], minimum width, or aspect
+      constraints), the box's will be placed so that its alignment
+      point coincides with the alignment point of that rectangle of
+      cells.
 
+      <heading title="The Size of the Root Box"/>
+  
+      When the user resizes a window, Ibex changes the root box's
+      [[maxwidth]] and [[maxheight]] to match the size chosen by
+      the user and then determines the root box's size using the same sizing
+      rules it uses for other boxes.
+      
+      Ibex will always attempt to prevent the
+      user from making the surface smaller than the root box's
+      [[minwidth]] and [[minheight]].  If the [[hshrink]] or
+      [[vshrink]] flag is set, Ibex will try to prevent the user from
+      resizing the surface at all.  However, not all platforms give Ibex
+      enough control to do this.
+      
   </section>
 
-  <section title="Rendering">
-
-    Boxes are rendered in a depth-first, pre-order traversal.  Note that
-    this may cause a non-packed box to overlap its siblings.
-    
-    <list type="ordered">
-        
-        If the box's [[transform]] property is non-null, the
-        coordinate space is transformed accordingly for the rest of
-        this phase and for the rendering of all children.  [**Note:
-        Vector Graphics support (including the [[transform]]
-        property) is currently not implemented**].
-        
-        If the box is packed and has a non-[[null]] path, the
-        path is translated such that the alignment point of the path's
-        bounding box coincides with the box's alignment point (both
-        alignment points are determined by the box's [[align]]
-        property).
-        
-        If a box has a path, that path is filled with the color,
-        gradient, or image specified by the [[fill]] property and
-        stroked with the color and width specified by the
-        [[strokecolor]] and [[strokewidth]] properties.
-        
-        If the box has a non-null [[text]] attribute,
-        the text is rendered in [[font]] with size
-        [[fontsize]] and color [[textcolor]].  The text is
-        then translated such that the alignment point of the text's
-        bounding box coincides with the box's alignment point (both
-        alignment points are determined by the box's [[align]]
-        property).
-        
-        The box's children are rendered (pre-order traversal).
-
-    </list>
-    
-    </section>
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
   meaning, which will be explained later.  Each box's numeric
   properties hold its **child boxes**.
 
-  <section title="Rendering Properties">
-
-    Every box has several special properties which control how it is
-    drawn. In general, if you put an
-    invalid value to a special property, no action will be taken -- the
-    put will be ignored.
-    
-    <property name="strokecolor" type="string" default="clear">
-
-             If the value is a 5-character hex string ([[#RGB]]),
-             7-character hex string ([[#RRGGBB]]), 9-character hex
-             string ([[#AARRGGBB]]), the box's stroke color will be set
-             to that color. 
-
-             If the value is one of the <link
-             url="http://www.color.org/ICC-1A_1999-04.PDF"
-             text="ICC"/> colors (the same set of color names
-             supported by SVG), the stroke color be set to that color.
-
-             If the value is [[null]], the stroke color will be set
-             to clear ([[#00000000]]).
-             </property>
-    
-    <property name="strokewidth" type="int" default="1">
-             The width (in pixels) to stroke the path with.
-             </property>
-    
-    <property name="fill">
-             This property can be set to any of the values specified for
-             [[strokecolor]].  
-             Alternatively, if the value written is an object, its stream
-             will be read and interpreted as a PNG, GIF, or JPEG image,
-             which will become the texture for this box, and the box's
-             [[minwidth]] and [[minheight]] properties will be
-             automatically set to the dimensions of the image.
-             </property>
-    
-    <property name="path" type="string" default='""'>
-            The box's path.  The grammar and feature set supported are
-            identical to that specified in <link
-            url="http://www.w3.org/TR/SVG11/paths.html" text="SVG 1.1,
-            section 8"/>.
-            </property>
-    
-    <property name="text" type="string" default='""'>
-            The box's text; writing [[null]] to this property sets it
-            to [[""]].
-            </property>
-    
-    <property name="textcolor" type="number" default="black">
-            The color in which to render the font; accepts the same values as [[strokecolor]].
-            </property>
-
-    <property name="font" type="stream" default=".ibex.ui.font.sansserif">
-            When an object is written to this property, its stream is read
-            using the <link url="http://www.freetype.org" text="FreeType 2 library"/>,
-            and the resulting font is used to render the
-            box's [[text]].
-            </property>
-            
-    <property name="fontsize" type="number" default="10">
-            The size (in points) to render the text.
-            </property>
-    
-    </section>
-
-  <section title="Layout Properties">
-    
-    <property name="shrink" type="boolean" default="false">
-        If set to [[true]], this box will shrink
-        (horizontally/vertically/both) to the smallest size allowed by
-        its children and the bounding box of its path.
-        </property>
-    
-    <property name="x y" type="integer" default="varies">
-        If the box is a root box, this is the (x/y)-coordinate of the
-        surface; otherwise it is the distance between the parent's
-        alignment point and the corresponding corner/edge/center of
-        its parent.
-        </property>
-    
-    <property name="minwidth minheight" type="integer" default="0">
-        The desired minimum width and height.
-        </property>
-    
-    <property name="maxwidth maxheight" type="integer" default="ibex.ui.maxdim">
-        The desired maximum width and height.
-        </property>
-    
-    <property name="width height" type="integer">
-        When read, this is the current (width/height) of this box.
-        Writing to this property is equivalent to writing to
-        **both** the minimum and maximum (width/height).
-        </property>
-    
-    <property name="cols rows" type="integer" default="0">
-        The number of (columns/rows) in which to lay out the children of this
-        box.  If set to zero, the number of (columns/rows) is unconstrained.
-        Either [[rows]] or [[cols]] must be zero.  If
-        [[0]] is written to [[cols]] when [[rows]] is
-        [[0]], the write is ignored.  If a nonzero value is
-        written to [[cols]] when [[rows]] is nonzero,
-        [[rows]] is set to [[0]], and vice versa.
-        </property>
-    
-    <property name="colspan rowspan" type="integer" default="1">
-        The number of (columns/rows) that this box spans within its parent.
-        </property>
-    
-    <property name="align" type="string" default="center">
-        Determines the box's alignment point for positioning its text,
-        texture, path, and children.
-        </property>
-    
-    <property name="visible" type="boolean" default="true">
-        If set to [[false]], this box will be rendered as if its
-        width and height were zero. If this is a root box, the
-        associated surface will be hidden.
-
-        When reading from this property, the value [[false]] will
-        be returned if this box **or any of its ancestors** is not
-        visible.  Thus it is possible to write [[true]] to a box's
-        [[visible]] property and then read back [[false]].
-        </property>
-    
-    <property name="packed" type="boolean" default="true">
-        The layout strategy for this box.  If set to [[true]], the
-        box occupies no cells and is laid out independently of its
-        siblings.
-        </property>
-    
-    </section>
-
   <section title="Child Control Properties">
     
     <property name="redirect" type="box" default="thisbox">
     
    
     <property name="surface" type="" default="null">
-        FIXME
         If this box has a parent, this property returns
         [[**parent**.surface]]; otherwise it returns null.
         This property is a simple building block that the widget
         windows.
         </property>
     
-    <property name="Maximized">
+    <property name="Maximized Minimized">
         The value [[true]] is put to this property on the root box
-        when the surface is maximized, and [[false]] when the surface
-        is un-maximized. Reading from this value will return [[true]]
-        if the surface is maximized and [[false]] if it is
-        not. Putting [[true]] to this property will maximize the
-        window, and putting [[false]] to this property will
-        unmaximize the window.
+        when the surface is maximized/minimized, and [[false]] when
+        the surface is un-maximized/minimized. Reading from this value
+        will return [[true]] if the surface is maximized/minimized and
+        [[false]] if it is not. Putting [[true]] to this property will
+        maximize/minimize the window, and putting [[false]] to this
+        property will unmaximize/unminimize the window.
+
         Note that not all platforms support maximization.
         </property>
     
-    <property name="Minimized">
-        The value [[true]] is put to this property on the root box
-        when the surface is minimized, and [[false]] when the surface
-        is unminimized. Reading from this value will return [[true]]
-        if the surface is minimized and [[false]] if it is
-        not. Putting [[true]] to this property will minimize the
-        window, and putting [[false]] will unminimize it.
-        </property>
-    
     <property name="Close">
         When the user attempts to close a surface, the value
         [[true]] will be put to this property. Scripts may trap
         property.
         </property>
     
-    <property name="icon">
-        The surface's icon. This is usually displayed on the titlebar of a
-        window.  The value should be an object whose stream is a PNG image. Note
-        that not all platforms support this property.
+    <property name="titlebar">
+        The surface's titlebar text and icon.  If a string is written
+        to this property, the surface's titlebar text is set to that
+        string; if a stream yielding an image is written, the
+        surface's icon is set to that image.  Note that not all
+        platforms support this property. Only ASCII characters
+        0x20-0x7F are permitted.
         </property>
     
-    <property name="titlebar">
-        The surface's titlebar text. Note that not all platforms support
-        this property. Only ASCII characters 0x20-0x7F are permitted.
+    </section>
+
+  </section>
+
+
+<section title="Events">
+
+    Every execution of the Event Context begins with an event, which
+    consists of a key/value pair, and a mouse position, which consists of
+    an x and y coordinate.  The possible keys are [[_Press[1-3]]],
+    [[_Release[1-3]]], [[_Click[1-3]]], [[_DoubleClick[1-3]]],
+    [[_Move]], [[_KeyPressed]], and [[_KeyReleased]].
+    
+    Here are two example events:
+    
+    An event is triggered by writing the key to the value on a box.  This
+    triggers any trap handlers which may be present.  Once these handlers
+    have executed, Ibex figures out which child of the current box contains
+    the mouse (taking into account that some boxes may cover up others)
+    and writes the key and value to that box.  If none of the box's
+    children contain the mouse position, Ibex removes the leading
+    underscore from the key name and writes the value to
+    **that** property.  Once all the traps on that property have
+    executed, the value is written to the box's parent.
+    
+    Intuitively, Ibex delivers the underscored event to every box from the
+    root to the target, and then delivers the non-underscored event to
+    that same set of boxes in reverse order.  So the event travels down
+    the tree to the target, and then back up to the root.  The following
+    example prints out "first second third fourth" in that order.
+    
+    <pre>
+    <ui:box>
+        _Press1 ++= function(b) { ibex.log.info("first"); }
+         Press1 ++= function(b) { ibex.log.info("fourth"); }
+        <ui:box>
+          _Press1 ++= function(b) { ibex.log.info("second"); }
+           Press1 ++= function(b) { ibex.log.info("third"); }
+        </ui:box>
+    </ui:box>
+    </pre>
+
+    In general, you should use the **non-underscore** names to respond
+    to user input and use the underscored names when you want to override
+    child boxes' behavior or route events to particular boxes (for
+    example, when implementing a focus protocol).  This is why the
+    underscored elements are delivered to parents before children (so
+    parents can override their childrens' behavior), but non-underscored
+    events are delivered to children before parents (since, visually, a
+    mouse click is usually "intended" for the leaf box underneath the
+    cursor).
+    
+  <heading title="Stopping the Process"/>
+
+    At any point in this sequence, a trap handler can choose not to
+    cascade (by returning [[true]] from the trap handler function).
+    This will immediately cease the propagation of the event.  This is how
+    you would indicate that an event has been "handled".
+    
+  <heading title="Non-Propagating Events"/>
+
+    Ibex uses the following events to notify a box about changes that
+    only matter to that particular box.  These events do not propagate
+    either up or down the tree.
+
+    <property name="Enter Leave">
+        The value [[true]] is written to this property when the mouse (enters/leaves) the box.
+        </property>
+    
+    <property name="SizeChange">
+        The value [[true]] is put to this property after the size
+        of this box changes.
+        </property>
+
+    <property name="ChildChange">
+        When a child is added or removed, that child is written to
+        this property.  The write is always performed **after** the
+        addition or removal, so these two cases can be distinguished
+        by checking [[indexof(child)]].
+
+        Note that if the parent's redirect target is set to another
+        box, this trap will only be invoked when children are
+        manipulated by reading and writing to the parent.  Reads and
+        writes directly to the redirect target will **not** trigger
+        this trap.
+
+        Note also that this traps is still triggered if a box's
+        [[redirect]] target is **null**.  This is useful for
+        boxes that need to accept children and then relocate them
+        elsewhere.
+        </property>
+    
+  <section title="Listing of Events">
+    
+    <property name="Press1 Press2 Press3">
+        Indicates that the use has pressed a mouse button.  On
+        platforms with three mouse buttons, the **middle** button
+        is button 3 -- this ensures that applications written to only
+        use two buttons (1 and 2) will work intuitively on three button
+        platforms.
+        </property>
+    
+    <property name="Release1 Release2 Release3">
+        Indicates that the use has released a mouse button.
+        </property>
+    
+    <property name="Click1 Click2 Click3">
+        Indicates that the user has pressed and released the
+        mouse button without moving the mouse much (exactly how
+        much is platform-dependent).
+        </property>
+    
+    <property name="DoubleClick1 DoubleClick2 DoubleClick3">
+        Indicates that the user has clicked the 
+        mouse button twice within a short period of time (exactly how long is platform-dependent).
         </property>
     
+    <property name="Move">
+        Indicates that the mouse has moved while within this box, or that
+        the mouse while outside this box **if a button was pressed while within this box and has not yet been released**
+        </property>
+    
+    <property name="KeyPressed KeyReleased">
+
+        A string is written to this property when a key is pressed or
+        released If the key was any other key, a multi-character
+        string describing the key will be put. For simplicity, we use
+        the VK_ constants in the <link
+        url="http://java.sun.com/products/jdk/1.1/docs/api/java.awt.event.KeyEvent.html#VK_0"
+        text=" Java 1.1 API java.awt.event.KeyEvent class"/>.  When a
+        key is pressed or released, the string put will be the portion
+        of its VK_ constant after the underscore, all in lower case.
+
+        <list>
+        If the shift key was depressed immediately before the
+        event took place, then the string will be capitalized. Special
+        keynames are also capitalized; shift+home is reported as
+        "[[HOME]]".  Symbols are capitalized as they appear on the
+        keyboard; for example, on an American QWERTY keyboard, shift+2
+        is reported as "[[@]]".
+
+        If the alt, meta, or command key was depressed immediately
+        before this key was pressed, then the string will be prefixed
+        with the string "[[A-]]". If the control key was depressed
+        while this key was pressed, then the string will be prefixed
+        with the string "[[C-]]". If both alt and control are
+        depressed, the string is prefixed with "[[C-A-]]".
+
+        Ibex does not distinguish between a key press resulting from
+        the user physically pushing down a key, and a 'key press'
+        resulting from the keyboard's typematic repeat. In the rare
+        case that an application needs to distinguish between these
+        two events, it should watch for KeyReleased messages and
+        maintain an internal key-state vector.
+        </list>
+        </property>
+    </section>
+  <section title="Re-routing events">
+
+    At any point in the Event Context, you can write to the [[mouse]]
+    property on any box.  The value written should be an object with two
+    properties, [[x]] and [[y]].  For example:
+    
+    <pre>
+    _Press1 ++= function(p) {
+        mouse = { x: 32, y: 77 };
+    }
+    </pre>
+
+    The coordinates specified are relative to the box whose [[mouse]]
+    property is being written to.  There is no need to supply the
+    [[inside]] property; it is computed automatically.  Writing to
+    the [[mouse]] property causes Ibex to recompute the eventual
+    target box, and also alter the values returned by [[mouse.x]],
+    [[mouse.y]], and [[mouse.inside]] for any **descendants**
+    of the current box.  Writing to the [[mouse]] property also
+    automatically prevents the event from returning to the box's parents
+    -- it is equivalent to not cascading on the non-underscored event.
+    This ensures that child boxes cannot trick their parent boxes into
+    thinking that the mouse has moved.
+    
+    If you want the event to "skip over" the boxes between the trapee
+    and the target, or if you want to re-route an event to a box which
+    is not a descendant of the current box, simply write the value to
+    the proper key on the target box.
+    
+    <pre>
+    <ui:box>
+        _KeyPressed = function(k) { ibex.log.info("first"); }
+         KeyPressed = function(k) { ibex.log.info("sixth"); }
+        $recipient.target = $target;
+        <ui:box id="recipient">
+            _KeyPressed = function(k) {
+                ibex.log.info("second");
+                thisbox.target.KeyPressed = k;
+                // inhibit cascade; keep event from going to $excluded
+                return true;
+            }
+             KeyPressed = function(k) { ibex.log.info("fifth"); }
+            <ui:box id="excluded">
+                _KeyPressed = function(k) {
+                   ibex.log.info("this never happens");
+                }
+            </ui:box>
+        </ui:box>
+        <ui:box id="target"> 
+            _KeyPressed = function(k) { ibex.log.info("third"); }
+             KeyPressed = function(k) { ibex.log.info("fourth"); }
+        </ui:box>
+    </ui:box>
+    </pre>
+
+    </section>
+
+  <section title="Synthesizing Your Own Events">
+
+    You can create "fake events" by simply writing to the [[mouse]]
+    property and then writing a value to one of the underscored properties
+    on a box.  This will have exactly the same effect as if the use had
+    actually pressed a key, clicked a button, or moved the mouse -- they
+    are indistinguishable.
+    
     </section>
+ </section>
 
-  </section>
+</section>
 
+<section title="Ibex Base Services">
 <!-- ----------------------------------------------------------------------- -->
 <section title="Streams">
     
     </section>
 
 
-<!-- ----------------------------------------------------------------------- -->
-<section title="Threads">
-
   <section title="Contexts">
 
     From the perspective of an application writer, Ibex is strictly
     
     </section>
 </section>
-
-<section title="Events">
-
-    Every execution of the Event Context begins with an event, which
-    consists of a key/value pair, and a mouse position, which consists of
-    an x and y coordinate.  The possible keys are [[_Press[1-3]]],
-    [[_Release[1-3]]], [[_Click[1-3]]], [[_DoubleClick[1-3]]],
-    [[_Move]], [[_KeyPressed]], and [[_KeyReleased]].
-    
-    Here are two example events:
-    
-    An event is triggered by writing the key to the value on a box.  This
-    triggers any trap handlers which may be present.  Once these handlers
-    have executed, Ibex figures out which child of the current box contains
-    the mouse (taking into account that some boxes may cover up others)
-    and writes the key and value to that box.  If none of the box's
-    children contain the mouse position, Ibex removes the leading
-    underscore from the key name and writes the value to
-    **that** property.  Once all the traps on that property have
-    executed, the value is written to the box's parent.
-    
-    Intuitively, Ibex delivers the underscored event to every box from the
-    root to the target, and then delivers the non-underscored event to
-    that same set of boxes in reverse order.  So the event travels down
-    the tree to the target, and then back up to the root.  The following
-    example prints out "first second third fourth" in that order.
-    
-    <pre>
-    <ui:box>
-        _Press1 ++= function(b) { ibex.log.info("first"); }
-         Press1 ++= function(b) { ibex.log.info("fourth"); }
-        <ui:box>
-          _Press1 ++= function(b) { ibex.log.info("second"); }
-           Press1 ++= function(b) { ibex.log.info("third"); }
-        </ui:box>
-    </ui:box>
-    </pre>
-
-    In general, you should use the **non-underscore** names to respond
-    to user input and use the underscored names when you want to override
-    child boxes' behavior or route events to particular boxes (for
-    example, when implementing a focus protocol).  This is why the
-    underscored elements are delivered to parents before children (so
-    parents can override their childrens' behavior), but non-underscored
-    events are delivered to children before parents (since, visually, a
-    mouse click is usually "intended" for the leaf box underneath the
-    cursor).
-    
-    </section>
-
-  <heading title="Stopping the Process"/>
-
-    At any point in this sequence, a trap handler can choose not to
-    cascade (by returning [[true]] from the trap handler function).
-    This will immediately cease the propagation of the event.  This is how
-    you would indicate that an event has been "handled".
-    
-  <heading title="Non-Propagating Events"/>
-
-    Ibex uses the following events to notify a box about changes that
-    only matter to that particular box.  These events do not propagate
-    either up or down the tree.
-
-    <property name="Enter Leave">
-        The value [[true]] is written to this property when the mouse (enters/leaves) the box.
-        </property>
-    
-    <property name="SizeChange">
-        The value [[true]] is put to this property after the size
-        of this box changes.
-        </property>
-
-    <property name="ChildChange">
-        When a child is added or removed, that child is written to
-        this property.  The write is always performed **after** the
-        addition or removal, so these two cases can be distinguished
-        by checking [[indexof(child)]].
-
-        Note that if the parent's redirect target is set to another
-        box, this trap will only be invoked when children are
-        manipulated by reading and writing to the parent.  Reads and
-        writes directly to the redirect target will **not** trigger
-        this trap.
-
-        Note also that this traps is still triggered if a box's
-        [[redirect]] target is **null**.  This is useful for
-        boxes that need to accept children and then relocate them
-        elsewhere.
-        </property>
-    
-  <section title="Listing of Events">
-    
-    <property name="Press1 Press2 Press3">
-        Indicates that the use has pressed a mouse button.  On
-        platforms with three mouse buttons, the **middle** button
-        is button 3 -- this ensures that applications written to only
-        use two buttons (1 and 2) will work intuitively on three button
-        platforms.
-        </property>
-    
-    <property name="Release1 Release2 Release3">
-        Indicates that the use has released a mouse button.
-        </property>
-    
-    <property name="Click1 Click2 Click3">
-        Indicates that the user has pressed and released the
-        mouse button without moving the mouse much (exactly how
-        much is platform-dependent).
-        </property>
-    
-    <property name="DoubleClick1 DoubleClick2 DoubleClick3">
-        Indicates that the user has clicked the 
-        mouse button twice within a short period of time (exactly how long is platform-dependent).
-        </property>
-    
-    <property name="Move">
-        Indicates that the mouse has moved while within this box, or that
-        the mouse while outside this box **if a button was pressed while within this box and has not yet been released**
-        </property>
-    
-    <property name="KeyPressed KeyReleased">
-
-        A string is written to this property when a key is pressed or
-        released If the key was any other key, a multi-character
-        string describing the key will be put. For simplicity, we use
-        the VK_ constants in the <link
-        url="http://java.sun.com/products/jdk/1.1/docs/api/java.awt.event.KeyEvent.html#VK_0"
-        text=" Java 1.1 API java.awt.event.KeyEvent class"/>.  When a
-        key is pressed or released, the string put will be the portion
-        of its VK_ constant after the underscore, all in lower case.
-
-        <list>
-        If the shift key was depressed immediately before the
-        event took place, then the string will be capitalized. Special
-        keynames are also capitalized; shift+home is reported as
-        "[[HOME]]".  Symbols are capitalized as they appear on the
-        keyboard; for example, on an American QWERTY keyboard, shift+2
-        is reported as "[[@]]".
-
-        If the alt, meta, or command key was depressed immediately
-        before this key was pressed, then the string will be prefixed
-        with the string "[[A-]]". If the control key was depressed
-        while this key was pressed, then the string will be prefixed
-        with the string "[[C-]]". If both alt and control are
-        depressed, the string is prefixed with "[[C-A-]]".
-
-        Ibex does not distinguish between a key press resulting from
-        the user physically pushing down a key, and a 'key press'
-        resulting from the keyboard's typematic repeat. In the rare
-        case that an application needs to distinguish between these
-        two events, it should watch for KeyReleased messages and
-        maintain an internal key-state vector.
-        </list>
-        </property>
-
-    </section>
-
-</section>
-
 <!-- ----------------------------------------------------------------------- -->
 <section title="Networking">
     
     
   </section>
 
-<!-- ----------------------------------------------------------------------- -->
-<section title="Advanced Topics">
-
-  <section title="Re-routing events">
-
-    At any point in the Event Context, you can write to the [[mouse]]
-    property on any box.  The value written should be an object with two
-    properties, [[x]] and [[y]].  For example:
-    
-    <pre>
-    _Press1 ++= function(p) {
-        mouse = { x: 32, y: 77 };
-    }
-    </pre>
-
-    The coordinates specified are relative to the box whose [[mouse]]
-    property is being written to.  There is no need to supply the
-    [[inside]] property; it is computed automatically.  Writing to
-    the [[mouse]] property causes Ibex to recompute the eventual
-    target box, and also alter the values returned by [[mouse.x]],
-    [[mouse.y]], and [[mouse.inside]] for any **descendants**
-    of the current box.  Writing to the [[mouse]] property also
-    automatically prevents the event from returning to the box's parents
-    -- it is equivalent to not cascading on the non-underscored event.
-    This ensures that child boxes cannot trick their parent boxes into
-    thinking that the mouse has moved.
-    
-    If you want the event to "skip over" the boxes between the trapee
-    and the target, or if you want to re-route an event to a box which
-    is not a descendant of the current box, simply write the value to
-    the proper key on the target box.
-    
-    <pre>
-    <ui:box>
-        _KeyPressed = function(k) { ibex.log.info("first"); }
-         KeyPressed = function(k) { ibex.log.info("sixth"); }
-        $recipient.target = $target;
-        <ui:box id="recipient">
-            _KeyPressed = function(k) {
-                ibex.log.info("second");
-                thisbox.target.KeyPressed = k;
-                // inhibit cascade; keep event from going to $excluded
-                return true;
-            }
-             KeyPressed = function(k) { ibex.log.info("fifth"); }
-            <ui:box id="excluded">
-                _KeyPressed = function(k) {
-                   ibex.log.info("this never happens");
-                }
-            </ui:box>
-        </ui:box>
-        <ui:box id="target"> 
-            _KeyPressed = function(k) { ibex.log.info("third"); }
-             KeyPressed = function(k) { ibex.log.info("fourth"); }
-        </ui:box>
-    </ui:box>
-    </pre>
-
-    </section>
-
-  <section title="Synthesizing Your Own Events">
-
-    You can create "fake events" by simply writing to the [[mouse]]
-    property and then writing a value to one of the underscored properties
-    on a box.  This will have exactly the same effect as if the use had
-    actually pressed a key, clicked a button, or moved the mouse -- they
-    are indistinguishable.
-    
-    </section>
 
   <section title="Ibex self-emulation">
 
     new_ibex.load ++= function() { return newLoadFunction; }
     ibex.apply(ibex.box, .main, new_ibex);
     </pre>
-  </section>
+</section>
 </section>
 
 <!-- ----------------------------------------------------------------------- -->