]> granicus.if.org Git - graphviz/commitdiff
more SBOLv shapes from Jenny Cheng
authorJohn Ellson <ellson@research.att.com>
Wed, 19 Sep 2012 16:20:20 +0000 (12:20 -0400)
committerJohn Ellson <ellson@research.att.com>
Wed, 19 Sep 2012 16:20:20 +0000 (12:20 -0400)
141 files changed:
doc/info/Mcircle.gif
doc/info/Mdiamond.gif
doc/info/Msquare.gif
doc/info/a_box.gif
doc/info/a_crow.gif
doc/info/a_curve.gif [new file with mode: 0644]
doc/info/a_diamond.gif
doc/info/a_dot.gif
doc/info/a_ediamond.gif
doc/info/a_empty.gif
doc/info/a_halfopen.gif
doc/info/a_inv.gif
doc/info/a_invdot.gif
doc/info/a_invempty.gif
doc/info/a_invodot.gif
doc/info/a_lteeoldiamond.gif
doc/info/a_none.gif
doc/info/a_normal.gif
doc/info/a_obox.gif
doc/info/a_odiamond.gif
doc/info/a_odot.gif
doc/info/a_open.gif
doc/info/a_tee.gif
doc/info/aa_box.gif
doc/info/aa_crow.gif
doc/info/aa_curve.gif [new file with mode: 0644]
doc/info/aa_diamond.gif
doc/info/aa_dot.gif
doc/info/aa_inv.gif
doc/info/aa_lbox.gif
doc/info/aa_lcrow.gif
doc/info/aa_lcurve.gif [new file with mode: 0644]
doc/info/aa_ldiamond.gif
doc/info/aa_linv.gif
doc/info/aa_lnormal.gif
doc/info/aa_ltee.gif
doc/info/aa_lvee.gif
doc/info/aa_none.gif
doc/info/aa_normal.gif
doc/info/aa_obox.gif
doc/info/aa_odiamond.gif
doc/info/aa_odot.gif
doc/info/aa_oinv.gif
doc/info/aa_olbox.gif
doc/info/aa_oldiamond.gif
doc/info/aa_olinv.gif
doc/info/aa_olnormal.gif
doc/info/aa_onormal.gif
doc/info/aa_orbox.gif
doc/info/aa_ordiamond.gif
doc/info/aa_orinv.gif
doc/info/aa_ornormal.gif
doc/info/aa_rbox.gif
doc/info/aa_rcrow.gif
doc/info/aa_rcurve.gif [new file with mode: 0644]
doc/info/aa_rdiamond.gif
doc/info/aa_rinv.gif
doc/info/aa_rnormal.gif
doc/info/aa_rtee.gif
doc/info/aa_rvee.gif
doc/info/aa_tee.gif
doc/info/aa_vee.gif
doc/info/arrows.html
doc/info/assembly.gif [new file with mode: 0644]
doc/info/box.gif
doc/info/box3d.gif
doc/info/cds.gif [new file with mode: 0644]
doc/info/circle.gif
doc/info/colorlist.gif
doc/info/component.gif
doc/info/constraint.gif
doc/info/diamond.gif
doc/info/doublecircle.gif
doc/info/doubleoctagon.gif
doc/info/ellipse.gif
doc/info/fill.gif
doc/info/fivepoverhang.gif [new file with mode: 0644]
doc/info/folder.gif
doc/info/g_lin0.png
doc/info/g_lin180.png
doc/info/g_lin270.png
doc/info/g_lin360.png
doc/info/g_lin45.png
doc/info/g_lin90.png
doc/info/g_rad0.png
doc/info/g_rad180.png
doc/info/g_rad270.png
doc/info/g_rad360.png
doc/info/g_rad45.png
doc/info/g_rad90.png
doc/info/hexagon.gif
doc/info/house.gif
doc/info/html1.gif
doc/info/html2.gif
doc/info/html3.gif
doc/info/html4.gif
doc/info/insulator.gif [new file with mode: 0644]
doc/info/invhouse.gif
doc/info/invtrapezium.gif
doc/info/invtriangle.gif
doc/info/larrow.gif [deleted file]
doc/info/lpromoter.gif [deleted file]
doc/info/mrecord.gif
doc/info/none.gif
doc/info/noverhang.gif [new file with mode: 0644]
doc/info/oval.gif
doc/info/parallelogram.gif
doc/info/pentagon.gif
doc/info/plaintext.gif
doc/info/point.gif
doc/info/primersite.gif [new file with mode: 0644]
doc/info/promoter.gif [new file with mode: 0644]
doc/info/proteasesite.gif [new file with mode: 0644]
doc/info/proteinstab.gif [new file with mode: 0644]
doc/info/rarrow.gif [deleted file]
doc/info/record.gif
doc/info/record2.gif
doc/info/rect.gif
doc/info/rectangle.gif
doc/info/restrictionsite.gif [new file with mode: 0644]
doc/info/ribosite.gif [new file with mode: 0644]
doc/info/rnastab.gif [new file with mode: 0644]
doc/info/round.gif
doc/info/rpromoter.gif [deleted file]
doc/info/sdlshapes.jpg
doc/info/sdlshapes.png
doc/info/shapes.html
doc/info/signature.gif [new file with mode: 0644]
doc/info/square.gif
doc/info/tab.gif
doc/info/terminator.gif [new file with mode: 0644]
doc/info/threepoverhang.gif [new file with mode: 0644]
doc/info/trapezium.gif
doc/info/triangle.gif
doc/info/utr.gif [new file with mode: 0644]
doc/infosrc/Makefile.old
doc/infosrc/mklang.y
doc/infosrc/shapelist
doc/infosrc/shapes.2
lib/common/const.h
lib/common/shapes.c

index 564f82700c82082636d5bbbfafbd7dd75aa4121c..d4902e786274e25dd7ef5f57a2d12128feedd620 100644 (file)
Binary files a/doc/info/Mcircle.gif and b/doc/info/Mcircle.gif differ
index fa744de4a1c3e1d6ab3159d34af6f93f81017769..6b6fe372b3f4f3d527b58e9002eba5a01c71fd1a 100644 (file)
Binary files a/doc/info/Mdiamond.gif and b/doc/info/Mdiamond.gif differ
index a0eafe2b626cc0ea0331e82826e752420361e96e..1d783c9e1d0e20f601b8e43782b2a98a9222b062 100644 (file)
Binary files a/doc/info/Msquare.gif and b/doc/info/Msquare.gif differ
index 26ba97a69a0ec5ea575ad047f110f8a431028a81..8c9cd6b5d8c3fc4d3f6c706970f8f2021c20cb1a 100644 (file)
Binary files a/doc/info/a_box.gif and b/doc/info/a_box.gif differ
index f204037ebc7eddfc505d22b70e6e715f8df1e9cc..2ffe79f47efb04cabe9e36ddd400ae0d01ad8bbf 100644 (file)
Binary files a/doc/info/a_crow.gif and b/doc/info/a_crow.gif differ
diff --git a/doc/info/a_curve.gif b/doc/info/a_curve.gif
new file mode 100644 (file)
index 0000000..32119e0
Binary files /dev/null and b/doc/info/a_curve.gif differ
index 188788f1dca1d387722388e336aed18fca4f6fdb..bc9085951e4c850e143e6b6bdf79f764ff5c9871 100644 (file)
Binary files a/doc/info/a_diamond.gif and b/doc/info/a_diamond.gif differ
index f48be06aaae63c3856e208c4be8ad278bd0aef19..05b2c0b0da916ce3f9feebcb733878cd5ea3bbf3 100644 (file)
Binary files a/doc/info/a_dot.gif and b/doc/info/a_dot.gif differ
index b68f27e0641c8d7a4ecc2338c9f12fec23f926c0..8b8b3ba46d1abe616eb41291075228c639f48267 100644 (file)
Binary files a/doc/info/a_ediamond.gif and b/doc/info/a_ediamond.gif differ
index c1ffa258d7e0df29a2ae7b685784afd468d4b29e..5c62f178c5af1883b51081beea383e7efaaeba1b 100644 (file)
Binary files a/doc/info/a_empty.gif and b/doc/info/a_empty.gif differ
index 73694f0f78d006187b34fc8b4007e691e578fbc4..61f8673275a393e6c5ca91ff28f68f5b085dbf45 100644 (file)
Binary files a/doc/info/a_halfopen.gif and b/doc/info/a_halfopen.gif differ
index 64250df26757395e84c58b7d622e0f99adf8b5ed..902b0d8a839952f6b0e3c77942d160a1b4d21376 100644 (file)
Binary files a/doc/info/a_inv.gif and b/doc/info/a_inv.gif differ
index af0088764a429adf341ec9cc1f2f5df92cfd2643..36ff587a934f9ab07fda9bee789c64442ee4f274 100644 (file)
Binary files a/doc/info/a_invdot.gif and b/doc/info/a_invdot.gif differ
index b72e2401a107e7f6690d1249fc429298e0a05fd8..faaaf443fbb66cfc77a6609de6fa59942fc93b60 100644 (file)
Binary files a/doc/info/a_invempty.gif and b/doc/info/a_invempty.gif differ
index 4ca196d90b4024fc81d2912971c31d1a7bd8ac46..d4ee6cbccd0120c0f731b438cbe257fb033dc9b3 100644 (file)
Binary files a/doc/info/a_invodot.gif and b/doc/info/a_invodot.gif differ
index 890ada00c44eb436a0ad20a788a9978b6f988623..5945b76cbad6ec26110113f0829561284178c7f8 100644 (file)
Binary files a/doc/info/a_lteeoldiamond.gif and b/doc/info/a_lteeoldiamond.gif differ
index 63544d04d4842964ba37b4886236f8d7ddcff10d..4e4bd273ef27ba5f53bb63655cb3792198b486b3 100644 (file)
Binary files a/doc/info/a_none.gif and b/doc/info/a_none.gif differ
index db062547087af1b3f98cf2e718d76cee6f0f8628..04c96f1fc40798e2e28229568877c025196273aa 100644 (file)
Binary files a/doc/info/a_normal.gif and b/doc/info/a_normal.gif differ
index eb56fd1f87776cbdf68cea9efe5ac1a2a8e2e153..49be448b3b1f2d1ff3c1afa186d3947c3aff82f6 100644 (file)
Binary files a/doc/info/a_obox.gif and b/doc/info/a_obox.gif differ
index b68f27e0641c8d7a4ecc2338c9f12fec23f926c0..8b8b3ba46d1abe616eb41291075228c639f48267 100644 (file)
Binary files a/doc/info/a_odiamond.gif and b/doc/info/a_odiamond.gif differ
index 3e26ad0d051c0b338d8deb3d2c5f7d0661c09eb6..4c5f1b5b9cc7416e76abbbac1554fd0a57548062 100644 (file)
Binary files a/doc/info/a_odot.gif and b/doc/info/a_odot.gif differ
index 5134c89d4d38f59bd7772a44172419083f561bbb..54ccddc5c62cf1a9f584c8d1d4b30dfd32dc9fce 100644 (file)
Binary files a/doc/info/a_open.gif and b/doc/info/a_open.gif differ
index bb5a5e9e644d7c5a1586c72d81999efb2bebbf87..65ce291a987b51ef4c41e5c73a73a5f3edc7eaba 100644 (file)
Binary files a/doc/info/a_tee.gif and b/doc/info/a_tee.gif differ
index 1cb4b8765866088147d1823acb531d2320e3a9b3..1f5a5a61a93e83973339eced76c992fadcd4b744 100644 (file)
Binary files a/doc/info/aa_box.gif and b/doc/info/aa_box.gif differ
index ed4db55031f2fa796b6976c550876f72301a1f20..87d70a06113b083f91ae51ce65456a9ce0dd42ac 100644 (file)
Binary files a/doc/info/aa_crow.gif and b/doc/info/aa_crow.gif differ
diff --git a/doc/info/aa_curve.gif b/doc/info/aa_curve.gif
new file mode 100644 (file)
index 0000000..1841773
Binary files /dev/null and b/doc/info/aa_curve.gif differ
index 770596541d6e349972501412e79036fa5a5db520..3cdc51c28765c4a3aa02bd5811ad279c41a07ab1 100644 (file)
Binary files a/doc/info/aa_diamond.gif and b/doc/info/aa_diamond.gif differ
index 8ac4ecefdd4fa449dd955544979ae476152c1566..4f81971ecb868abb64f38c44d15b9bf812e657f0 100644 (file)
Binary files a/doc/info/aa_dot.gif and b/doc/info/aa_dot.gif differ
index bd428b55a2ee461098c7e8304e3f762875ce9ebb..5d8dfd0377fb39010d02d2425e0eb3250b137e02 100644 (file)
Binary files a/doc/info/aa_inv.gif and b/doc/info/aa_inv.gif differ
index 84872178c56d136f6527a421451f9084a41e2f9f..32f448f5ac86da8bf06160084409c5cb13d45927 100644 (file)
Binary files a/doc/info/aa_lbox.gif and b/doc/info/aa_lbox.gif differ
index 596331b1af912cd2551c136e8f203c55fc49c6bd..f983987a0cb7bafbbee9f9c5998c4e47531c672a 100644 (file)
Binary files a/doc/info/aa_lcrow.gif and b/doc/info/aa_lcrow.gif differ
diff --git a/doc/info/aa_lcurve.gif b/doc/info/aa_lcurve.gif
new file mode 100644 (file)
index 0000000..0f8bf6c
Binary files /dev/null and b/doc/info/aa_lcurve.gif differ
index 3d50e150f44911a42eb735db242591f5a391bd75..7fb9e3b16bbee3b3df030c76b7ff3462bac120c8 100644 (file)
Binary files a/doc/info/aa_ldiamond.gif and b/doc/info/aa_ldiamond.gif differ
index abaf1d9b27f5ed1737705fa4872f930d0817d9f1..8582813b4cb62ca976348472e2eeb1785b781523 100644 (file)
Binary files a/doc/info/aa_linv.gif and b/doc/info/aa_linv.gif differ
index bd55bb66bc7ece9e1830606fa888e395ea39af2f..5035f220952b2118fa0f950c83b1c441564454e3 100644 (file)
Binary files a/doc/info/aa_lnormal.gif and b/doc/info/aa_lnormal.gif differ
index 7b71b2eae0eac03b367edcc172df620271df20da..1e3a9da00a7d22285e4fe085ceda67818f5e292e 100644 (file)
Binary files a/doc/info/aa_ltee.gif and b/doc/info/aa_ltee.gif differ
index 07af760b833a101700a11d033690ddfeaed20439..f06342e430fde8b8ac2fb0fb88b2c4bcae27fe50 100644 (file)
Binary files a/doc/info/aa_lvee.gif and b/doc/info/aa_lvee.gif differ
index 9910e0e61e067aff435a33bb1f22127d21e3fc04..e1482957369b56f77aa86b9985c013411e10c7e8 100644 (file)
Binary files a/doc/info/aa_none.gif and b/doc/info/aa_none.gif differ
index eb67c72878eb5df05000227ac0f45f8538a0b140..0b1fca9acae1687bf58e314fd449c9bfa2e8a852 100644 (file)
Binary files a/doc/info/aa_normal.gif and b/doc/info/aa_normal.gif differ
index 49b580a239e9a4738cee10b28b1c9b8b4c99f3f4..54444530934f6c3333e747391b88d31839fe5315 100644 (file)
Binary files a/doc/info/aa_obox.gif and b/doc/info/aa_obox.gif differ
index ed4305a41de125b3db72f7757805625f8c96d98b..4038b0d752f45eae0c77a9a90c20dbd2bc5462b6 100644 (file)
Binary files a/doc/info/aa_odiamond.gif and b/doc/info/aa_odiamond.gif differ
index f235019cbcb51c608a2161f321be6de5187e7941..fd84308d4821981592700e76d45080b5d2a9f570 100644 (file)
Binary files a/doc/info/aa_odot.gif and b/doc/info/aa_odot.gif differ
index 3332172fc18fedc2f7c5a9041295c57b4ac33db5..2ab1bc9fee54b6868b6c336e7785cdb0f5cac6c3 100644 (file)
Binary files a/doc/info/aa_oinv.gif and b/doc/info/aa_oinv.gif differ
index fd57ffbe6622096f2a22ccbbfea2c00abb84a861..f51c09f72a5c0aaf6877e84163258e2fda98508b 100644 (file)
Binary files a/doc/info/aa_olbox.gif and b/doc/info/aa_olbox.gif differ
index d26d1cc765f9be0806f029bd7407ce19d7a1023a..f71c163ed7ed7f1e1fbe6e36733b67f4fdd6acdf 100644 (file)
Binary files a/doc/info/aa_oldiamond.gif and b/doc/info/aa_oldiamond.gif differ
index a3928ad11bf19925de6bfb775549dedc4235c14e..b0e109af23d3acbeb8e59fda2e1d558b875a369a 100644 (file)
Binary files a/doc/info/aa_olinv.gif and b/doc/info/aa_olinv.gif differ
index 08a524555b90f91f7bc8400774be34698f4669aa..7db7146027eae366f4a3119b79c377f51fd2c2f5 100644 (file)
Binary files a/doc/info/aa_olnormal.gif and b/doc/info/aa_olnormal.gif differ
index 7d9f23f91d6283c218db5abd37c24d8e004c6639..4f467be756ec7a088e77dc9b00185da00bcdf2a8 100644 (file)
Binary files a/doc/info/aa_onormal.gif and b/doc/info/aa_onormal.gif differ
index c5d3ed1292ed314af8fcce32347741f87f039d90..b179b91ab462f059adff91e6e99f9df34cccf79d 100644 (file)
Binary files a/doc/info/aa_orbox.gif and b/doc/info/aa_orbox.gif differ
index 4c9175267e589a6ab4df5cfd3a063d7b2d2ccc44..31ba9c10b08e8effe0657da8c8b3e851041f03bc 100644 (file)
Binary files a/doc/info/aa_ordiamond.gif and b/doc/info/aa_ordiamond.gif differ
index 88bb4a88652a5ab28fc38551f88a640e124babf3..194eb7bdd01afeb806993c717f0084733df9f565 100644 (file)
Binary files a/doc/info/aa_orinv.gif and b/doc/info/aa_orinv.gif differ
index e657cd39d5d6948da3901d0744dd65bd214e77a6..15d7d46685d088fc38990816f5679d88ef532d48 100644 (file)
Binary files a/doc/info/aa_ornormal.gif and b/doc/info/aa_ornormal.gif differ
index 0dcb685539dc14d0a7a53818a341f4b8fce5429b..203562e45e3973078ea7b2ede4e42146cdfd3b35 100644 (file)
Binary files a/doc/info/aa_rbox.gif and b/doc/info/aa_rbox.gif differ
index 760205aea4a2395ef2419a40a9fde6132ace04c7..4190fa80654c820662708b3cc6a6ee228ace34f7 100644 (file)
Binary files a/doc/info/aa_rcrow.gif and b/doc/info/aa_rcrow.gif differ
diff --git a/doc/info/aa_rcurve.gif b/doc/info/aa_rcurve.gif
new file mode 100644 (file)
index 0000000..a9d463c
Binary files /dev/null and b/doc/info/aa_rcurve.gif differ
index 77d09a8ce74a43fe1859e3eb3c02e0aaa49b6fd3..5d2d9806f48f5d48bd5e4547078c9a4c7c79aeef 100644 (file)
Binary files a/doc/info/aa_rdiamond.gif and b/doc/info/aa_rdiamond.gif differ
index 52106cecec8269fc3cda87d9da80e77b661f3b7c..983fb8efe770b1fb67e09276e98959a1269c603b 100644 (file)
Binary files a/doc/info/aa_rinv.gif and b/doc/info/aa_rinv.gif differ
index c7a7d13abcf5177f41f4020fe7a82c3a46ca152f..6424cd1b39e7e7ad9bf34788b1ccca8a602b2fdc 100644 (file)
Binary files a/doc/info/aa_rnormal.gif and b/doc/info/aa_rnormal.gif differ
index 95d6ba5f1539f30de3af08f6674f711a83439d19..3c9dbc6e1c6e972c389e5f9e17ab0add1657589c 100644 (file)
Binary files a/doc/info/aa_rtee.gif and b/doc/info/aa_rtee.gif differ
index b6cbaabb9d5bb793e4993b40762bfe6924a4e217..924d6388bb604b79d5aa6c1370c2d7895454a34c 100644 (file)
Binary files a/doc/info/aa_rvee.gif and b/doc/info/aa_rvee.gif differ
index b374634a4310871bbd5d6342bf77da1c3359fa6a..ce1ea381c5706c1f3997690e72868350aad7f702 100644 (file)
Binary files a/doc/info/aa_tee.gif and b/doc/info/aa_tee.gif differ
index 00a7a664648e8c05dc2061cd4f9e03d6218baa5a..fb8cd1d84d9148e8b5c9eb491ed6b637cc95fb05 100644 (file)
Binary files a/doc/info/aa_vee.gif and b/doc/info/aa_vee.gif differ
index 5d99482cd7147a591b9571555f36f9bc610f1cf7..c016325b7e0aff86907949d6ac9ccbc5bb7302c7 100644 (file)
@@ -168,8 +168,7 @@ The following display contains the 36 combinations possible with a single
 arrow shape. The node attached to the arrow is not drawn but would appear
 on the right side of the edge.
 <P>
-<CENTER>
-<TABLE>
+<CENTER>\n<TABLE>
   <TR ALIGN=CENTER>
     <TD><IMG SRC="aa_box.gif">
     <TD><IMG SRC="aa_lbox.gif">
@@ -177,8 +176,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_obox.gif">
     <TD><IMG SRC="aa_olbox.gif">
     <TD><IMG SRC="aa_orbox.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>box
     <TD>lbox
     <TD>rbox
@@ -190,8 +188,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_crow.gif">
     <TD><IMG SRC="aa_lcrow.gif">
     <TD><IMG SRC="aa_rcrow.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>crow
     <TD>lcrow
     <TD>rcrow
@@ -203,8 +200,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_odiamond.gif">
     <TD><IMG SRC="aa_oldiamond.gif">
     <TD><IMG SRC="aa_ordiamond.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>diamond
     <TD>ldiamond
     <TD>rdiamond
@@ -215,8 +211,7 @@ on the right side of the edge.
   <TR ALIGN=CENTER>
     <TD><IMG SRC="aa_dot.gif">
     <TD><IMG SRC="aa_odot.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>dot
     <TD>odot
   </TR>
@@ -227,8 +222,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_oinv.gif">
     <TD><IMG SRC="aa_olinv.gif">
     <TD><IMG SRC="aa_orinv.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>inv
     <TD>linv
     <TD>rinv
@@ -238,8 +232,7 @@ on the right side of the edge.
   </TR>
   <TR ALIGN=CENTER>
     <TD><IMG SRC="aa_none.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>none
   </TR>
   <TR ALIGN=CENTER>
@@ -249,8 +242,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_onormal.gif">
     <TD><IMG SRC="aa_olnormal.gif">
     <TD><IMG SRC="aa_ornormal.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>normal
     <TD>lnormal
     <TD>rnormal
@@ -262,8 +254,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_tee.gif">
     <TD><IMG SRC="aa_ltee.gif">
     <TD><IMG SRC="aa_rtee.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>tee
     <TD>ltee
     <TD>rtee
@@ -272,8 +263,7 @@ on the right side of the edge.
     <TD><IMG SRC="aa_vee.gif">
     <TD><IMG SRC="aa_lvee.gif">
     <TD><IMG SRC="aa_rvee.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>vee
     <TD>lvee
     <TD>rvee
@@ -282,13 +272,10 @@ on the right side of the edge.
     <TD><IMG SRC="aa_curve.gif">
     <TD><IMG SRC="aa_lcurve.gif">
     <TD><IMG SRC="aa_rcurve.gif">
-  </TR>
-  <TR ALIGN=CENTER>
+  </TR>\n  <TR ALIGN=CENTER>
     <TD>curve
     <TD>lcurve
     <TD>rcurve
   </TR>
-</TABLE>
-</CENTER>
-</BODY>
-</HTML>
+</TABLE>\n</CENTER>
+</BODY>\n</HTML>
diff --git a/doc/info/assembly.gif b/doc/info/assembly.gif
new file mode 100644 (file)
index 0000000..b89485b
Binary files /dev/null and b/doc/info/assembly.gif differ
index e2902e4343fee83d0c4c52f02d13fec2598aa829..0d681bf56b66964f1ce834632f374c70255af159 100644 (file)
Binary files a/doc/info/box.gif and b/doc/info/box.gif differ
index 42d0ba818d44566f8551194f07b1ded1ba8276a4..c89130b948fba8d908a5d1b383ab8da2e5e15f69 100644 (file)
Binary files a/doc/info/box3d.gif and b/doc/info/box3d.gif differ
diff --git a/doc/info/cds.gif b/doc/info/cds.gif
new file mode 100644 (file)
index 0000000..a3b1476
Binary files /dev/null and b/doc/info/cds.gif differ
index 177e4af151c0f11178c2b65963efbbf18a9bc161..e4d5c245f59b0849b076a09b802d0dd1e9642385 100644 (file)
Binary files a/doc/info/circle.gif and b/doc/info/circle.gif differ
index 14e61daf773810152aeddca267cfc559968b83a3..6d39810b691c30b5e7a3f2fd5febef58998bf4c2 100644 (file)
Binary files a/doc/info/colorlist.gif and b/doc/info/colorlist.gif differ
index 686710ec57784fb7a3db27d65681deb287e1bfc6..2d548df7481b3ee4fa6f752686eb4588dcac83ab 100644 (file)
Binary files a/doc/info/component.gif and b/doc/info/component.gif differ
index cc5c9cfccecb5cf880460dabb2ebd8f1108ded2b..8ba887bfdbd8d13179f40b46e1cfbba97a6fcf61 100644 (file)
Binary files a/doc/info/constraint.gif and b/doc/info/constraint.gif differ
index d5d5852be5cb1db0a398a7843698ac499fb52a0a..66e0b4e189112b6a118dbd042f3ce6974599f808 100644 (file)
Binary files a/doc/info/diamond.gif and b/doc/info/diamond.gif differ
index 4c4d14283b671f25c6250fa053ba4e1b559efabb..0313f6dbeda0942c5f7769b59a77bacc17b437c6 100644 (file)
Binary files a/doc/info/doublecircle.gif and b/doc/info/doublecircle.gif differ
index 9681cde06546a4abd744c61f98bbbe21d7e71819..1b599702c35dc97430ed88969a1eff7755dd74b1 100644 (file)
Binary files a/doc/info/doubleoctagon.gif and b/doc/info/doubleoctagon.gif differ
index 3e1c4e93a456876fe1106870ceac898fe74d71a8..873a79aa08cecf1380f309dba86cb0a0b16a0b63 100644 (file)
Binary files a/doc/info/ellipse.gif and b/doc/info/ellipse.gif differ
index 145c164e29b9198a14130be9ab5c9a16f0858513..2679fc2d3398c1b060d028e088bc3bf7c6e2eb63 100644 (file)
Binary files a/doc/info/fill.gif and b/doc/info/fill.gif differ
diff --git a/doc/info/fivepoverhang.gif b/doc/info/fivepoverhang.gif
new file mode 100644 (file)
index 0000000..ec3b3b9
Binary files /dev/null and b/doc/info/fivepoverhang.gif differ
index d5a17881283304f09790123c66812f9960fb5baa..d2fb0ee3253340963a5efa3dc9dc10e7f41106ef 100644 (file)
Binary files a/doc/info/folder.gif and b/doc/info/folder.gif differ
index 5a3a54d7aa25a3d4c20258581d7579f8b4a3b5a3..de29002cca382c62da46e32ec67ee24276b08330 100644 (file)
Binary files a/doc/info/g_lin0.png and b/doc/info/g_lin0.png differ
index 94f4957ea8ea7be574112da13ff1d735dbbdf115..9c22a0b288208b176dd0a68245f74c2294e73e89 100644 (file)
Binary files a/doc/info/g_lin180.png and b/doc/info/g_lin180.png differ
index d36e1175329df2ce9e9f5e12d5edff5634c61388..a3ba7352264fe9bc0cf46e22b77a176a7253047a 100644 (file)
Binary files a/doc/info/g_lin270.png and b/doc/info/g_lin270.png differ
index 5a3a54d7aa25a3d4c20258581d7579f8b4a3b5a3..de29002cca382c62da46e32ec67ee24276b08330 100644 (file)
Binary files a/doc/info/g_lin360.png and b/doc/info/g_lin360.png differ
index 9a04450c6108f06fd95830ab64c231bb4eb9552a..cb611b9f7284c9b6d5bfb8d1eb5140847adf84da 100644 (file)
Binary files a/doc/info/g_lin45.png and b/doc/info/g_lin45.png differ
index 9004b229af492fb59b3ea6555224c2c2decbbd90..e650e09378d0c8219d3ac080fd15620164c88349 100644 (file)
Binary files a/doc/info/g_lin90.png and b/doc/info/g_lin90.png differ
index 5a3a54d7aa25a3d4c20258581d7579f8b4a3b5a3..f369bb3f048124671580184872d2d5d24db94d43 100644 (file)
Binary files a/doc/info/g_rad0.png and b/doc/info/g_rad0.png differ
index 94f4957ea8ea7be574112da13ff1d735dbbdf115..435c1d1fc9d28556db2db5bf1686951b1835dd66 100644 (file)
Binary files a/doc/info/g_rad180.png and b/doc/info/g_rad180.png differ
index d36e1175329df2ce9e9f5e12d5edff5634c61388..ef2f929cbbf21605a64efaa237743119e82b1cec 100644 (file)
Binary files a/doc/info/g_rad270.png and b/doc/info/g_rad270.png differ
index 5a3a54d7aa25a3d4c20258581d7579f8b4a3b5a3..afe750eff260242747ec33893c6e20a63e8852dc 100644 (file)
Binary files a/doc/info/g_rad360.png and b/doc/info/g_rad360.png differ
index 9a04450c6108f06fd95830ab64c231bb4eb9552a..6dfdba3b42f4b28cfe9a4f05aea64c5ef5884367 100644 (file)
Binary files a/doc/info/g_rad45.png and b/doc/info/g_rad45.png differ
index 9004b229af492fb59b3ea6555224c2c2decbbd90..f59f0f65cde770550e7761205b041ed2c12a95e2 100644 (file)
Binary files a/doc/info/g_rad90.png and b/doc/info/g_rad90.png differ
index b9d66f2b9b977a900567a69c82fe00b3fab42afe..002f58b59fde1a22fb8f387cd6b49e6e2db28ece 100644 (file)
Binary files a/doc/info/hexagon.gif and b/doc/info/hexagon.gif differ
index 99c8155ac3962df3aeb7c3f6b812d112a29d055f..5978535033c44f5a2c136b254c3ade56008551db 100644 (file)
Binary files a/doc/info/house.gif and b/doc/info/house.gif differ
index 1fc35a8f6f2f715aacbcb952c70a66f6860a3e6b..bb758103e00e35d0f553d6a1189b933d78de0ec0 100644 (file)
Binary files a/doc/info/html1.gif and b/doc/info/html1.gif differ
index ae10aa851f79d9ff3d80199aae386d2554403731..349a1f6131bc2cffe8d52ee7ba483aa3b572cd00 100644 (file)
Binary files a/doc/info/html2.gif and b/doc/info/html2.gif differ
index 77465fb2968d15e45f005f58eb2d76d83e4edc95..55875f07c2d90b6441489ae4f3e8226f17898bb3 100644 (file)
Binary files a/doc/info/html3.gif and b/doc/info/html3.gif differ
index 27b70054aeee56da0c4702eaf2bd081045c4b2b3..ac5b26cbb52ad963054fc68686664b30a896ed53 100644 (file)
Binary files a/doc/info/html4.gif and b/doc/info/html4.gif differ
diff --git a/doc/info/insulator.gif b/doc/info/insulator.gif
new file mode 100644 (file)
index 0000000..3dc28d0
Binary files /dev/null and b/doc/info/insulator.gif differ
index 52cbfe8b90a045336ff0d8ac1c47d855579a3729..fae069b110c66d8a809a90555db9d1b6ae70f7aa 100644 (file)
Binary files a/doc/info/invhouse.gif and b/doc/info/invhouse.gif differ
index 588e8e907b679d0fe011164477be3f832cedd51d..f77995b8c2cb0f04dceed81adbe9286358e32f99 100644 (file)
Binary files a/doc/info/invtrapezium.gif and b/doc/info/invtrapezium.gif differ
index 0f6ebdad2794b79779b3d3afbafa7b6460f29768..2aad02888c9059c7dd8ca8e1fcedf59870701634 100644 (file)
Binary files a/doc/info/invtriangle.gif and b/doc/info/invtriangle.gif differ
diff --git a/doc/info/larrow.gif b/doc/info/larrow.gif
deleted file mode 100644 (file)
index ba51f28..0000000
Binary files a/doc/info/larrow.gif and /dev/null differ
diff --git a/doc/info/lpromoter.gif b/doc/info/lpromoter.gif
deleted file mode 100644 (file)
index 0113bae..0000000
Binary files a/doc/info/lpromoter.gif and /dev/null differ
index 5b8871eaaf8f2bbdfbf5a66af8c4627bc2a211fd..7025cf0eb53a3204815e43cb223ae852915e31c5 100644 (file)
Binary files a/doc/info/mrecord.gif and b/doc/info/mrecord.gif differ
index e8f7c80b5aff757c287577bb83ce2087467c3666..23d2037930a904cbd943fa107ee35e92c7738d02 100644 (file)
Binary files a/doc/info/none.gif and b/doc/info/none.gif differ
diff --git a/doc/info/noverhang.gif b/doc/info/noverhang.gif
new file mode 100644 (file)
index 0000000..66db4f2
Binary files /dev/null and b/doc/info/noverhang.gif differ
index 3e1c4e93a456876fe1106870ceac898fe74d71a8..873a79aa08cecf1380f309dba86cb0a0b16a0b63 100644 (file)
Binary files a/doc/info/oval.gif and b/doc/info/oval.gif differ
index 4e2cd02b5b0b420bb0e0de511722ea3d03ccddd4..9805049fafa79c48a11ab4bcd3ca9f9dd97893f4 100644 (file)
Binary files a/doc/info/parallelogram.gif and b/doc/info/parallelogram.gif differ
index 1f001253521e7165abf5ba4242b5ecd4e3e02b92..a0a6e0e78107d994309be51afead794c38034035 100644 (file)
Binary files a/doc/info/pentagon.gif and b/doc/info/pentagon.gif differ
index e95fbabf98a3730e368514f2a08810e0f6da7528..21b0da64597a52cbc874fce205197debd67b19b6 100644 (file)
Binary files a/doc/info/plaintext.gif and b/doc/info/plaintext.gif differ
index 86600aed7eebfef97dc8581ba4f2b62401ae18c4..0ecd02bef35068021a07e64da0a795e8f5cd105b 100644 (file)
Binary files a/doc/info/point.gif and b/doc/info/point.gif differ
diff --git a/doc/info/primersite.gif b/doc/info/primersite.gif
new file mode 100644 (file)
index 0000000..898f0f3
Binary files /dev/null and b/doc/info/primersite.gif differ
diff --git a/doc/info/promoter.gif b/doc/info/promoter.gif
new file mode 100644 (file)
index 0000000..c237c47
Binary files /dev/null and b/doc/info/promoter.gif differ
diff --git a/doc/info/proteasesite.gif b/doc/info/proteasesite.gif
new file mode 100644 (file)
index 0000000..219575f
Binary files /dev/null and b/doc/info/proteasesite.gif differ
diff --git a/doc/info/proteinstab.gif b/doc/info/proteinstab.gif
new file mode 100644 (file)
index 0000000..6d4ada3
Binary files /dev/null and b/doc/info/proteinstab.gif differ
diff --git a/doc/info/rarrow.gif b/doc/info/rarrow.gif
deleted file mode 100644 (file)
index 92f9faf..0000000
Binary files a/doc/info/rarrow.gif and /dev/null differ
index a04ae4af094369d4fa76c8543eec353022e9775e..a6dbbb836eb44333ccdea33289e63aa1c276183a 100644 (file)
Binary files a/doc/info/record.gif and b/doc/info/record.gif differ
index 58012aaf1fffcb244d9a4b67ee5a2520ba9f0d49..c01b3526c516f2ee542a9d91d940ab4428f942a8 100644 (file)
Binary files a/doc/info/record2.gif and b/doc/info/record2.gif differ
index e2902e4343fee83d0c4c52f02d13fec2598aa829..0d681bf56b66964f1ce834632f374c70255af159 100644 (file)
Binary files a/doc/info/rect.gif and b/doc/info/rect.gif differ
index e2902e4343fee83d0c4c52f02d13fec2598aa829..0d681bf56b66964f1ce834632f374c70255af159 100644 (file)
Binary files a/doc/info/rectangle.gif and b/doc/info/rectangle.gif differ
diff --git a/doc/info/restrictionsite.gif b/doc/info/restrictionsite.gif
new file mode 100644 (file)
index 0000000..a7fcd61
Binary files /dev/null and b/doc/info/restrictionsite.gif differ
diff --git a/doc/info/ribosite.gif b/doc/info/ribosite.gif
new file mode 100644 (file)
index 0000000..8ba7be7
Binary files /dev/null and b/doc/info/ribosite.gif differ
diff --git a/doc/info/rnastab.gif b/doc/info/rnastab.gif
new file mode 100644 (file)
index 0000000..0e2ebfb
Binary files /dev/null and b/doc/info/rnastab.gif differ
index c73d13e496827864c21e877774ca775611a9b3d4..85451eb85253cfe0be5a6e64408e37d157a03be0 100644 (file)
Binary files a/doc/info/round.gif and b/doc/info/round.gif differ
diff --git a/doc/info/rpromoter.gif b/doc/info/rpromoter.gif
deleted file mode 100644 (file)
index 124090d..0000000
Binary files a/doc/info/rpromoter.gif and /dev/null differ
index 2e38391d2f4fc4c9386d078b490c404e701af2a8..48051859b2220efc53d7dc03340be83b1aea5fe5 100644 (file)
Binary files a/doc/info/sdlshapes.jpg and b/doc/info/sdlshapes.jpg differ
index c62bc229a1c1c384a8c24b15f17e43c3820562eb..f289035a7565505a446e149164182b5941e5e430 100644 (file)
Binary files a/doc/info/sdlshapes.png and b/doc/info/sdlshapes.png differ
index 795cf30b2f2f0f852f5e87cb277508203eb19866..1ce109be92ed0710b41f53a970b50c55802f31bd 100644 (file)
@@ -132,23 +132,59 @@ The possible polygon-based shapes are displayed below.
     <TD><IMG SRC=folder.gif>
     <TD><IMG SRC=box3d.gif>
     <TD><IMG SRC=component.gif>
-    <TD><IMG SRC=rpromoter.gif>
+    <TD><IMG SRC=promoter.gif>
   </TR>
   <TR ALIGN=CENTER>
     <TD><A NAME=d:folder>folder</A>
     <TD><A NAME=d:box3d>box3d</A>
     <TD><A NAME=d:component>component</A>
-    <TD><A NAME=d:rpromoter>rpromoter</A>
+    <TD><A NAME=d:promoter>promoter</A>
   </TR>
   <TR ALIGN=CENTER>
-    <TD><IMG SRC=rarrow.gif>
-    <TD><IMG SRC=larrow.gif>
-    <TD><IMG SRC=lpromoter.gif>
+    <TD><IMG SRC=cds.gif>
+    <TD><IMG SRC=terminator.gif>
+    <TD><IMG SRC=utr.gif>
+    <TD><IMG SRC=primersite.gif>
   </TR>
   <TR ALIGN=CENTER>
-    <TD><A NAME=d:rarrow>rarrow</A>
-    <TD><A NAME=d:larrow>larrow</A>
-    <TD><A NAME=d:lpromoter>lpromoter</A>
+    <TD><A NAME=d:cds>cds</A>
+    <TD><A NAME=d:terminator>terminator</A>
+    <TD><A NAME=d:utr>utr</A>
+    <TD><A NAME=d:primersite>primersite</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=restrictionsite.gif>
+    <TD><IMG SRC=fivepoverhang.gif>
+    <TD><IMG SRC=threepoverhang.gif>
+    <TD><IMG SRC=noverhang.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:restrictionsite>restrictionsite</A>
+    <TD><A NAME=d:fivepoverhang>fivepoverhang</A>
+    <TD><A NAME=d:threepoverhang>threepoverhang</A>
+    <TD><A NAME=d:noverhang>noverhang</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=assembly.gif>
+    <TD><IMG SRC=signature.gif>
+    <TD><IMG SRC=insulator.gif>
+    <TD><IMG SRC=ribosite.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:assembly>assembly</A>
+    <TD><A NAME=d:signature>signature</A>
+    <TD><A NAME=d:insulator>insulator</A>
+    <TD><A NAME=d:ribosite>ribosite</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=rnastab.gif>
+    <TD><IMG SRC=proteasesite.gif>
+    <TD><IMG SRC=proteinstab.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:rnastab>rnastab</A>
+    <TD><A NAME=d:proteasesite>proteasesite</A>
+    <TD><A NAME=d:proteinstab>proteinstab</A>
   </TR>
 </TABLE>
 As the figures suggest, the shapes <TT>rect</TT> and <TT>rectangle</TT> are synonyms for <TT>box</TT>, and <TT>none</TT> is a synonym for <TT>plaintext</TT>.
@@ -172,10 +208,26 @@ only affected by the <A HREF=attrs.html#d:peripheries><TT>peripheries</TT></A>,
 <A HREF=attrs.html#d:width><TT>width</TT></A> and
 <A HREF=attrs.html#d:height><TT>height</TT></A> attributes.
 <P>
-The shapes <TT>note</TT>, <TT>tab</TT>, <TT>folder</TT>,
+The shapes: <TT>note</TT>, <TT>tab</TT>, <TT>folder</TT>,
 <TT>box3d</TT> and <TT>component</TT> were provided by Pander.
-The synthetic biology shapes <TT>rpromoter</TT>, <TT>rarrow</TT>, <TT>larrow</TT> and
-<TT>lpromoter</TT> were contributed by Jenny Cheng.
+The synthetic biology shapes:
+<TT>promoter</TT>,
+<TT>cds</TT>,
+<TT>terminator</TT>,
+<TT>utr</TT>,
+<TT>primersite</TT>,
+<TT>restrictionsite</TT>,
+<TT>fivepoverhang</TT>,
+<TT>threepoverhang</TT>,
+<TT>noverhang</TT>,
+<TT>assembly</TT>,
+<TT>signature</TT>,
+<TT>insulator</TT>,
+<TT>ribosite</TT>,
+<TT>rnastab</TT>,
+<TT>proteasesite</TT> and
+<TT>proteinstab</TT>
+were contributed by Jenny Cheng.
 
 <H2><A NAME=record>Record-based Nodes</A></H2>
 These are specified by shape values of "record" and "Mrecord".
@@ -878,19 +930,15 @@ and <A HREF="command.html#d:SERVER_NAME">SERVER_NAME</A>.
 <BLOCKQUOTE>
 specifies style characteristics of the table or cell. Style characteristics are
 given as a comma or space separated list of style attributes. At present, the only
-legal attributes are "ROUNDED", "RADIAL", "DASHED" and "DOTTED".
-<P>
-If "ROUNDED" is specified, the table or cell will have rounded corners.
-For tables, this probably works best if the outmost cells have no borders, or their CELLSPACING
+legal attributes are "ROUNDED" and "RADIAL" for tables, and "RADIAL" for cells.
+If "ROUNDED" is specified, the table will have rounded corners.
+This probably works best if the outmost cells have no borders, or their CELLSPACING
 is sufficiently large.
 If it is desirable to have borders around the cells, use <I><B>HR</B></I>
 and <I><B>VR</B></I> elements, or the <I><B>COLUMNS</B></I> and <I><B>ROWS</B></I> attributes of <I><B>TABLE</B></I>.
 <P>
 The "RADIAL" attribute indicates a radial gradient fill. See the <B><I>BGCOLOR</I></B> and
 <B><I>GRADIENTANGLE</I></B> attributes.
-<P>
-A "DOTTED" or "DASHED" attribute indicates that a border, if it exists, will be drawn as a dotted
-or dashed line, respectively.
 </BLOCKQUOTE>
 
 <B><I><FONT SIZE=-1>TARGET="value"</FONT></I></B>
diff --git a/doc/info/signature.gif b/doc/info/signature.gif
new file mode 100644 (file)
index 0000000..08f2d3c
Binary files /dev/null and b/doc/info/signature.gif differ
index 4675ae411474dbf2dd50869be1dc47c85c4ca601..5baebcdfb3cff624941183c8545f67b3dcf145ad 100644 (file)
Binary files a/doc/info/square.gif and b/doc/info/square.gif differ
index db1a9b702aedafa31e612ea33a882816076ecc47..dec9ed7ecdecf830aa785dd4ce6f42f996f46ff4 100644 (file)
Binary files a/doc/info/tab.gif and b/doc/info/tab.gif differ
diff --git a/doc/info/terminator.gif b/doc/info/terminator.gif
new file mode 100644 (file)
index 0000000..f6700dc
Binary files /dev/null and b/doc/info/terminator.gif differ
diff --git a/doc/info/threepoverhang.gif b/doc/info/threepoverhang.gif
new file mode 100644 (file)
index 0000000..2764a24
Binary files /dev/null and b/doc/info/threepoverhang.gif differ
index 0750fcbe71f62467fa6282b017f67ba8135ab163..3b6cad479f1f2d9e9482c3ab1e94f3eb9357b193 100644 (file)
Binary files a/doc/info/trapezium.gif and b/doc/info/trapezium.gif differ
index fb87dc36d9d3a387f8bad7b858270df2cb060f36..b9ddc8d582c0e67b78fa5efc31f4972eb9b59ad2 100644 (file)
Binary files a/doc/info/triangle.gif and b/doc/info/triangle.gif differ
diff --git a/doc/info/utr.gif b/doc/info/utr.gif
new file mode 100644 (file)
index 0000000..4d0f60e
Binary files /dev/null and b/doc/info/utr.gif differ
index 00774390b3a2da38a631040efc418e97dc117e84..2f533ca000a06af40a66a3fbe77f2179c3820800 100644 (file)
@@ -44,7 +44,11 @@ SGIF = Mcircle.gif Mdiamond.gif Msquare.gif box.gif \
       point.gif polygon.gif trapezium.gif triangle.gif \
       tripleoctagon.gif pentagon.gif septagon.gif rect.gif \
       rectangle.gif square.gif tab.gif folder.gif box3d.gif component.gif \
-      rpromoter.gif rarrow.gif, larrow.gif lpromoter.gif
+      promoter.gif cds.gif terminator.gif utr.gif \
+      primersite.gif restrictionsite.gif fivepoverhang.gif \
+      threepoverhang.gif noverhang.gif assembly.gif signature.gif \
+      insulator.gif ribosite.gif rnastab.gif proteasesite.gif \
+      proteinstab.gif
 
 AGIF = a_normal.gif a_inv.gif a_dot.gif a_invdot.gif a_odot.gif \
        a_invodot.gif a_curve.gif a_none.gif \
index f99576ded50fdd9393cda569f4fce802c6bdfe86..b9bb338078b39803fae4727c7bb4ac01c837ff94 100644 (file)
@@ -185,6 +185,7 @@ skipSpace (char* p)
     return p;
 }
 
+#if 0
 static char*
 strndup (char* p, int sz)
 {
@@ -193,6 +194,7 @@ strndup (char* p, int sz)
     s[sz] = '\0';
     return s;
 }
+#endif
 
 static char*
 readLiteral (char* p)
index d28360b6d8150115e354bac71867e273b235b454..dbfddfca8d38e7f9111752d8f1c70a98abb9fdcd 100644 (file)
@@ -33,7 +33,19 @@ tab
 folder
 box3d
 component
-rpromoter
-rarrow
-larrow
-lpromoter
+promoter
+cds
+terminator
+utr
+primersite
+restrictionsite
+fivepoverhang
+threepoverhang
+noverhang
+assembly
+signature
+insulator
+ribosite
+rnastab
+proteasesite
+proteinstab
index 05c07662ede3f793efb558fe0f575b380dbff62c..67d00b0f45ae6fd3addedc2592b699863ef46eba 100644 (file)
@@ -20,10 +20,26 @@ only affected by the <A HREF=attrs.html#d:peripheries><TT>peripheries</TT></A>,
 <A HREF=attrs.html#d:width><TT>width</TT></A> and
 <A HREF=attrs.html#d:height><TT>height</TT></A> attributes.
 <P>
-The shapes <TT>note</TT>, <TT>tab</TT>, <TT>folder</TT>,
+The shapes: <TT>note</TT>, <TT>tab</TT>, <TT>folder</TT>,
 <TT>box3d</TT> and <TT>component</TT> were provided by Pander.
-The synthetic biology shapes <TT>rpromoter</TT>, <TT>rarrow</TT>, <TT>larrow</TT> and
-<TT>lpromoter</TT> were contributed by Jenny Cheng.
+The synthetic biology shapes:
+<TT>promoter</TT>,
+<TT>cds</TT>,
+<TT>terminator</TT>,
+<TT>utr</TT>,
+<TT>primersite</TT>,
+<TT>restrictionsite</TT>,
+<TT>fivepoverhang</TT>,
+<TT>threepoverhang</TT>,
+<TT>noverhang</TT>,
+<TT>assembly</TT>,
+<TT>signature</TT>,
+<TT>insulator</TT>,
+<TT>ribosite</TT>,
+<TT>rnastab</TT>,
+<TT>proteasesite</TT> and
+<TT>proteinstab</TT>
+were contributed by Jenny Cheng.
 
 <H2><A NAME=record>Record-based Nodes</A></H2>
 These are specified by shape values of "record" and "Mrecord".
index 8abd1feaf4a44ea8a3611de1567f6653efd803b8..e1f8e207cbf91c4a58638854e4013440fb78c34e 100644 (file)
 #define DOTTED (1 << 12)
 #define DASHED (1 << 13)
 #define WEDGED  (1 << 14)
-#define RPROMOTER (1 << 15)
-#define RARROW (1 << 16)
-#define LARROW (1 << 17)
-#define LPROMOTER (1 << 18)
-
+#define PROMOTER (1 << 15)
+#define CDS (1 << 16)
+#define TERMINATOR (1 << 17)
+#define UTR (1 << 18)
+#define PRIMERSITE (1 << 19)
+#define RESTRICTIONSITE (1 << 20)
+#define FIVEPOVERHANG (1 << 21)
+#define THREEPOVERHANG (1 << 22)
+#define NOVERHANG (1 << 23)
+#define ASSEMBLY (1 << 24)
+#define SIGNATURE (1 << 25)
+#define INSULATOR (1 << 26)
+#define RIBOSITE (1 << 27)
+#define RNASTAB (1 << 28)
+#define PROTEASESITE (1 << 29)
+#define PROTEINSTAB (1 << 30)
 
 /* fill types */
 #define FILL      1
index 6b01f767c13594a475d8ee81e363542658c6ed80..3aad6715f3e546c16730182fe5957326ac55f7df 100644 (file)
@@ -97,17 +97,31 @@ static polygon_t p_Msquare = { TRUE, 1, 4, 0., 0., 0., DIAGONALS };
 static polygon_t p_Mcircle =
     { TRUE, 1, 1, 0., 0., 0., DIAGONALS | AUXLABELS };
 
-/* biological circuit shapes */
-static polygon_t p_rpromoter = { FALSE, 1, 4, 0., 0., 0., RPROMOTER };
-static polygon_t p_rarrow = { FALSE, 1, 4, 0., 0., 0., RARROW };
-static polygon_t p_larrow = { FALSE, 1, 4, 0., 0., 0., LARROW};
-static polygon_t p_lpromoter = { FALSE, 1, 4, 0., 0., 0., LPROMOTER};
+/* biological circuit shapes, as specified by SBOLv*/
+/** gene expression symbols **/
+static polygon_t p_promoter = { FALSE, 1, 4, 0., 0., 0., PROMOTER };
+static polygon_t p_cds = { FALSE, 1, 4, 0., 0., 0., CDS };
+static polygon_t p_terminator = { FALSE, 1, 4, 0., 0., 0., TERMINATOR};
+static polygon_t p_utr = { FALSE, 1, 4, 0., 0., 0., UTR};
+static polygon_t p_insulator = { FALSE, 1, 4, 0., 0., 0., INSULATOR};
+static polygon_t p_ribosite = { FALSE, 1, 4, 0., 0., 0., RIBOSITE};
+static polygon_t p_rnastab = { FALSE, 1, 4, 0., 0., 0., RNASTAB};
+static polygon_t p_proteasesite = { FALSE, 1, 4, 0., 0., 0., PROTEASESITE};
+static polygon_t p_proteinstab = { FALSE, 1, 4, 0., 0., 0., PROTEINSTAB};
+/** dna construction symbols **/
+static polygon_t p_primersite = { FALSE, 1, 4, 0., 0., 0., PRIMERSITE};
+static polygon_t p_restrictionsite = { FALSE, 1, 4, 0., 0., 0., RESTRICTIONSITE};
+static polygon_t p_fivepoverhang = { FALSE, 1, 4, 0., 0., 0., FIVEPOVERHANG};
+static polygon_t p_threepoverhang = { FALSE, 1, 4, 0., 0., 0., THREEPOVERHANG};
+static polygon_t p_noverhang = { FALSE, 1, 4, 0., 0., 0., NOVERHANG};
+static polygon_t p_assembly = { FALSE, 1, 4, 0., 0., 0., ASSEMBLY};
+static polygon_t p_signature = { FALSE, 1, 4, 0., 0., 0., SIGNATURE};
 
 #define IS_BOX(n) (ND_shape(n)->polygon == &p_box)
 
 /* True if style requires processing through round_corners. */
 #define SPECIAL_CORNERS(style) \
-    ((style) & (ROUNDED | DIAGONALS | DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER))
+    ((style) & (ROUNDED | DIAGONALS | DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB))
 
 
 /*
@@ -204,11 +218,25 @@ static shape_desc Shapes[] = {    /* first entry is default for no such shape */
     {"Mdiamond", &poly_fns, &p_Mdiamond},
     {"Msquare", &poly_fns, &p_Msquare},
     {"Mcircle", &poly_fns, &p_Mcircle},
-       /* biological circuit shapes */
-    {"rpromoter", &poly_fns, &p_rpromoter},
-    {"larrow",  &poly_fns, &p_larrow},
-    {"rarrow",  &poly_fns, &p_rarrow},
-    {"lpromoter",  &poly_fns, &p_lpromoter},
+       /* biological circuit shapes, as specified by SBOLv*/
+       /** gene expression symbols **/
+    {"promoter", &poly_fns, &p_promoter},
+    {"cds",  &poly_fns, &p_cds},
+    {"terminator",  &poly_fns, &p_terminator},
+    {"utr",  &poly_fns, &p_utr},
+    {"insulator", &poly_fns, &p_insulator},
+    {"ribosite", &poly_fns, &p_ribosite},
+    {"rnastab", &poly_fns, &p_rnastab},
+    {"proteasesite", &poly_fns, &p_proteasesite},
+    {"proteinstab", &poly_fns, &p_proteinstab},
+       /** dna construction symbols **/
+    {"primersite",  &poly_fns, &p_primersite},
+    {"restrictionsite", &poly_fns, &p_restrictionsite},
+    {"fivepoverhang", &poly_fns, &p_fivepoverhang},
+    {"threepoverhang", &poly_fns, &p_threepoverhang},
+    {"noverhang", &poly_fns, &p_noverhang},
+    {"assembly", &poly_fns, &p_assembly},
+    {"signature", &poly_fns, &p_signature},
        /*  *** shapes other than polygons  *** */
     {"record", &record_fns, NULL},
     {"Mrecord", &record_fns, NULL},
@@ -442,8 +470,8 @@ void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled)
 
     if (style & DIAGONALS)
        mode = DIAGONALS;
-    else if (style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER))
-       mode = style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER);
+    else if (style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB))
+       mode = style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB);
     else
        mode = ROUNDED;
     B = N_NEW(4 * sides + 4, pointf);
@@ -710,156 +738,860 @@ void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled)
        free(D);
        break;
 
-    case RPROMOTER:
+    case PROMOTER:
        /*
-        * Adjust the perimeter for the protrusions.
+        * L-shaped arrow on a center line, scales in the x direction
         *
         *  
-        *      D[1] = AF[1]      |\
+        *      D[1]              |\
         *       +----------------+ \
         *       |              D[0] \
         *       |                    \
         *       |                    /    
-        *       |                   /
+        *       |             D[5]  /
         *       |        +-------+ /
         *       |        |       |/
         *       +--------+
         */
        /* Add the tab edges. */
-       D = N_NEW(sides + 5, pointf); /*5 new points*/
-       D[0].x = B[1].x - (B[2].x - B[3].x)/2;
-       D[0].y = B[1].y - (B[3].y - B[4].y)/2;
-       D[1].x = B[3].x;
-       D[1].y = B[3].y - (B[3].y - B[4].y)/2;
-       D[2].x = AF[2].x;
-       D[2].y = AF[2].y;
-       D[3].x = B[2].x + (B[2].x - B[3].x)/2;
-       D[3].y = AF[2].y;
-       D[4].x = B[2].x + (B[2].x - B[3].x)/2;
-       D[4].y = AF[2].y + (B[3].y - B[4].y)/2;
-       D[5].x = B[1].x - (B[2].x - B[3].x)/2;
-       D[5].y = AF[2].y + (B[3].y - B[4].y)/2;
-       D[6].x = B[1].x - (B[2].x - B[3].x)/2;
-       D[6].y = AF[3].y;
-       D[7].y = AF[0].y - (AF[0].y - AF[3].y)/2; /*triangle point */
-       D[7].x = AF[0].x; /*triangle point */
-       D[8].y = AF[0].y;
-       D[8].x = B[1].x - (B[2].x - B[3].x)/2;
-
+                               
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //the arrow's thickness is (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides + 5, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8; //x_center + width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)*3/2; //D[4].y + width
+       D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4; //x_center - 2*width
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       D[3].x = D[2].x + (B[2].x - B[3].x)/2; //D[2].x + width
+       D[3].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       D[4].x = D[3].x;
+       D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y); //highest cds point 
+       D[5].x = D[0].x;
+       D[5].y = D[4].y; //highest cds point
+       D[6].x = D[0].x;
+       D[6].y = D[4].y - (B[3].y-B[4].y)/4; //D[4].y - width/2 
+       D[7].x = D[6].x + (B[2].x - B[3].x); //D[6].x + 2*width
+       D[7].y = D[6].y + (B[3].y - B[4].y)/2; //D[6].y + width
+       D[8].x = D[0].x;
+       D[8].y = D[0].y + (B[3].y - B[4].y)/4;//D[0].y + width/2
        gvrender_polygon(job, D, sides + 5, filled);
-       free(D);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);                        
+                       
        break;
                                
-    case RARROW:
+    case CDS:
        /*
-        * Adjust the perimeter for the protrusions.
+        * arrow without the protrusions, scales normally
         *
         *  
-        *      D[1] = AF[1]      |\
-        *       +----------------+ \
-        *       |              D[0] \
-        *       |                    \
-        *       |                    /    
-        *       |                   /
-        *       +----------------+ /
-        *                        |/
+        *      D[1] = AF[1]      
+        *       +----------------+\
+        *       |              D[0]\
+        *       |                   \
+        *       |                   /    
+        *       |                  /
+        *       +----------------+/
+        *                        D[3]
         *       
         */
-       /* Add the tab edges. */
-       D = N_NEW(sides + 3, pointf); /*3 new points*/
-       D[0].x = B[1].x - (B[2].x - B[3].x)/2;
+       D = N_NEW(sides + 1, pointf);
+       D[0].x = B[1].x;
        D[0].y = B[1].y - (B[3].y - B[4].y)/2;
        D[1].x = B[3].x;
        D[1].y = B[3].y - (B[3].y - B[4].y)/2;
        D[2].x = AF[2].x;
        D[2].y = AF[2].y + (B[3].y - B[4].y)/2;
-       D[3].x = B[1].x - (B[2].x - B[3].x)/2;
+       D[3].x = B[1].x;
        D[3].y = AF[2].y + (B[3].y - B[4].y)/2;
-       D[4].x = B[1].x - (B[2].x - B[3].x)/2;
-       D[4].y = AF[3].y;
-       D[5].y = AF[0].y - (AF[0].y - AF[3].y)/2;/*triangle point*/
-       D[5].x = AF[0].x; /*triangle point */
-       D[6].y = AF[0].y;
-       D[6].x = B[1].x - (B[2].x - B[3].x)/2;
+       D[4].y = AF[0].y - (AF[0].y - AF[3].y)/2;
+       D[4].x = AF[0].x;
+                               
+       gvrender_polygon(job, D, sides + 1, filled);
+       free(D);
 
-       gvrender_polygon(job, D, sides + 3, filled);
+       break;
+
+    case TERMINATOR:
+       /*
+       * T-shape, does not scale, always in the center
+       *
+       *  
+       *      D[4]      
+       *       +----------------+
+       *       |               D[3]
+       *       |                |
+       *       |                |    
+       *       |  D[6]    D[1]  |
+       *   D[5]+---+       +----+ D[2]
+       *           |       |     
+       *           +-------+ D[0]
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       D = N_NEW(sides + 4, pointf);
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center + width/2
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/2;
+       D[2].x = D[1].x + (B[2].x-B[3].x)/2;
+       D[2].y = D[1].y;
+       D[3].x = D[2].x;
+       D[3].y = D[2].y + (B[3].y-B[4].y)/2;
+       D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //D[3].y mirrowed across the center
+       D[4].y = D[3].y;
+       D[5].x = D[4].x;
+       D[5].y = D[2].y;
+       D[6].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[1].x mirrowed across the center
+       D[6].y = D[1].y;
+       D[7].x = D[6].x;
+       D[7].y = D[0].y;
+       gvrender_polygon(job, D, sides + 4, filled);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
        free(D);
+
        break;
 
-    case LARROW:
+    case UTR:
        /*
-        * Adjust the perimeter for the protrusions.
+        * half-octagon with line, does not scale, always in center
         *
-        *  
-        *      /|     
-        *     / +----------------+ 
-        *    /                   |        
-        *    \                   |   
-        *     \ +----------------+ 
-        *      \|                
-        *       
+        *  D[3]
+        *     _____  D[2] 
+        *    /     \
+        *   /       \ D[1]
+        *   |       |
+        *   -----------
+        *              D[0]   
+        *      
+        *      
+        *                
         */
-       /* Add the tab edges. */
-       D = N_NEW(sides + 3, pointf); /*3 new points*/
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       D = N_NEW(sides + 2, pointf);
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+width  
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/4; //D[0].y+width/2
+       D[2].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+width/2
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2; //D[1].y+width
+       D[3].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[2].x mirrowed across the center
+       D[3].y = D[2].y;
+       D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4;
+       D[4].y = D[1].y;
+       D[5].x = D[4].x;
+       D[5].y = D[0].y;
+       gvrender_polygon(job, D, sides + 2, filled);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);
+
+       break;
+    case PRIMERSITE:
+       /*
+       * half arrow shape, scales in the x-direction
+       *                 D[1]
+       *                   |\           
+       *                   | \  
+       *                   |  \
+       *       ------------    \
+       *       |                \       
+       *       ------------------\ D[0]                         
+       *                               
+       *   --------------------------------
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides + 1, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x);//x_center + width*2
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width
+       D[1].x = D[0].x - (B[2].x-B[3].x); //x_center
+       D[1].y = D[0].y + (B[3].y-B[4].y);
+       D[2].x = D[1].x;
+       D[2].y = D[0].y + (B[3].y-B[4].y)/2;
+       D[3].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4;//x_center - 2*(scalable width)
+       D[3].y = D[2].y;
+       D[4].x = D[3].x;
+       D[4].y = D[0].y;
+       gvrender_polygon(job, D, sides + 1, filled);
+                               
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);
+
+       break;
+    case RESTRICTIONSITE:
+       /*
+       * zigzag shape, scales in the x-direction (only the middle section)
+       *
+       *                
+       *   ----D[2]     
+       *   |   |________ D[0]
+       *   |            |____
+       *   ----------   |
+       *   D[4]      --- D[7]
+       *                               
+       *   
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides + 4, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8 + (B[2].x-B[3].x)/2;//x_center + scalable_width + width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width
+       D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/8; //x_center - width
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[2].x - (B[2].x-B[3].x)/2; //D[2].x - width
+       D[3].y = D[2].y;
+       D[4].x = D[3].x;
+       D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/4; //y_center - 1/2(width)
+       D[5].x = D[0].x - (B[2].x-B[3].x)/2;
+       D[5].y = D[4].y;
+       D[6].x = D[5].x;
+       D[6].y = D[5].y - (B[3].y-B[4].y)/2;
+       D[7].x = D[0].x;
+       D[7].y = D[6].y;
+       gvrender_polygon(job, D, sides + 4, filled);
+                               
+       /*dsDNA line left half*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = D[4].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line right half*/
+       C[0].x = D[7].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                       
+       free(D);
+
+       break;  
+    case FIVEPOVERHANG:
+       /*
+       *  does not scale, on the left side
+       *
+       *  D[3]------D[2]        
+       *  |          |
+       *  D[0]------D[1]
+       *        -----  ------------
+       *        |    |
+       *       D[0]--D[1]
+       *                               
+       *   
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x;//the very left edge
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width
+       D[1].x = D[0].x + 2*(B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*second, lower shape*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (B[2].x-B[3].x);
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width
+       D[1].x = D[0].x + (B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*dsDNA line right half*/
+       C[0].x = D[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                       
+       free(D);
+
+       break;  
+    case THREEPOVERHANG:
+       /*
+       *  does not scale, on the right side
+       *
+       *          D[2]------D[1]        
+       *          |          |
+       *----------D[3]------D[0]
+       *          -----  D[1]
+       *          |    |
+       *          D[3]--D[0]
+       *                               
+       *   
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[0].x;//the very right edge
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/2;
+       D[2].x = D[1].x - 2*(B[3].y-B[4].y);
+       D[2].y = D[1].y;
+       D[3].x = D[2].x;
+       D[3].y = D[0].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*second, lower shape*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[0].x - (B[2].x-B[3].x);
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/2;
+       D[2].x = D[1].x - (B[3].y-B[4].y);
+       D[2].y = D[1].y;
+       D[3].x = D[2].x;
+       D[3].y = D[0].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*dsDNA line left half*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = D[3].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                       
+       free(D);
+
+       break;  
+    case NOVERHANG:
+       /*
+       *  does not scale
+       *
+       *     D[3]------D[2]   D[3]------D[2]    
+       *     |          |      |          |
+       *  ---D[0]------D[1]   D[0]------D[1]----
+       *     D[3]------D[2]   D[3]------D[2]    
+       *     |          |      |          |
+       *     D[0]------D[1]   D[0]------D[1]
+       *        
+       *                               
+       *   
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       /*upper left rectangle*/
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width
+       D[1].x = D[0].x + (B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*lower, left rectangle*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width
+       D[1].x = D[0].x + (B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*lower, right rectangle*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width
+       D[1].x = D[0].x + (B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*upper, right rectangle*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center - width - 1/4 width
+       D[1].x = D[0].x + (B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+       
+       /*dsDNA line right half*/
+       C[0].x = D[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line left half*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //D[0].x of of the left rectangles
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[1].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                       
+       free(D);
+
+       break;  
+    case ASSEMBLY:
+       /*
+       *  does not scale
+       *
+       *      D[3]----------D[2]        
+       *      |               |
+       *     D[0]----------D[1]
+       * ----                  ---------
+       *      D[3]----------D[2]        
+       *      |               |
+       *     D[0]----------D[1]
+       *  
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width
+       D[1].x = D[0].x + 2*(B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*second, lower shape*/
+       free(D);
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width
+       D[1].x = D[0].x + 2*(B[2].x-B[3].x);
+       D[1].y = D[0].y;
+       D[2].x = D[1].x;
+       D[2].y = D[1].y + (B[3].y-B[4].y)/2;
+       D[3].x = D[0].x;
+       D[3].y = D[2].y;
+       gvrender_polygon(job, D, sides, filled);
+
+       /*dsDNA line right half*/
+       C[0].x = D[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line left half*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = D[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+       free(D);
+
+       break;  
+    case SIGNATURE:
+       /*
+       *   
+       * 
+       *   +--------------+
+       *   |              |
+       *   |x             |
+       *   |_____________ |
+       *   +--------------+
+       */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2;
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length
+       D = N_NEW(sides, pointf);
        D[0].x = AF[0].x;
-       D[0].y = AF[0].y - (B[3].y-B[4].y)/2;
-       D[1].x = B[2].x + (B[2].x - B[3].x)/2;
-       D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/
-       D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[2].y = B[2].y;
-       D[3].x = AF[1].x; /*triangle point*/
-       D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/
-       D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[4].y = AF[2].y;
-       D[5].y = AF[2].y + (B[3].y-B[4].y)/2;
-       D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[6].y = AF[3].y + (B[3].y - B[4].y)/2;
-       D[6].x = AF[0].x;/*D[0]*/
+       D[0].y = B[1].y - (B[3].y - B[4].y)/2;
+       D[1].x = B[3].x;
+       D[1].y = B[3].y - (B[3].y - B[4].y)/2;
+       D[2].x = AF[2].x;
+       D[2].y = AF[2].y + (B[3].y - B[4].y)/2;
+       D[3].x = AF[0].x;
+       D[3].y = AF[2].y + (B[3].y - B[4].y)/2;
+       gvrender_polygon(job, D, sides, filled);
 
-       gvrender_polygon(job, D, sides + 3, filled);
+       /* "\" of the X*/
+       C[0].x = AF[1].x + (B[2].x-B[3].x)/4;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8; //y_center + 1/4 width
+       C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2
+       C[1].y = C[0].y - (B[3].y-B[4].y)/4;//C[0].y - width/2
+       gvrender_polyline(job, C, 2);
+       
+       /*"/" of the X*/
+       C[0].x = AF[1].x + (B[2].x-B[3].x)/4;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/8; //y_center - 1/4 width
+       C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2
+       C[1].y = C[0].y + (B[3].y-B[4].y)/4;//C[0].y + width/2
+       gvrender_polyline(job, C, 2);   
+
+       /*bottom line*/
+       C[0].x = AF[1].x + (B[2].x-B[3].x)/4;
+       C[0].y = AF[2].y + (B[3].y-B[4].y)*3/4;
+       C[1].x = AF[0].x - (B[2].x-B[3].x)/4;
+       C[1].y = C[0].y;
+       gvrender_polyline(job, C, 2);
        free(D);
+
+       break;  
+    case INSULATOR:
+       /*
+        * double square
+        *
+        *  +-----+
+        *--| ___ |---
+        *  | |_| |
+        *  +-----+
+        *                
+        */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       D = N_NEW(sides, pointf);
+       D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/2; //x_center+width  
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)/2; //y_center
+       D[1].x = D[0].x;
+       D[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)/2; //D[0].y- width
+       D[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)/2; //x_center-width
+       D[2].y = D[1].y;
+       D[3].x = D[2].x;
+       D[3].y = D[0].y;
+       gvrender_polygon(job, D, sides, filled);
+       free(D);
+
+       /*outer square line*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+1.5*width    
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)*3/4; //y_center
+       C[1].x = C[0].x;
+       C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)*3/4; //y_center- 1.5*width
+       C[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //x_center-1.5*width
+       C[2].y = C[1].y;
+       C[3].x = C[2].x;
+       C[3].y = C[0].y;
+       C[4] = C[0];
+       gvrender_polyline(job, C, 5);                   
+       
+       /*dsDNA line right half*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line left half*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);
+
        break;
+    case RIBOSITE:
+       /*
+        * X with a dashed line on the bottom
+        * 
+        *
+        *           X
+        *           |
+        *      ------------          
+        */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+
+       D = N_NEW(sides + 12, pointf); //12-sided x
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4
+       D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x
+       D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4
+       D[3].x = D[0].x;
+       D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4
+       D[4].x = D[0].x;
+       D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x
+       D[5].x = D[2].x;
+       D[5].y = D[4].y;
+       D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center
+       D[6].y = D[3].y; //top nook
+       D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y
+       D[7].y = D[5].y;
+       D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner
+       D[8].y = D[7].y;
+       D[9].x = D[8].x;
+       D[9].y = D[3].y;
+       D[10].x = D[8].x + (B[2].x-B[3].x)/8;
+       D[10].y = D[2].y;
+       D[11].x = D[8].x;
+       D[11].y = D[1].y;
+       D[12].x = D[8].x;
+       D[12].y = D[0].y;
+       D[13].x = D[10].x;
+       D[13].y = D[12].y;
+       D[14].x = D[6].x; //bottom nook
+       D[14].y = D[1].y;
+       D[15].x = D[2].x;
+       D[15].y = D[0].y;
+       gvrender_polygon(job, D, sides + 12, filled);
+
+       //2-part dash line
+
+       /*line below the x, bottom dash*/
+       C[0].x = D[14].x; //x_center
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       C[1].x = C[0].x;
+       C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width
+       gvrender_polyline(job, C, 2);
 
-    case LPROMOTER:
+       /*line below the x, top dash*/
+       C[0].x = D[14].x; //x_center
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;
+       C[1].x = C[0].x;
+       C[1].y = C[0].y + (B[3].y-B[4].y)/8;
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);
+
+       break;
+    case RNASTAB:
        /*
-        * Adjust the perimeter for the protrusions.
+        * hexagon with a dashed line on the bottom
+        * 
         *
-        *  
-        *      /|     
-        *     / +----------------+ 
-        *    /                 D[0] 
-        *   /                    |    
-        *   \                    |        
-        *    \                   |   
-        *     \ +--------+       + 
-        *      \|        |       |
-        *                +-------+
+        *           O
+        *           |
+        *      ------------          
         */
-       /* Add the tab edges. */
-       D = N_NEW(sides + 5, pointf); /*3 new points*/
-       D[0].x = AF[0].x;
-       D[0].y = AF[0].y - (B[3].y-B[4].y)/2;
-       D[1].x = B[2].x + (B[2].x - B[3].x)/2;
-       D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/
-       D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[2].y = B[2].y;
-       D[3].x = AF[1].x; /*triangle point*/
-       D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/
-       D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[4].y = AF[2].y;
-       D[5].y = AF[2].y + (B[3].y-B[4].y)/2;
-       D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/
-       D[6].y = AF[3].y + (B[3].y - B[4].y)/2;
-       D[6].x = B[1].x - (B[2].x - B[3].x)/2;
-       D[7].x = B[1].x - (B[2].x - B[3].x)/2;/*D[6].x*/
-       D[7].y = AF[3].y;
-       D[8].x = AF[3].x;
-       D[8].y = AF[3].y;
-                               
-       gvrender_polygon(job, D, sides + 5, filled);
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+
+       D = N_NEW(sides + 4, pointf); //12-sided x
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width
+       D[1].x = D[0].x + (B[2].x-B[3].x)/8;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4
+       D[2].x = D[1].x; //D[0].x- width/4
+       D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2
+       D[3].x = D[0].x;
+       D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4
+       D[4].x = D[3].x - (B[2].x-B[3].x)/4;
+       D[4].y = D[3].y; //top of the hexagon
+       D[5].x = D[4].x - (B[2].x-B[3].x)/8;
+       D[5].y = D[2].y;
+       D[6].x = D[5].x;
+       D[6].y = D[1].y; //left side
+       D[7].x = D[4].x;
+       D[7].y = D[0].y; //bottom
+       gvrender_polygon(job, D, sides + 4, filled);
+
+       //2-part dash line
+
+       /*line below the x, bottom dash*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       C[1].x = C[0].x;
+       C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width
+       gvrender_polyline(job, C, 2);
+
+       /*line below the x, top dash*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;
+       C[1].x = C[0].x;
+       C[1].y = C[0].y + (B[3].y-B[4].y)/8;
+       gvrender_polyline(job, C, 2);
+
+
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
        free(D);
+
        break;
-                               
+    case PROTEASESITE:
+       /*
+        * X with a solid line on the bottom
+        * 
+        *
+        *           X
+        *           |
+        *      ------------          
+        */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+       D = N_NEW(sides + 12, pointf); //12-sided x
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width
+       D[1].x = D[0].x;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4
+       D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x
+       D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4
+       D[3].x = D[0].x;
+       D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4
+       D[4].x = D[0].x;
+       D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x
+       D[5].x = D[2].x;
+       D[5].y = D[4].y;
+       D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center
+       D[6].y = D[3].y; //top nook
+       D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y
+       D[7].y = D[5].y;
+       D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner
+       D[8].y = D[7].y;
+       D[9].x = D[8].x;
+       D[9].y = D[3].y;
+       D[10].x = D[8].x + (B[2].x-B[3].x)/8;
+       D[10].y = D[2].y;
+       D[11].x = D[8].x;
+       D[11].y = D[1].y;
+       D[12].x = D[8].x;
+       D[12].y = D[0].y;
+       D[13].x = D[10].x;
+       D[13].y = D[12].y;
+       D[14].x = D[6].x; //bottom nook
+       D[14].y = D[1].y;
+       D[15].x = D[2].x;
+       D[15].y = D[0].y;
+       gvrender_polygon(job, D, sides + 12, filled);
+
+
+       /*line below the x*/
+       C[0] = D[14];
+       C[1].x = C[0].x;
+       C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);
+
+       break;
+    case PROTEINSTAB:
+       /*
+        * hexagon with a dashed line on the bottom
+        * 
+        *
+        *           O
+        *           |
+        *      ------------          
+        */
+       //x_center is AF[1].x + (AF[0].x - AF[1].x)/2
+       //y_center is AF[2].y + (AF[1].y - AF[2].y)/2;
+       //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2;
+
+       D = N_NEW(sides + 4, pointf); //12-sided x
+       D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon
+       D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width
+       D[1].x = D[0].x + (B[2].x-B[3].x)/8;
+       D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4
+       D[2].x = D[1].x; //D[0].x- width/4
+       D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2
+       D[3].x = D[0].x;
+       D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4
+       D[4].x = D[3].x - (B[2].x-B[3].x)/4;
+       D[4].y = D[3].y; //top of the hexagon
+       D[5].x = D[4].x - (B[2].x-B[3].x)/8;
+       D[5].y = D[2].y;
+       D[6].x = D[5].x;
+       D[6].y = D[1].y; //left side
+       D[7].x = D[4].x;
+       D[7].y = D[0].y; //bottom
+       gvrender_polygon(job, D, sides + 4, filled);
+
+       /*line below the x*/
+       C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2;
+       C[0].y = D[0].y;
+       C[1].x = C[0].x;
+       C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center
+       gvrender_polyline(job, C, 2);
+
+       /*dsDNA line*/
+       C[0].x = AF[1].x;
+       C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2;
+       C[1].x = AF[0].x;
+       C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2;
+       gvrender_polyline(job, C, 2);                           
+       free(D);
+
+       break;        
     }
     free(B);
 }
@@ -1143,7 +1875,7 @@ static void poly_init(node_t * n)
 
 /*
  * FIXME - this code is wrong - it doesn't work for concave boundaries.
- *          (e.g. "folder"  or "rarrow")
+ *          (e.g. "folder"  or "promoter")
  *   I don't think it even needs sectorangle, or knowledge of skewed shapes.
  *   (Concepts that only work for convex regular (modulo skew/distort) polygons.)
  *