> From: Roger Hui
> For the 5 examples I listed, can you produce programmatically
> (not by hand) results that "look like" what the monad ": produces?
> Also, can all the lines have the same width?  Currently the interior
> lines are thicker than the external ones.
> 
> Otherwise it looks promising.

The following handles 3 of the 5 examples and fixes the issue with the lines 
having different widths. Obviously the contents of the noun JARRAYSTYLE would 
probably be better added to the CSS for the session.

dispArray i.2 2 3 4
dispArray <"0 i.2 2 3 4
dispArray 2 3 4 $ i.&.> i.7

Next step is to handle the nested examples as well.

require 'strings'

sh     =: (*/@}: , {:)@(1&,)@$ ($,) ]
rows   =: */\...@}:@$
bl     =: }.@(,&0)@(+/)@(0&=)@(|/ i...@{.@(,&1))
mask   =: 1&,. #&, ,.&0@>:@i...@#
mat    =: m...@bl@rows { ' ' , sh

JARRAYSTYLE=: 0 : 0
<style type="text/css">
.jarray {font-family:monospace; }
table.jarray {border-collapse:collapse;}
table.jarray td {border:solid black 1px;vertical-align: top;}
table.jarray tr.spacer td {border:none;}
</style>
)

dispSimpArray=: 3 : 0
  t=. mat ": y
  t=. _4}., t ,"1 '<br>'
  t=. t rplc ' ';'&nbsp;'
  '<div class="jarray">',t,'</div>'
)

dispArray=: 3 : 0
  if. 0 = L. y do. JARRAYSTYLE, dispSimpArray y return. end.
    cols=. {:$ y
    t=. (,&.>/)"1 ('<td>', ,&'</td>')@dispSimpArray L:0 y
    t=. (,&.>/)"1 ('<tr>', ,&'</tr>') L:0 t
    s=. '<tr class="spacer">',(cols ((* #) $ ])'<td>&nbsp;</td>'),'</tr>'
    while. 0 < #$ t do.
      t=. ([ , s , ])&.>/"1 t
      s=. s,s
    end.
  JARRAYSTYLE,'<table class="jarray"><tbody>',(>t),'</tbody></table>'
)
 
> 
> ----- Original Message -----
> From: "Sherlock, Ric" <[email protected]>
> Date: Monday, March 29, 2010 18:46
> Subject: Re: [Jbeta] displaying boxed array in html
> To: Beta forum <[email protected]>
> 
> > I'm probably missing something, but it seems to me that a number
> > of the nested tables are redundant?
> > Couldn't a table cell <td></td> be thought of as a box?
> > Boxed planes could be separated rows without borders - that
> > would maintain vertical alignment of columns.
> >
> > Below is an alternative HTML representation of the last example
> > that uses 2 rather than 16 tables:
> > thh x=: 2 2 3 $ (i.&.>i.6),<<2 5$'abcdefghij'
> >
> > <style type="text/css">
> > table.arraydisp td {font-family:monospace; border:solid black
> > 1px;vertical-align: top;}
> > table.arraydisp tr.blank td {border:none;}
> > </style>
> >
> > <table class="arraydisp" cellspacing="0" cellpadding="3"><tbody>
> > <tr>
> >   <td> <br><br><br></td>
> >   <td>0<br><br><br></td>
> >   <td>0 1<br><br><br></td></tr>
> > <tr>
> >   <td>0 1 2</td>
> >   <td>0 1 2 3</td>
> >   <td>0 1 2 3 4</td></tr>
> > <tr class="blank">
> >   <td> </td>
> >   <td> </td>
> >   <td> </td></tr>
> > <tr>
> >   <td>
> >     <table class="arraydisp" cellspacing="0"
> > cellpadding="3"><tbody>      <tr>
> >
> > <td>abcde<br>fghij</td></tr></tbody>    </table></td>
> >   <td> <br><br><br></td>
> >   <td>0<br><br><br></td></tr>
> > <tr>
> >   <td>0 1</td>
> >   <td>0 1 2</td>
> >   <td>0 1 2 3</td></tr></tbody>
> > </table>
> >
> > > From: Roger Hui
> > >
> > > Examples to try:
> > >
> > > thh i.2 2 3 4
> > > thh <"0 i.2 2 3 4
> > > thh 5!:2 <'assert'
> > > thh 2 3 4$i.&.> i.7
> > > thh x=: 2 2 3 $ (i.&.>i.6),<<2 5$'abcdefghij'
> > >
> > > The last example demonstrates that vertical alignment
> > > between planes can not be achieved by padding with
> > > & nbsp; (because that can not account for the space used
> > > by the HTML box drawing lines).  It is probably the case
> > > that horizontal alignment between planes are not
> > > achieved either, but the naked eye can not easily tell.
> > >
> > > I will work up a version that produces vertically aligned results,
> > > using width=xx in the <td> tag.  This width will depend
> > > on the size of the (fixed width) font used to render the output.
> > >
> > > NB. from http://www.jsoftware.com/jwiki/Essays/Boxed_Array_Display
> > > sh     =: (*/@}: , {:)@(1&,)@$ ($,) ]
> > > rows   =: */\...@}:@$
> > > bl     =: }.@(,&0)@(+/)@(0&=)@(|/ i...@{.@(,&1))
> > > mask   =: 1&,. #&, ,.&0@>:@i...@#
> > > mat    =: m...@bl@rows { ' ' , sh
> > >
> > > TPROLOG =: '<table border=1 cellspacing=0 cellpadding=3>',CRLF
> > > TEPILOG =: '</table>',CRLF
> > > BOXCHARS=: 9!:6 ''     NB. box drawing
> > characters>
> > > thh=: 3 : 0  NB. "thorn" (array formatting) producing
> > HTML output
> > >  0 0 thh y
> > > :
> > >  if. 32 ~: 3!:0 y do.  NB. y is not boxed
> > >  'h w'=. x
> > >   t=. mat ": y
> > >   t=. t,"1 (((*w)*w-{:$t)$' '),'<br>'
> > >   t=. _4}.(,t),(4*(*h)*h-#t)$'<br>'
> > >   t=. ; (a.i.t){(<' ') 32}<"0 a.
> > >   ('<table><tr><td nowrap
> > valign=top><tt>'),t,'</tt></td></tr></table>'>  else.
> NB. y is boxed
> > >   t=. (_2&{...@$ ($,) ]) s=. ":y
> > >   w=. <: 2 -~/\ I. ({.   t) e. 0 1 2{BOXCHARS
> > >   h=. <: 2 -~/\ I. ({."1 t) e. 0 3 6{BOXCHARS
> > >   z=. ({h;w) <@thh2"2 ,:^:(0>.2-#$y) y
> > >   t=. 0 ,~ 0 -.~ bl rows y
> > >   z=. ; (,z),&.> ((4*t)$&.><'<br>'),&.><CRLF
> > >   if. >./x
> > do.         NB. use
> > height and width if nonzero
> > >    'h w'=. x
> > >    t=. $ mat s
> > >    z=. '<table><tr><td
> > nowrap>',z,'</td>',CRLF>    z=. z,' <td
> > nowrap>',((6*w-{:t)$' '),'</td></tr></table>',CRLF
> > >    z=. z, _4}.(4*h-{.t)$'<br>'
> > >   end.
> > >  end.
> > > )
> > >
> > > thh2=: 4 : 0  NB. rank 2 boxed argument
> > >  t=. ('<td nowrap>' , '</td>' ,~ ])&.> x thh&.> y
> > >  t=. <@('<tr>' , ('</tr>',CRLF) ,~ ; )"1 t
> > >  TPROLOG, (;t), TEPILOG
> > > )
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: Roger Hui <[email protected]>
> > > Date: Sunday, March 28, 2010 16:16
> > > Subject: Re: [Jbeta] displaying boxed array in html
> > > To: Beta forum <[email protected]>
> > >
> > > > This can be accomplished (I believe) by using <tt> </tt>
> > > > fixed width font and using   to pad.
> > > >
> > > > Anyway this sort of argument can be settled
> > > > by implementing a model.  This I intend to do.
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: Raul Miller <[email protected]>
> > > > Date: Sunday, March 28, 2010 16:00
> > > > Subject: Re: [Jbeta] displaying boxed array in html
> > > > To: Beta forum <[email protected]>
> > > >
> > > > > On Sun, Mar 28, 2010 at 6:51 PM, Roger Hui
> > > > <[email protected]> wrote:
> > > > > > For arrays with rank greater than 2, you need to align
> > > > > > elements at the same row and column.  That is,
> > > > > > in the output x{~<i0;j;k and x{~<i1;j;k are aligned.
> > > > >
> > > > > The only way I know to attempt this requires the server
> > > > specify the
> > > > > size of each box,
> > > > > which would greatly increase the complexity of this approach
> > > > and
> > > > > which also
> > > > > might introduce new failure modes.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to