home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / lout2.lzh / LOUT2 / LIB / include / tab < prev    next >
Text File  |  1994-02-26  |  25KB  |  761 lines

  1.  
  2. ###############################################################################
  3. #                                                                             #
  4. #  Lout @Tab package for formatting tables (Version 2.0)                      #
  5. #                                                                             #
  6. #  Version 1.0 by Jeffrey H. Kingston, September 1991.                        #
  7. #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
  8. #                                                                             #
  9. #  See "Tab - A Lout package for formatting tables" for user information.     #
  10. #                                                                             #
  11. ###############################################################################
  12.  
  13. @SysPrependGraphic { tab_prepend }
  14.  
  15. export    @CC @RR @Rule @DoubleRule @Line @DoubleLine @NP
  16.     @Rowa @Rowb @Rowc @Rowd @Rowe @Rowf @Rowg @Rowh @Rowi @Rowj
  17.     @MarkRowa @MarkRowb @MarkRowc @MarkRowd @MarkRowe @MarkRowf 
  18.     @MarkRowg @MarkRowh @MarkRowi @MarkRowj 
  19.  
  20. def @Tab                 
  21.  
  22.     named above     { no      }
  23.     named below     { no      }
  24.     named between   { no      }
  25.     named side      { no      }
  26.     named hmargin   { 0.3c    }
  27.     named vmargin   { 0.2v    }
  28.     named linewidth { 0.5 pt  }
  29.  
  30.     named @Fmta
  31.     named A {} named B {} named C {} named D {} named E {}
  32.     named F {} named G {} named H {} named I {} named J {}
  33.     named K {} named L {} named M {} named N {} named O {}
  34.     named P {} named Q {} named R {} named S {} named T {}
  35.     named U {} named V {} named W {} named X {} named Y {}
  36.     named Z {}
  37.     named "!"     precedence 10 left x named between { dft } right y {}
  38.     named "!!"    precedence 10 left x right y {}
  39.     named "!!!"   precedence 10 left x right y {}
  40.     named "@Over" precedence 11 left x right y { x // y }
  41.     named ","     precedence 12 left x right y {}
  42.     named @Col    precedence 12        right x {}
  43.     named @CC     right x { clines @Break { & x } }
  44.     named @RR     right x { rlines @Break { & x } }
  45.     {}
  46.  
  47.     named @Fmtb
  48.     named A {} named B {} named C {} named D {} named E {}
  49.     named F {} named G {} named H {} named I {} named J {}
  50.     named K {} named L {} named M {} named N {} named O {}
  51.     named P {} named Q {} named R {} named S {} named T {}
  52.     named U {} named V {} named W {} named X {} named Y {}
  53.     named Z {}
  54.     named "!"     precedence 10 left x named between { dft } right y {}
  55.     named "!!"    precedence 10 left x right y {}
  56.     named "!!!"   precedence 10 left x right y {}
  57.     named "@Over" precedence 11 left x right y { x // y }
  58.     named ","     precedence 12 left x right y {}
  59.     named @Col    precedence 12        right x {}
  60.     named @CC     right x { clines @Break { & x } }
  61.     named @RR     right x { rlines @Break { & x } }
  62.     {}
  63.  
  64.     named @Fmtc
  65.     named A {} named B {} named C {} named D {} named E {}
  66.     named F {} named G {} named H {} named I {} named J {}
  67.     named K {} named L {} named M {} named N {} named O {}
  68.     named P {} named Q {} named R {} named S {} named T {}
  69.     named U {} named V {} named W {} named X {} named Y {}
  70.     named Z {}
  71.     named "!"     precedence 10 left x named between { dft } right y {}
  72.     named "!!"    precedence 10 left x right y {}
  73.     named "!!!"   precedence 10 left x right y {}
  74.     named "@Over" precedence 11 left x right y { x // y }
  75.     named ","     precedence 12 left x right y {}
  76.     named @Col    precedence 12        right x {}
  77.     named @CC     right x { clines @Break { & x } }
  78.     named @RR     right x { rlines @Break { & x } }
  79.     {}
  80.  
  81.     named @Fmtd
  82.     named A {} named B {} named C {} named D {} named E {}
  83.     named F {} named G {} named H {} named I {} named J {}
  84.     named K {} named L {} named M {} named N {} named O {}
  85.     named P {} named Q {} named R {} named S {} named T {}
  86.     named U {} named V {} named W {} named X {} named Y {}
  87.     named Z {}
  88.     named "!"     precedence 10 left x named between { dft } right y {}
  89.     named "!!"    precedence 10 left x right y {}
  90.     named "!!!"   precedence 10 left x right y {}
  91.     named "@Over" precedence 11 left x right y { x // y }
  92.     named ","     precedence 12 left x right y {}
  93.     named @Col    precedence 12        right x {}
  94.     named @CC     right x { clines @Break { & x } }
  95.     named @RR     right x { rlines @Break { & x } }
  96.     {}
  97.  
  98.     named @Fmte
  99.     named A {} named B {} named C {} named D {} named E {}
  100.     named F {} named G {} named H {} named I {} named J {}
  101.     named K {} named L {} named M {} named N {} named O {}
  102.     named P {} named Q {} named R {} named S {} named T {}
  103.     named U {} named V {} named W {} named X {} named Y {}
  104.     named Z {}
  105.     named "!"     precedence 10 left x named between { dft } right y {}
  106.     named "!!"    precedence 10 left x right y {}
  107.     named "!!!"   precedence 10 left x right y {}
  108.     named "@Over" precedence 11 left x right y { x // y }
  109.     named ","     precedence 12 left x right y {}
  110.     named @Col    precedence 12        right x {}
  111.     named @CC     right x { clines @Break { & x } }
  112.     named @RR     right x { rlines @Break { & x } }
  113.     {}
  114.  
  115.     named @Fmtf
  116.     named A {} named B {} named C {} named D {} named E {}
  117.     named F {} named G {} named H {} named I {} named J {}
  118.     named K {} named L {} named M {} named N {} named O {}
  119.     named P {} named Q {} named R {} named S {} named T {}
  120.     named U {} named V {} named W {} named X {} named Y {}
  121.     named Z {}
  122.     named "!"     precedence 10 left x named between { dft } right y {}
  123.     named "!!"    precedence 10 left x right y {}
  124.     named "!!!"   precedence 10 left x right y {}
  125.     named "@Over" precedence 11 left x right y { x // y }
  126.     named ","     precedence 12 left x right y {}
  127.     named @Col    precedence 12        right x {}
  128.     named @CC     right x { clines @Break { & x } }
  129.     named @RR     right x { rlines @Break { & x } }
  130.     {}
  131.  
  132.     named @Fmtg
  133.     named A {} named B {} named C {} named D {} named E {}
  134.     named F {} named G {} named H {} named I {} named J {}
  135.     named K {} named L {} named M {} named N {} named O {}
  136.     named P {} named Q {} named R {} named S {} named T {}
  137.     named U {} named V {} named W {} named X {} named Y {}
  138.     named Z {}
  139.     named "!"     precedence 10 left x named between { dft } right y {}
  140.     named "!!"    precedence 10 left x right y {}
  141.     named "!!!"   precedence 10 left x right y {}
  142.     named "@Over" precedence 11 left x right y { x // y }
  143.     named ","     precedence 12 left x right y {}
  144.     named @Col    precedence 12        right x {}
  145.     named @CC     right x { clines @Break { & x } }
  146.     named @RR     right x { rlines @Break { & x } }
  147.     {}
  148.  
  149.     named @Fmth
  150.     named A {} named B {} named C {} named D {} named E {}
  151.     named F {} named G {} named H {} named I {} named J {}
  152.     named K {} named L {} named M {} named N {} named O {}
  153.     named P {} named Q {} named R {} named S {} named T {}
  154.     named U {} named V {} named W {} named X {} named Y {}
  155.     named Z {}
  156.     named "!"     precedence 10 left x named between { dft } right y {}
  157.     named "!!"    precedence 10 left x right y {}
  158.     named "!!!"   precedence 10 left x right y {}
  159.     named "@Over" precedence 11 left x right y { x // y }
  160.     named ","     precedence 12 left x right y {}
  161.     named @Col    precedence 12        right x {}
  162.     named @CC     right x { clines @Break { & x } }
  163.     named @RR     right x { rlines @Break { & x } }
  164.     {}
  165.  
  166.     named @Fmti
  167.     named A {} named B {} named C {} named D {} named E {}
  168.     named F {} named G {} named H {} named I {} named J {}
  169.     named K {} named L {} named M {} named N {} named O {}
  170.     named P {} named Q {} named R {} named S {} named T {}
  171.     named U {} named V {} named W {} named X {} named Y {}
  172.     named Z {}
  173.     named "!"     precedence 10 left x named between { dft } right y {}
  174.     named "!!"    precedence 10 left x right y {}
  175.     named "!!!"   precedence 10 left x right y {}
  176.     named "@Over" precedence 11 left x right y { x // y }
  177.     named ","     precedence 12 left x right y {}
  178.     named @Col    precedence 12        right x {}
  179.     named @CC     right x { clines @Break { & x } }
  180.     named @RR     right x { rlines @Break { & x } }
  181.     {}
  182.  
  183.     named @Fmtj
  184.     named A {} named B {} named C {} named D {} named E {}
  185.     named F {} named G {} named H {} named I {} named J {}
  186.     named K {} named L {} named M {} named N {} named O {}
  187.     named P {} named Q {} named R {} named S {} named T {}
  188.     named U {} named V {} named W {} named X {} named Y {}
  189.     named Z {}
  190.     named "!"     precedence 10 left x named between { dft } right y {}
  191.     named "!!"    precedence 10 left x right y {}
  192.     named "!!!"   precedence 10 left x right y {}
  193.     named "@Over" precedence 11 left x right y { x // y }
  194.     named ","     precedence 12 left x right y {}
  195.     named @Col    precedence 12        right x {}
  196.     named @CC     right x { clines @Break { & x } }
  197.     named @RR     right x { rlines @Break { & x } }
  198.     {}
  199.  
  200.     body @Body
  201.  
  202. @Begin
  203.  
  204.     macro @NP { /1.1b }
  205.  
  206.     def @CC right x { clines @Break { & x } }
  207.     def @RR right x { rlines @Break { & x } }
  208.  
  209.     def @HSingle    { linewidth ltabhs   }
  210.     def @HSingleProject    { linewidth ltabhsp  }
  211.     def @HDouble    { linewidth ltabhd   }
  212.     def @HDoubleBelow    { linewidth ltabhdb  }
  213.     def @HDoubleNW    { linewidth ltabhdnw }
  214.     def @HDoubleNE    { linewidth ltabhdne }
  215.     def @HDoubleSW    { linewidth ltabhdsw }
  216.     def @HDoubleSE    { linewidth ltabhdse }
  217.     def @VSingle    { linewidth ltabvs   }
  218.     def @VDouble    { linewidth ltabvd   }
  219.     def @VDoubleRight    { linewidth ltabvdr  }
  220.  
  221.     def @MidHRule
  222.     left rule
  223.     right x
  224.     {
  225.     rule @Case
  226.     {
  227.         no                @Yield { @OneCol x }
  228.         { yes single }        @Yield { @HSingle @Graphic x }
  229.         { double doubleboxabove }    @Yield { @HDouble @Graphic x }
  230.         doubleboxbelow        @Yield { @HDoubleBelow @Graphic x }
  231.     }
  232.     }
  233.  
  234.     def @LeftHRule
  235.     left rule
  236.     right x
  237.     {
  238.     rule @Case
  239.     {
  240.         no            @Yield { @OneCol x }
  241.         { yes single }    @Yield { @HSingleProject @Graphic x }
  242.         double        @Yield { @HDouble @Graphic x }
  243.         doubleboxabove    @Yield { @HDoubleNW @Graphic x }
  244.         doubleboxbelow    @Yield { @HDoubleSW @Graphic x }
  245.     }
  246.     }
  247.  
  248.     def @RightHRule
  249.     left rule
  250.     right x
  251.     {
  252.     rule @Case
  253.     {
  254.         no            @Yield { @OneCol x }
  255.         { yes single }    @Yield { @HSingleProject @Graphic x }
  256.         double        @Yield { @HDouble @Graphic x }
  257.         doubleboxabove    @Yield { @HDoubleNE @Graphic x }
  258.         doubleboxbelow    @Yield { @HDoubleSE @Graphic x }
  259.     }
  260.     }
  261.  
  262.     def @HSRule
  263.     left rule
  264.     {
  265.     rule @Case
  266.     {
  267.         no           @Yield {}
  268.         { yes single } @Yield { @HSingle @Graphic {} }
  269.         double       @Yield { @HDouble @Graphic {} }
  270.         doubleboxabove @Yield { @HDouble @Graphic {} }
  271.         doubleboxbelow @Yield { @HDoubleBelow @Graphic {} }
  272.     }
  273.     }
  274.  
  275.     def @ZeroWidth
  276.     right x
  277.     { @OneCol { |0io x |0io }
  278.     }
  279.  
  280.     def @Line
  281.     { single @HSRule
  282.     }
  283.  
  284.     def @DoubleLine
  285.     { double @HSRule
  286.     }
  287.  
  288.     def @Rule
  289.     {
  290.     @OneRow
  291.     {
  292.         @ZeroWidth @HSingle @Graphic { ^|hmargin }
  293.         / @Line /
  294.         &1rt @ZeroWidth @HSingle @Graphic { |hmargin }
  295.     }
  296.     }
  297.  
  298.     def @DoubleRule
  299.     {
  300.     @OneRow
  301.     {
  302.         @ZeroWidth @HDouble @Graphic { ^|hmargin }
  303.         / @DoubleLine /
  304.         &1rt @ZeroWidth @HDouble @Graphic { |hmargin }
  305.     }
  306.     }
  307.  
  308.     def @VRule
  309.     left rule
  310.     right x
  311.     {
  312.     rule @Case
  313.     {
  314.         no           @Yield {}
  315.         { yes single } @Yield @OneRow { /0io @VSingle @Graphic x /0io }
  316.         double       @Yield @OneRow { /0io @VDouble @Graphic x /0io }
  317.     }
  318.     }
  319.  
  320.     def @VRuleRight
  321.     left rule
  322.     right x
  323.     {
  324.     rule @Case
  325.     {
  326.         no         @Yield {}
  327.         {yes single} @Yield @OneRow { /0io @VSingle @Graphic x /0io }
  328.         double     @Yield @OneRow { /0io @VDoubleRight @Graphic x /0io }
  329.     }
  330.     }
  331.  
  332.     def @VSRule
  333.     left rule
  334.     {
  335.     rule @Case
  336.     {
  337.         no           @Yield {}
  338.         { yes single } @Yield { @VSingle @Graphic {} }
  339.         double       @Yield { @VDouble @Graphic {} }
  340.     }
  341.     }
  342.  
  343.     def @VSRuleRight
  344.     left rule
  345.     {
  346.     rule @Case
  347.     {
  348.         no         @Yield {}
  349.         {yes single} @Yield { @VSingle @Graphic {} }
  350.         double     @Yield { @VDoubleRight @Graphic {} }
  351.     }
  352.     }
  353.  
  354.     def @Wrap
  355.     named ur { no }            # Rule up above entry
  356.     named dr { no }            # Rule down below entry
  357.     named vm { vmargin }        # Vertical margin
  358.     right x                # The object to be wrapped
  359.     {
  360.           ur @HSRule
  361.     ^/vm  @OneCol @OneRow x
  362.      /vm  dr @HSRule
  363.     }
  364.  
  365.     def @Sep
  366.     left x
  367.     named ur { no }            # Rule up above entry
  368.     named dr { no }            # Rule down below entry
  369.     named sr { no }            # Rule separating x from y
  370.     named hm { hmargin }        # Horizontal margin
  371.     named vm { vmargin }        # Vertical margin
  372.     right y
  373.     {
  374.     def vr
  375.     {
  376.         sr @Case
  377.         {    dft    @Yield between 
  378.         else    @Yield sr
  379.         }
  380.     }
  381.  
  382.     x | @OneCol
  383.     {      ur @MidHRule {|hm}
  384.       /vm
  385.       /vm  dr @MidHRule {|hm}
  386.     }
  387.     | @OneCol
  388.     {      vr @VRule { /vm }  |  ur @MidHRule {|hm}
  389.       /vm  vr @VSRule         |
  390.       /vm  vr @VRule {^/vm }  |  dr @MidHRule {|hm}
  391.     }
  392.     | y
  393.     }
  394.  
  395.     def @NSep
  396.     left x
  397.     named hm { hmargin }
  398.     right y
  399.     {
  400.     x | @OneCol { |hm } | @OneCol { |hm } | y
  401.     }
  402.  
  403.     def @LeftEdge
  404.     named ur { no }            # Rule up above entry
  405.     named dr { no }            # Rule down below entry
  406.     named sr { no }            # Rule separating x from y
  407.     named hm { hmargin }        # Horizontal margin
  408.     named vm { vmargin }        # Vertical margin
  409.     right x
  410.     {
  411.     sr @Case
  412.     {
  413.         no @Yield { x }
  414.         else @Yield
  415.         { @OneCol
  416.           {
  417.               sr @VRule { /vm }     |  ur @LeftHRule { |hm }
  418.              ^/vm sr @VSRule     |
  419.           /vm sr @VRule { ^/vm } |  dr @LeftHRule { |hm }
  420.           }
  421.           | x
  422.         }
  423.     }
  424.     }
  425.  
  426.     def @RightEdge
  427.     left x
  428.     named ur { no }            # Rule up above entry
  429.     named dr { no }            # Rule down below entry
  430.     named sr { no }            # Rule separating x from y
  431.     named hm { hmargin }        # Horizontal margin
  432.     named vm { vmargin }        # Vertical margin
  433.     {
  434.     sr @Case
  435.     {
  436.         no @Yield { x }
  437.         else @Yield
  438.         {
  439.           x | @OneCol
  440.           {
  441.             ur @RightHRule { |hm }
  442.         /vm
  443.         /vm dr @RightHRule { |hm }
  444.           }
  445.           | @OneCol
  446.           {
  447.              sr @VRuleRight { /vm }
  448.         /vm  sr @VSRuleRight
  449.         /vm  sr @VRuleRight { ^/vm }
  450.           }
  451.         }
  452.     }
  453.     }
  454.  
  455.     def @DoRowa
  456.     named A {} named B {} named C {} named D {} named E {}
  457.     named F {} named G {} named H {} named I {} named J {}
  458.     named K {} named L {} named M {} named N {} named O {}
  459.     named P {} named Q {} named R {} named S {} named T {}
  460.     named U {} named V {} named W {} named X {} named Y {}
  461.     named Z {}
  462.     named above    { above   }
  463.     named below    { below   }
  464.     named side     { side    }
  465.     named vmargin   { vmargin }
  466.     {
  467.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  468.     @Fmta
  469.       A { A }  B { B }  C { C }  D { D }  E { E }
  470.       F { F }  G { G }  H { H }  I { I }  J { J }
  471.       K { K }  L { L }  M { M }  N { N }  O { O }
  472.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  473.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  474.       Z { Z }
  475.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  476.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  477.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  478.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  479.       ,    { x @NSep y }
  480.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  481.     }
  482.  
  483.     def @DoRowb
  484.     named A {} named B {} named C {} named D {} named E {}
  485.     named F {} named G {} named H {} named I {} named J {}
  486.     named K {} named L {} named M {} named N {} named O {}
  487.     named P {} named Q {} named R {} named S {} named T {}
  488.     named U {} named V {} named W {} named X {} named Y {}
  489.     named Z {}
  490.     named above    { above   }
  491.     named below    { below   }
  492.     named side     { side    }
  493.     named vmargin   { vmargin }
  494.     {
  495.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  496.     @Fmtb
  497.       A { A }  B { B }  C { C }  D { D }  E { E }
  498.       F { F }  G { G }  H { H }  I { I }  J { J }
  499.       K { K }  L { L }  M { M }  N { N }  O { O }
  500.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  501.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  502.       Z { Z }
  503.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  504.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  505.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  506.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  507.       ,    { x @NSep y }
  508.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  509.     }
  510.  
  511.     def @DoRowc
  512.     named A {} named B {} named C {} named D {} named E {}
  513.     named F {} named G {} named H {} named I {} named J {}
  514.     named K {} named L {} named M {} named N {} named O {}
  515.     named P {} named Q {} named R {} named S {} named T {}
  516.     named U {} named V {} named W {} named X {} named Y {}
  517.     named Z {}
  518.     named above    { above   }
  519.     named below    { below   }
  520.     named side     { side    }
  521.     named vmargin   { vmargin }
  522.     {
  523.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  524.     @Fmtc
  525.       A { A }  B { B }  C { C }  D { D }  E { E }
  526.       F { F }  G { G }  H { H }  I { I }  J { J }
  527.       K { K }  L { L }  M { M }  N { N }  O { O }
  528.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  529.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  530.       Z { Z }
  531.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  532.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  533.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  534.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  535.       ,    { x @NSep y }
  536.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  537.     }
  538.  
  539.     def @DoRowd
  540.     named A {} named B {} named C {} named D {} named E {}
  541.     named F {} named G {} named H {} named I {} named J {}
  542.     named K {} named L {} named M {} named N {} named O {}
  543.     named P {} named Q {} named R {} named S {} named T {}
  544.     named U {} named V {} named W {} named X {} named Y {}
  545.     named Z {}
  546.     named above    { above   }
  547.     named below    { below   }
  548.     named side     { side    }
  549.     named vmargin   { vmargin }
  550.     {
  551.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  552.     @Fmtd
  553.       A { A }  B { B }  C { C }  D { D }  E { E }
  554.       F { F }  G { G }  H { H }  I { I }  J { J }
  555.       K { K }  L { L }  M { M }  N { N }  O { O }
  556.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  557.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  558.       Z { Z }
  559.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  560.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  561.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  562.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  563.       ,    { x @NSep y }
  564.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  565.     }
  566.  
  567.     def @DoRowe
  568.     named A {} named B {} named C {} named D {} named E {}
  569.     named F {} named G {} named H {} named I {} named J {}
  570.     named K {} named L {} named M {} named N {} named O {}
  571.     named P {} named Q {} named R {} named S {} named T {}
  572.     named U {} named V {} named W {} named X {} named Y {}
  573.     named Z {}
  574.     named above    { above   }
  575.     named below    { below   }
  576.     named side     { side    }
  577.     named vmargin   { vmargin }
  578.     {
  579.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  580.     @Fmte
  581.       A { A }  B { B }  C { C }  D { D }  E { E }
  582.       F { F }  G { G }  H { H }  I { I }  J { J }
  583.       K { K }  L { L }  M { M }  N { N }  O { O }
  584.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  585.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  586.       Z { Z }
  587.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  588.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  589.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  590.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  591.       ,    { x @NSep y }
  592.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  593.     }
  594.  
  595.     def @DoRowf
  596.     named A {} named B {} named C {} named D {} named E {}
  597.     named F {} named G {} named H {} named I {} named J {}
  598.     named K {} named L {} named M {} named N {} named O {}
  599.     named P {} named Q {} named R {} named S {} named T {}
  600.     named U {} named V {} named W {} named X {} named Y {}
  601.     named Z {}
  602.     named above    { above   }
  603.     named below    { below   }
  604.     named side     { side    }
  605.     named vmargin   { vmargin }
  606.     {
  607.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  608.     @Fmtf
  609.       A { A }  B { B }  C { C }  D { D }  E { E }
  610.       F { F }  G { G }  H { H }  I { I }  J { J }
  611.       K { K }  L { L }  M { M }  N { N }  O { O }
  612.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  613.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  614.       Z { Z }
  615.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  616.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  617.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  618.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  619.       ,    { x @NSep y }
  620.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  621.     }
  622.  
  623.     def @DoRowg
  624.     named A {} named B {} named C {} named D {} named E {}
  625.     named F {} named G {} named H {} named I {} named J {}
  626.     named K {} named L {} named M {} named N {} named O {}
  627.     named P {} named Q {} named R {} named S {} named T {}
  628.     named U {} named V {} named W {} named X {} named Y {}
  629.     named Z {}
  630.     named above    { above   }
  631.     named below    { below   }
  632.     named side     { side    }
  633.     named vmargin   { vmargin }
  634.     {
  635.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  636.     @Fmtg
  637.       A { A }  B { B }  C { C }  D { D }  E { E }
  638.       F { F }  G { G }  H { H }  I { I }  J { J }
  639.       K { K }  L { L }  M { M }  N { N }  O { O }
  640.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  641.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  642.       Z { Z }
  643.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  644.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  645.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  646.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  647.       ,    { x @NSep y }
  648.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  649.     }
  650.  
  651.     def @DoRowh
  652.     named A {} named B {} named C {} named D {} named E {}
  653.     named F {} named G {} named H {} named I {} named J {}
  654.     named K {} named L {} named M {} named N {} named O {}
  655.     named P {} named Q {} named R {} named S {} named T {}
  656.     named U {} named V {} named W {} named X {} named Y {}
  657.     named Z {}
  658.     named above    { above   }
  659.     named below    { below   }
  660.     named side     { side    }
  661.     named vmargin   { vmargin }
  662.     {
  663.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  664.     @Fmth
  665.       A { A }  B { B }  C { C }  D { D }  E { E }
  666.       F { F }  G { G }  H { H }  I { I }  J { J }
  667.       K { K }  L { L }  M { M }  N { N }  O { O }
  668.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  669.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  670.       Z { Z }
  671.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  672.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  673.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  674.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  675.       ,    { x @NSep y }
  676.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  677.     }
  678.  
  679.     def @DoRowi
  680.     named A {} named B {} named C {} named D {} named E {}
  681.     named F {} named G {} named H {} named I {} named J {}
  682.     named K {} named L {} named M {} named N {} named O {}
  683.     named P {} named Q {} named R {} named S {} named T {}
  684.     named U {} named V {} named W {} named X {} named Y {}
  685.     named Z {}
  686.     named above    { above   }
  687.     named below    { below   }
  688.     named side     { side    }
  689.     named vmargin   { vmargin }
  690.     {
  691.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  692.     @Fmti
  693.       A { A }  B { B }  C { C }  D { D }  E { E }
  694.       F { F }  G { G }  H { H }  I { I }  J { J }
  695.       K { K }  L { L }  M { M }  N { N }  O { O }
  696.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  697.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  698.       Z { Z }
  699.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  700.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  701.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  702.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  703.       ,    { x @NSep y }
  704.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  705.     }
  706.  
  707.     def @DoRowj
  708.     named A {} named B {} named C {} named D {} named E {}
  709.     named F {} named G {} named H {} named I {} named J {}
  710.     named K {} named L {} named M {} named N {} named O {}
  711.     named P {} named Q {} named R {} named S {} named T {}
  712.     named U {} named V {} named W {} named X {} named Y {}
  713.     named Z {}
  714.     named above    { above   }
  715.     named below    { below   }
  716.     named side     { side    }
  717.     named vmargin   { vmargin }
  718.     {
  719.     @LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
  720.     @Fmtj
  721.       A { A }  B { B }  C { C }  D { D }  E { E }
  722.       F { F }  G { G }  H { H }  I { I }  J { J }
  723.       K { K }  L { L }  M { M }  N { N }  O { O }
  724.       P { P }  Q { Q }  R { R }  S { S }  T { T }
  725.       U { U }  V { V }  W { W }  X { X }  Y { Y }
  726.       Z { Z }
  727.       @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
  728.       !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
  729.       !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
  730.       !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
  731.       ,    { x @NSep y }
  732.     @RightEdge ur { above } dr { below } sr { side } vm { vmargin }
  733.     }
  734.  
  735.     macro @Rowa { / @DoRowa }
  736.     macro @Rowb { / @DoRowb }
  737.     macro @Rowc { / @DoRowc }
  738.     macro @Rowd { / @DoRowd }
  739.     macro @Rowe { / @DoRowe }
  740.     macro @Rowf { / @DoRowf }
  741.     macro @Rowg { / @DoRowg }
  742.     macro @Rowh { / @DoRowh }
  743.     macro @Rowi { / @DoRowi }
  744.     macro @Rowj { / @DoRowj }
  745.  
  746.     macro @MarkRowa { ^/ @DoRowa }
  747.     macro @MarkRowb { ^/ @DoRowb }
  748.     macro @MarkRowc { ^/ @DoRowc }
  749.     macro @MarkRowd { ^/ @DoRowd }
  750.     macro @MarkRowe { ^/ @DoRowe }
  751.     macro @MarkRowf { ^/ @DoRowf }
  752.     macro @MarkRowg { ^/ @DoRowg }
  753.     macro @MarkRowh { ^/ @DoRowh }
  754.     macro @MarkRowi { ^/ @DoRowi }
  755.     macro @MarkRowj { ^/ @DoRowj }
  756.  
  757.  
  758.     @Body
  759.  
  760. @End @Tab
  761.